Skip to content

Commit

Permalink
[VIRTS-2879] Plugins v2 API Pytests (#2300)
Browse files Browse the repository at this point in the history
* add pytests for plugins api

* remove unnecessary plugins from test api server

* resolve error in health tests
  • Loading branch information
bleepbop authored Oct 13, 2021
1 parent 4da3bdc commit a3532c2
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 15 deletions.
15 changes: 1 addition & 14 deletions tests/api/v2/handlers/test_health_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,7 @@
def expected_caldera_info():
return {
'application': 'CALDERA',
'plugins': [
{
'address': '/plugin/sandcat/gui',
'description': 'A custom multi-platform RAT',
'enabled': True,
'name': 'sandcat'
},
{
'address': 'plugin/ssl/gui',
'description': 'Run an SSL proxy in front of the server',
'enabled': False,
'name': 'ssl'
}
],
'plugins': [],
'version': app.get_version()
}

Expand Down
44 changes: 44 additions & 0 deletions tests/api/v2/handlers/test_plugins_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import pytest

from http import HTTPStatus

from app.objects.c_plugin import Plugin
from app.utility.base_service import BaseService


@pytest.fixture
def test_plugin(loop, api_v2_client):
plugin = Plugin(name="test_plugin", enabled=True, description="a test plugin", address="test_address")
loop.run_until_complete(BaseService.get_service('data_svc').store(plugin))
return plugin


@pytest.fixture
def expected_test_plugin_dump(test_plugin):
return test_plugin.display_schema.dump(test_plugin)


class TestPluginsApi:
async def test_get_plugins(self, api_v2_client, api_cookies, test_plugin, expected_test_plugin_dump):
resp = await api_v2_client.get('/api/v2/plugins', cookies=api_cookies)
plugins_list = await resp.json()
assert len(plugins_list) == 1
plugin_dict = plugins_list[0]
assert plugin_dict == expected_test_plugin_dump

async def test_unauthorized_get_plugins(self, api_v2_client, test_plugin):
resp = await api_v2_client.get('/api/v2/plugins')
assert resp.status == HTTPStatus.UNAUTHORIZED

async def test_get_plugin_by_id(self, api_v2_client, api_cookies, test_plugin, expected_test_plugin_dump):
resp = await api_v2_client.get(f'/api/v2/plugins/{test_plugin.name}', cookies=api_cookies)
plugin_dict = await resp.json()
assert plugin_dict == expected_test_plugin_dump

async def test_unauthorized_get_plugin_by_id(self, api_v2_client, test_plugin):
resp = await api_v2_client.get(f'/api/v2/plugins/{test_plugin.name}')
assert resp.status == HTTPStatus.UNAUTHORIZED

async def test_get_nonexistent_plugin_by_id(self, api_v2_client, api_cookies):
resp = await api_v2_client.get('/api/v2/plugins/999', cookies=api_cookies)
assert resp.status == HTTPStatus.NOT_FOUND
3 changes: 2 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from app.api.v2.handlers.operation_api import OperationApi
from app.api.v2.handlers.contact_api import ContactApi
from app.api.v2.handlers.obfuscator_api import ObfuscatorApi
from app.api.v2.handlers.plugins_api import PluginApi
from app.api.v2.handlers.fact_source_api import FactSourceApi
from app.api.v2.handlers.planner_api import PlannerApi
from app.api.v2.handlers.health_api import HealthApi
Expand Down Expand Up @@ -327,6 +328,7 @@ def make_app(svcs):
ContactApi(svcs).add_routes(app)
ObjectiveApi(svcs).add_routes(app)
ObfuscatorApi(svcs).add_routes(app)
PluginApi(svcs).add_routes(app)
FactSourceApi(svcs).add_routes(app)
PlannerApi(svcs).add_routes(app)
HealthApi(svcs).add_routes(app)
Expand All @@ -350,7 +352,6 @@ async def initialize():
os.chdir(str(Path(__file__).parents[1]))

await app_svc.register_contacts()
await app_svc.load_plugins(['sandcat', 'ssl'])
_ = await RestApi(services).enable()
await auth_svc.apply(app_svc.application, auth_svc.get_config('users'))
await auth_svc.set_login_handlers(services)
Expand Down

0 comments on commit a3532c2

Please sign in to comment.