diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-07-14 21:10:56 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2020-08-24 19:48:04 +0200 |
| commit | 02997b2522b9c66072b16f1425c02e81e0085e3c (patch) | |
| tree | eb8cb533e3ef37a11598e86736b063293f8b0e2b /web-server/opendc/api/v2/portfolios | |
| parent | 1a4776636bf6b585d4a19a6721d9d57b02c88ca4 (diff) | |
Rename web-server to API
This change renames the web-server component to API in order to be more
descriptive of its role. The OpenDC API bridges between the frontend on
one side and the database and simulator on the other side.
Diffstat (limited to 'web-server/opendc/api/v2/portfolios')
7 files changed, 0 insertions, 376 deletions
diff --git a/web-server/opendc/api/v2/portfolios/__init__.py b/web-server/opendc/api/v2/portfolios/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/web-server/opendc/api/v2/portfolios/__init__.py +++ /dev/null diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py b/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/web-server/opendc/api/v2/portfolios/portfolioId/__init__.py +++ /dev/null diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py deleted file mode 100644 index c0ca64e0..00000000 --- a/web-server/opendc/api/v2/portfolios/portfolioId/endpoint.py +++ /dev/null @@ -1,65 +0,0 @@ -from opendc.models.portfolio import Portfolio -from opendc.models.project import Project -from opendc.util.rest import Response - - -def GET(request): - """Get this Portfolio.""" - - request.check_required_parameters(path={'portfolioId': 'string'}) - - portfolio = Portfolio.from_id(request.params_path['portfolioId']) - - portfolio.check_exists() - portfolio.check_user_access(request.google_id, False) - - return Response(200, 'Successfully retrieved portfolio.', portfolio.obj) - - -def PUT(request): - """Update this Portfolio.""" - - request.check_required_parameters(path={'portfolioId': 'string'}, body={'portfolio': { - 'name': 'string', - 'targets': { - 'enabledMetrics': 'list', - 'repeatsPerScenario': 'int', - }, - }}) - - portfolio = Portfolio.from_id(request.params_path['portfolioId']) - - portfolio.check_exists() - portfolio.check_user_access(request.google_id, True) - - portfolio.set_property('name', - request.params_body['portfolio']['name']) - portfolio.set_property('targets.enabledMetrics', - request.params_body['portfolio']['targets']['enabledMetrics']) - portfolio.set_property('targets.repeatsPerScenario', - request.params_body['portfolio']['targets']['repeatsPerScenario']) - - portfolio.update() - - return Response(200, 'Successfully updated portfolio.', portfolio.obj) - - -def DELETE(request): - """Delete this Portfolio.""" - - request.check_required_parameters(path={'portfolioId': 'string'}) - - portfolio = Portfolio.from_id(request.params_path['portfolioId']) - - portfolio.check_exists() - portfolio.check_user_access(request.google_id, True) - - project = Project.from_id(portfolio.obj['projectId']) - project.check_exists() - if request.params_path['portfolioId'] in project.obj['portfolioIds']: - project.obj['portfolioIds'].remove(request.params_path['portfolioId']) - project.update() - - old_object = portfolio.delete() - - return Response(200, 'Successfully deleted portfolio.', old_object) diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py deleted file mode 100644 index e69de29b..00000000 --- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/__init__.py +++ /dev/null diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py deleted file mode 100644 index 1c5e0ab6..00000000 --- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/endpoint.py +++ /dev/null @@ -1,43 +0,0 @@ -from opendc.models.portfolio import Portfolio -from opendc.models.scenario import Scenario -from opendc.util.rest import Response - - -def POST(request): - """Add a new Scenario for this Portfolio.""" - - request.check_required_parameters(path={'portfolioId': 'string'}, - body={ - 'scenario': { - 'name': 'string', - 'trace': { - 'traceId': 'string', - 'loadSamplingFraction': 'float', - }, - 'topology': { - 'topologyId': 'string', - }, - 'operational': { - 'failuresEnabled': 'bool', - 'performanceInterferenceEnabled': 'bool', - 'schedulerName': 'string', - }, - } - }) - - portfolio = Portfolio.from_id(request.params_path['portfolioId']) - - portfolio.check_exists() - portfolio.check_user_access(request.google_id, True) - - scenario = Scenario(request.params_body['scenario']) - - scenario.set_property('portfolioId', request.params_path['portfolioId']) - scenario.set_property('simulationState', 'QUEUED') - - scenario.insert() - - portfolio.obj['scenarioIds'].append(scenario.get_id()) - portfolio.update() - - return Response(200, 'Successfully added Scenario.', scenario.obj) diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py deleted file mode 100644 index 8b55bab0..00000000 --- a/web-server/opendc/api/v2/portfolios/portfolioId/scenarios/test_endpoint.py +++ /dev/null @@ -1,119 +0,0 @@ -from opendc.util.database import DB - - -def test_add_scenario_missing_parameter(client): - assert '400' in client.post('/api/v2/portfolios/1/scenarios').status - - -def test_add_scenario_non_existing_portfolio(client, mocker): - mocker.patch.object(DB, 'fetch_one', return_value=None) - assert '404' in client.post('/api/v2/portfolios/1/scenarios', - json={ - 'scenario': { - 'name': 'test', - 'trace': { - 'traceId': '1', - 'loadSamplingFraction': 1.0, - }, - 'topology': { - 'topologyId': '1', - }, - 'operational': { - 'failuresEnabled': True, - 'performanceInterferenceEnabled': False, - 'schedulerName': 'DEFAULT', - }, - } - }).status - - -def test_add_scenario_not_authorized(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - '_id': '1', - 'projectId': '1', - 'portfolioId': '1', - 'authorizations': [{ - 'projectId': '1', - 'authorizationLevel': 'VIEW' - }] - }) - assert '403' in client.post('/api/v2/portfolios/1/scenarios', - json={ - 'scenario': { - 'name': 'test', - 'trace': { - 'traceId': '1', - 'loadSamplingFraction': 1.0, - }, - 'topology': { - 'topologyId': '1', - }, - 'operational': { - 'failuresEnabled': True, - 'performanceInterferenceEnabled': False, - 'schedulerName': 'DEFAULT', - }, - } - }).status - - -def test_add_scenario(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - '_id': '1', - 'projectId': '1', - 'portfolioId': '1', - 'portfolioIds': ['1'], - 'scenarioIds': ['1'], - 'authorizations': [{ - 'projectId': '1', - 'authorizationLevel': 'EDIT' - }], - 'simulationState': 'QUEUED', - }) - mocker.patch.object(DB, - 'insert', - return_value={ - '_id': '1', - 'name': 'test', - 'trace': { - 'traceId': '1', - 'loadSamplingFraction': 1.0, - }, - 'topology': { - 'topologyId': '1', - }, - 'operational': { - 'failuresEnabled': True, - 'performanceInterferenceEnabled': False, - 'schedulerName': 'DEFAULT', - }, - 'portfolioId': '1', - 'simulationState': 'QUEUED', - }) - mocker.patch.object(DB, 'update', return_value=None) - res = client.post( - '/api/v2/portfolios/1/scenarios', - json={ - 'scenario': { - 'name': 'test', - 'trace': { - 'traceId': '1', - 'loadSamplingFraction': 1.0, - }, - 'topology': { - 'topologyId': '1', - }, - 'operational': { - 'failuresEnabled': True, - 'performanceInterferenceEnabled': False, - 'schedulerName': 'DEFAULT', - }, - } - }) - assert 'portfolioId' in res.json['content'] - assert 'simulationState' in res.json['content'] - assert '200' in res.status diff --git a/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py b/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py deleted file mode 100644 index 7ac346d4..00000000 --- a/web-server/opendc/api/v2/portfolios/portfolioId/test_endpoint.py +++ /dev/null @@ -1,149 +0,0 @@ -from opendc.util.database import DB - - -def test_get_portfolio_non_existing(client, mocker): - mocker.patch.object(DB, 'fetch_one', return_value=None) - assert '404' in client.get('/api/v2/portfolios/1').status - - -def test_get_portfolio_no_authorizations(client, mocker): - mocker.patch.object(DB, 'fetch_one', return_value={'projectId': '1', 'authorizations': []}) - res = client.get('/api/v2/portfolios/1') - assert '403' in res.status - - -def test_get_portfolio_not_authorized(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - 'projectId': '1', - '_id': '1', - 'authorizations': [{ - 'projectId': '2', - 'authorizationLevel': 'OWN' - }] - }) - res = client.get('/api/v2/portfolios/1') - assert '403' in res.status - - -def test_get_portfolio(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - 'projectId': '1', - '_id': '1', - 'authorizations': [{ - 'projectId': '1', - 'authorizationLevel': 'EDIT' - }] - }) - res = client.get('/api/v2/portfolios/1') - assert '200' in res.status - - -def test_update_portfolio_missing_parameter(client): - assert '400' in client.put('/api/v2/portfolios/1').status - - -def test_update_portfolio_non_existing(client, mocker): - mocker.patch.object(DB, 'fetch_one', return_value=None) - assert '404' in client.put('/api/v2/portfolios/1', json={ - 'portfolio': { - 'name': 'test', - 'targets': { - 'enabledMetrics': ['test'], - 'repeatsPerScenario': 2 - } - } - }).status - - -def test_update_portfolio_not_authorized(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - '_id': '1', - 'projectId': '1', - 'authorizations': [{ - 'projectId': '1', - 'authorizationLevel': 'VIEW' - }] - }) - mocker.patch.object(DB, 'update', return_value={}) - assert '403' in client.put('/api/v2/portfolios/1', json={ - 'portfolio': { - 'name': 'test', - 'targets': { - 'enabledMetrics': ['test'], - 'repeatsPerScenario': 2 - } - } - }).status - - -def test_update_portfolio(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - '_id': '1', - 'projectId': '1', - 'authorizations': [{ - 'projectId': '1', - 'authorizationLevel': 'OWN' - }], - 'targets': { - 'enabledMetrics': [], - 'repeatsPerScenario': 1 - } - }) - mocker.patch.object(DB, 'update', return_value={}) - - res = client.put('/api/v2/portfolios/1', json={'portfolio': { - 'name': 'test', - 'targets': { - 'enabledMetrics': ['test'], - 'repeatsPerScenario': 2 - } - }}) - assert '200' in res.status - - -def test_delete_project_non_existing(client, mocker): - mocker.patch.object(DB, 'fetch_one', return_value=None) - assert '404' in client.delete('/api/v2/portfolios/1').status - - -def test_delete_project_different_user(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - '_id': '1', - 'projectId': '1', - 'googleId': 'other_test', - 'authorizations': [{ - 'projectId': '1', - 'authorizationLevel': 'VIEW' - }] - }) - mocker.patch.object(DB, 'delete_one', return_value=None) - assert '403' in client.delete('/api/v2/portfolios/1').status - - -def test_delete_project(client, mocker): - mocker.patch.object(DB, - 'fetch_one', - return_value={ - '_id': '1', - 'projectId': '1', - 'googleId': 'test', - 'portfolioIds': ['1'], - 'authorizations': [{ - 'projectId': '1', - 'authorizationLevel': 'OWN' - }] - }) - mocker.patch.object(DB, 'delete_one', return_value={}) - mocker.patch.object(DB, 'update', return_value=None) - res = client.delete('/api/v2/portfolios/1') - assert '200' in res.status |
