2016-08-17 18:21:50 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2016-08-18 00:23:49 +02:00
import unittest
2016-08-17 18:21:50 +02:00
import requests_mock
import json
2016-08-18 13:18:58 +02:00
import pymisp as pm
2016-08-17 18:21:50 +02:00
from pymisp import PyMISP
@requests_mock.Mocker ( )
2016-08-18 00:23:49 +02:00
class TestOffline ( unittest . TestCase ) :
2016-08-17 18:21:50 +02:00
def setUp ( self ) :
2016-08-18 00:40:30 +02:00
self . maxDiff = None
2016-08-17 18:21:50 +02:00
self . domain = ' http://misp.local/ '
self . key = ' aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa '
2016-08-18 00:40:30 +02:00
self . event = { ' Event ' : json . load ( open ( ' tests/misp_event.json ' , ' r ' ) ) }
2016-08-26 18:23:02 +02:00
self . new_misp_event = { ' Event ' : json . load ( open ( ' tests/new_misp_event.json ' , ' r ' ) ) }
2016-08-17 18:36:01 +02:00
self . types = json . load ( open ( ' tests/describeTypes.json ' , ' r ' ) )
2016-08-18 13:18:58 +02:00
self . sharing_groups = json . load ( open ( ' tests/sharing_groups.json ' , ' r ' ) )
2016-08-19 10:13:00 +02:00
self . auth_error_msg = { " name " : " Authentication failed. Please make sure you pass the API key of an API enabled user along in the Authorization header. " ,
" message " : " Authentication failed. Please make sure you pass the API key of an API enabled user along in the Authorization header. " ,
" url " : " \ /events \ /1 " }
2016-08-17 18:21:50 +02:00
def initURI ( self , m ) :
2016-08-19 10:13:00 +02:00
m . register_uri ( ' GET ' , self . domain + ' events/1 ' , json = self . auth_error_msg , status_code = 403 )
2016-08-18 13:18:58 +02:00
m . register_uri ( ' GET ' , self . domain + ' servers/getVersion.json ' , json = { " version " : " 2.4.50 " } )
m . register_uri ( ' GET ' , self . domain + ' sharing_groups/index.json ' , json = self . sharing_groups )
2016-08-17 18:21:50 +02:00
m . register_uri ( ' GET ' , self . domain + ' attributes/describeTypes.json ' , json = self . types )
m . register_uri ( ' GET ' , self . domain + ' events/2 ' , json = self . event )
2016-08-18 00:23:49 +02:00
m . register_uri ( ' POST ' , self . domain + ' events/2 ' , json = self . event )
m . register_uri ( ' DELETE ' , self . domain + ' events/2 ' , json = { ' message ' : ' Event deleted. ' } )
m . register_uri ( ' DELETE ' , self . domain + ' events/3 ' , json = { ' errors ' : [ ' Invalid event ' ] , ' message ' : ' Invalid event ' , ' name ' : ' Invalid event ' , ' url ' : ' /events/3 ' } )
2016-08-18 00:40:30 +02:00
m . register_uri ( ' DELETE ' , self . domain + ' attributes/2 ' , json = { ' message ' : ' Attribute deleted. ' } )
2016-08-17 18:21:50 +02:00
def test_getEvent ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-18 00:23:49 +02:00
e1 = pymisp . get_event ( 2 )
e2 = pymisp . get ( 2 )
self . assertEqual ( e1 , e2 )
self . assertEqual ( self . event , e2 )
def test_updateEvent ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-18 00:23:49 +02:00
e0 = pymisp . update_event ( 2 , json . dumps ( self . event ) )
e1 = pymisp . update_event ( 2 , self . event )
self . assertEqual ( e0 , e1 )
2016-08-18 00:40:30 +02:00
e2 = pymisp . update ( e0 )
2016-08-18 00:23:49 +02:00
self . assertEqual ( e1 , e2 )
self . assertEqual ( self . event , e2 )
def test_deleteEvent ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-18 00:23:49 +02:00
d = pymisp . delete_event ( 2 )
self . assertEqual ( d , { ' message ' : ' Event deleted. ' } )
d = pymisp . delete_event ( 3 )
self . assertEqual ( d , { ' errors ' : [ ' Invalid event ' ] , ' message ' : ' Invalid event ' , ' name ' : ' Invalid event ' , ' url ' : ' /events/3 ' } )
def test_deleteAttribute ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-18 00:23:49 +02:00
d = pymisp . delete_attribute ( 2 )
2016-08-18 00:40:30 +02:00
self . assertEqual ( d , { ' message ' : ' Attribute deleted. ' } )
def test_publish ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-18 00:40:30 +02:00
e = pymisp . publish ( self . event )
pub = self . event
pub [ ' Event ' ] [ ' published ' ] = True
self . assertEqual ( e , pub )
e = pymisp . publish ( self . event )
self . assertEqual ( e , { ' error ' : ' Already published ' } )
2016-08-18 13:18:58 +02:00
def test_getVersions ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-18 13:18:58 +02:00
api_version = pymisp . get_api_version ( )
self . assertEqual ( api_version , { ' version ' : pm . __version__ } )
server_version = pymisp . get_version ( )
self . assertEqual ( server_version , { " version " : " 2.4.50 " } )
def test_getSharingGroups ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-18 13:18:58 +02:00
sharing_groups = pymisp . get_sharing_groups ( )
self . assertEqual ( sharing_groups , self . sharing_groups [ ' response ' ] [ 0 ] )
2016-08-19 10:13:00 +02:00
def test_auth_error ( self , m ) :
self . initURI ( m )
2016-08-26 18:23:02 +02:00
pymisp = PyMISP ( self . domain , self . key )
2016-08-19 10:13:00 +02:00
error = pymisp . get ( 1 )
response = self . auth_error_msg
response [ ' errors ' ] = [ response [ ' message ' ] ]
2016-08-26 18:23:02 +02:00
self . assertEqual ( error , response )
def test_newEvent ( self , m ) :
error_empty_info = { ' message ' : ' The event could not be saved. ' , ' name ' : ' Add event failed. ' , ' errors ' : { ' Event ' : { ' info ' : [ ' Info cannot be empty. ' ] } } , ' url ' : ' /events/add ' }
error_empty_info_flatten = { ' message ' : ' The event could not be saved. ' , ' name ' : ' Add event failed. ' , ' errors ' : [ " Error in info: [ ' Info cannot be empty. ' ] " ] , ' url ' : ' /events/add ' }
self . initURI ( m )
pymisp = PyMISP ( self . domain , self . key )
with self . assertRaises ( pm . api . NewEventError ) :
pymisp . new_event ( )
with self . assertRaises ( pm . api . NewEventError ) :
pymisp . new_event ( 0 )
with self . assertRaises ( pm . api . NewEventError ) :
pymisp . new_event ( 0 , 1 )
m . register_uri ( ' POST ' , self . domain + ' events ' , json = error_empty_info )
response = pymisp . new_event ( 0 , 1 , 0 )
self . assertEqual ( response , error_empty_info_flatten )
m . register_uri ( ' POST ' , self . domain + ' events ' , json = self . new_misp_event )
response = pymisp . new_event ( 0 , 1 , 0 , " This is a test. " , ' 2016-08-26 ' , False )
self . assertEqual ( response , self . new_misp_event )
2016-08-19 10:13:00 +02:00
if __name__ == ' __main__ ' :
unittest . main ( )