diff --git a/capsulflask/db.py b/capsulflask/db.py index 23b3621..5f3eaa1 100644 --- a/capsulflask/db.py +++ b/capsulflask/db.py @@ -114,7 +114,7 @@ def init_app(app, is_running_server): -def get_model(): +def get_model() -> DBModel: if 'db_model' not in g: connection = current_app.config['PSYCOPG2_CONNECTION_POOL'].getconn() cursor = connection.cursor() diff --git a/capsulflask/db_model.py b/capsulflask/db_model.py index 976985a..9d31aba 100644 --- a/capsulflask/db_model.py +++ b/capsulflask/db_model.py @@ -381,7 +381,7 @@ class DBModel: def list_all_operations(self): self.cursor.execute(""" SELECT operations.id, operations.email, operations.created, operations.payload, - host_operation.host host_operation.assignment_status, host_operation.assigned, + host_operation.host, host_operation.assignment_status, host_operation.assigned, host_operation.completed, host_operation.results FROM operations JOIN host_operation ON host_operation.operation = operations.id """) diff --git a/capsulflask/hub_model.py b/capsulflask/hub_model.py index 375bb9f..a20f00b 100644 --- a/capsulflask/hub_model.py +++ b/capsulflask/hub_model.py @@ -196,7 +196,7 @@ class CapsulFlaskHub(VirtualizationInterface): def create(self, email: str, id: str, os: str, size: str, template_image_file_name: str, vcpus: int, memory_mb: int, ssh_authorized_keys: list): validate_capsul_id(id) online_hosts = get_model().get_online_hosts() - #current_app.logger.debug(f"hub_model.create(): ${len(online_hosts)} hosts") + current_app.logger.debug(f"hub_model.create(): ${len(online_hosts)} hosts") payload = json.dumps(dict( type="create", email=email, diff --git a/capsulflask/tests/test_console.py b/capsulflask/tests/test_console.py index 6e3b201..23d200a 100644 --- a/capsulflask/tests/test_console.py +++ b/capsulflask/tests/test_console.py @@ -6,7 +6,7 @@ from flask import url_for from capsulflask.db import get_model from capsulflask.tests_base import BaseTestCase -from capsulflask.hub_model import MockHub +from capsulflask.spoke_model import MockSpoke class ConsoleTests(BaseTestCase): @@ -65,9 +65,11 @@ class ConsoleTests(BaseTestCase): get_model().create_payment_session('fake', 'test', 'test@example.com', 20) get_model().consume_payment_session('fake', 'test', 20) - with patch.object(MockHub, 'capacity_avaliable', return_value=False) as mock_method: + with patch.object(MockSpoke, 'capacity_avaliable', return_value=False) as mock_method: response = client.post(url_for("console.create"), data=data) + self.assert200(response) + mock_method.assert_called() capacity_message = \ @@ -112,6 +114,14 @@ class ConsoleTests(BaseTestCase): response = client.post(url_for("console.create"), data=data) + + + + self.assertEqual( + len(get_model().list_all_operations()), + 1 + ) + vms = get_model().list_vms_for_account('test@example.com') self.assertEqual( len(vms), @@ -125,6 +135,7 @@ class ConsoleTests(BaseTestCase): url_for("console.index") + f'?created={vm_id}' ) + def test_keys_loads(self): self._login('test@example.com') with self.client as client: diff --git a/capsulflask/tests_base.py b/capsulflask/tests_base.py index 8067d5e..43c9ed5 100644 --- a/capsulflask/tests_base.py +++ b/capsulflask/tests_base.py @@ -11,8 +11,9 @@ class BaseTestCase(TestCase): # Use default connection paramaters os.environ['POSTGRES_CONNECTION_PARAMETERS'] = "host=localhost port=5432 user=postgres password=dev dbname=capsulflask_test" os.environ['TESTING'] = '1' + os.environ['LOG_LEVEL'] = 'DEBUG' os.environ['SPOKE_MODEL'] = 'mock' - os.environ['HUB_MODEL'] = 'mock' + os.environ['HUB_MODEL'] = 'capsul-flask' return create_app() def setUp(self): diff --git a/docs/testing.md b/docs/testing.md index 15db636..42de70f 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -4,9 +4,9 @@ Automated tests could make it safer to contribute code, easier to review new cod To run tests: 1. create a Postgres database called `capsulflask_test` - - e.g.: `docker exec -it d1702306f409 psql -U postgres createdb -O postgres capsulflask_test;` - - (`d1702306f409` is the docker container ID of the postgres container) -2. run `python -m unittest` + - e.g.: `docker exec -it 98e1ddfbbffb createdb -U postgres -O postgres capsulflask_test` + - (`98e1ddfbbffb` is the docker container ID of the postgres container) +2. run `python3 -m unittest` ### Architecture @@ -19,13 +19,13 @@ One outstanding question is how to initialise/reinitialise the test database. Currently, the tests rely on the existence of a capsulflask_test database on localhost, accessible by the postgres user with password dev. I create this manually using: -`docker exec -it d1702306f409 psql -U postgres createdb -O postgres capsulflask_test;` +`docker exec -it 98e1ddfbbffb createdb -U postgres -O postgres capsulflask_test` -where `d1702306f409` is the docker container ID of the postgres container. +where `98e1ddfbbffb` is the docker container ID of the postgres container. In between test runs, you can either drop and recreate that database, or manually clear data using: -`docker exec -it d1702306f409 psql -U postgres capsulflask_test -c "DELETE FROM vms; DELETE FROM login_tokens; DELETE FROM ssh_public_keys; DELETE FROM api_tokens; DELETE FROM accounts;` +`docker exec -it 98e1ddfbbffb psql -U postgres capsulflask_test -c "DELETE FROM vm_ssh_authorized_key; DELETE FROM vm_ssh_host_key; DELETE FROM vms; DELETE FROM login_tokens; DELETE FROM ssh_public_keys; DELETE FROM unresolved_btcpay_invoices; DELETE FROM payments; DELETE FROM payment_sessions; DELETE FROM host_operation; DELETE FROM operations; DELETE FROM api_tokens; DELETE FROM accounts;" ` ### Test coverage