Skip to content

Commit a3532c2

Browse files
authored
[VIRTS-2879] Plugins v2 API Pytests (#2300)
* add pytests for plugins api * remove unnecessary plugins from test api server * resolve error in health tests
1 parent 4da3bdc commit a3532c2

File tree

3 files changed

+47
-15
lines changed

3 files changed

+47
-15
lines changed

tests/api/v2/handlers/test_health_api.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,7 @@
88
def expected_caldera_info():
99
return {
1010
'application': 'CALDERA',
11-
'plugins': [
12-
{
13-
'address': '/plugin/sandcat/gui',
14-
'description': 'A custom multi-platform RAT',
15-
'enabled': True,
16-
'name': 'sandcat'
17-
},
18-
{
19-
'address': 'plugin/ssl/gui',
20-
'description': 'Run an SSL proxy in front of the server',
21-
'enabled': False,
22-
'name': 'ssl'
23-
}
24-
],
11+
'plugins': [],
2512
'version': app.get_version()
2613
}
2714

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import pytest
2+
3+
from http import HTTPStatus
4+
5+
from app.objects.c_plugin import Plugin
6+
from app.utility.base_service import BaseService
7+
8+
9+
@pytest.fixture
10+
def test_plugin(loop, api_v2_client):
11+
plugin = Plugin(name="test_plugin", enabled=True, description="a test plugin", address="test_address")
12+
loop.run_until_complete(BaseService.get_service('data_svc').store(plugin))
13+
return plugin
14+
15+
16+
@pytest.fixture
17+
def expected_test_plugin_dump(test_plugin):
18+
return test_plugin.display_schema.dump(test_plugin)
19+
20+
21+
class TestPluginsApi:
22+
async def test_get_plugins(self, api_v2_client, api_cookies, test_plugin, expected_test_plugin_dump):
23+
resp = await api_v2_client.get('/api/v2/plugins', cookies=api_cookies)
24+
plugins_list = await resp.json()
25+
assert len(plugins_list) == 1
26+
plugin_dict = plugins_list[0]
27+
assert plugin_dict == expected_test_plugin_dump
28+
29+
async def test_unauthorized_get_plugins(self, api_v2_client, test_plugin):
30+
resp = await api_v2_client.get('/api/v2/plugins')
31+
assert resp.status == HTTPStatus.UNAUTHORIZED
32+
33+
async def test_get_plugin_by_id(self, api_v2_client, api_cookies, test_plugin, expected_test_plugin_dump):
34+
resp = await api_v2_client.get(f'/api/v2/plugins/{test_plugin.name}', cookies=api_cookies)
35+
plugin_dict = await resp.json()
36+
assert plugin_dict == expected_test_plugin_dump
37+
38+
async def test_unauthorized_get_plugin_by_id(self, api_v2_client, test_plugin):
39+
resp = await api_v2_client.get(f'/api/v2/plugins/{test_plugin.name}')
40+
assert resp.status == HTTPStatus.UNAUTHORIZED
41+
42+
async def test_get_nonexistent_plugin_by_id(self, api_v2_client, api_cookies):
43+
resp = await api_v2_client.get('/api/v2/plugins/999', cookies=api_cookies)
44+
assert resp.status == HTTPStatus.NOT_FOUND

tests/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from app.api.v2.handlers.operation_api import OperationApi
2020
from app.api.v2.handlers.contact_api import ContactApi
2121
from app.api.v2.handlers.obfuscator_api import ObfuscatorApi
22+
from app.api.v2.handlers.plugins_api import PluginApi
2223
from app.api.v2.handlers.fact_source_api import FactSourceApi
2324
from app.api.v2.handlers.planner_api import PlannerApi
2425
from app.api.v2.handlers.health_api import HealthApi
@@ -327,6 +328,7 @@ def make_app(svcs):
327328
ContactApi(svcs).add_routes(app)
328329
ObjectiveApi(svcs).add_routes(app)
329330
ObfuscatorApi(svcs).add_routes(app)
331+
PluginApi(svcs).add_routes(app)
330332
FactSourceApi(svcs).add_routes(app)
331333
PlannerApi(svcs).add_routes(app)
332334
HealthApi(svcs).add_routes(app)
@@ -350,7 +352,6 @@ async def initialize():
350352
os.chdir(str(Path(__file__).parents[1]))
351353

352354
await app_svc.register_contacts()
353-
await app_svc.load_plugins(['sandcat', 'ssl'])
354355
_ = await RestApi(services).enable()
355356
await auth_svc.apply(app_svc.application, auth_svc.get_config('users'))
356357
await auth_svc.set_login_handlers(services)

0 commit comments

Comments
 (0)