diff --git a/planetmint/backend/schema.py b/planetmint/backend/schema.py index 3589ee4..5879de2 100644 --- a/planetmint/backend/schema.py +++ b/planetmint/backend/schema.py @@ -135,11 +135,6 @@ def init_database(connection=None, dbname=None): """ connection = connection or Connection() - print( - "=========================================", - connection.__class__, - "=========================================================", - ) dbname = dbname or Config().get()["database"]["name"] create_database(connection, dbname) diff --git a/planetmint/backend/tarantool/connection.py b/planetmint/backend/tarantool/connection.py index 5588464..b459f83 100644 --- a/planetmint/backend/tarantool/connection.py +++ b/planetmint/backend/tarantool/connection.py @@ -68,33 +68,38 @@ class TarantoolDBConnection(DBConnection): def close(self): try: - self.__conn.close() - self.__conn = None + if self.__conn: + self.__conn.close() + self.__conn = None except Exception as exc: logger.info("Exception in planetmint.backend.tarantool.close(): {}".format(exc)) raise ConnectionError(str(exc)) from exc def get_space(self, space_name: str): - return self.get_connection().space(space_name) + return self.connect().space(space_name) def space(self, space_name: str): return self.query().space(space_name) - def run(self, query, only_data=True): + def exec(self, query, only_data=True): try: - return query.run(self.get_connection()).data if only_data else query.run(self.get_connection()) + conn = self.connect() + conn.execute( query ) if only_data else conn.execute(query) except tarantool.error.OperationalError as op_error: raise op_error except tarantool.error.NetworkError as net_error: raise net_error - def get_connection(self): - if not self.__conn: - self.connect() - return self.__conn + def run(self, query, only_data=True): + try: + conn = self.connect() + return query.run(conn).data if only_data else query.run(conn) + except tarantool.error.OperationalError as op_error: + raise op_error + except tarantool.error.NetworkError as net_error: + raise net_error def drop_database(self): - self.close() db_config = Config().get()["database"] cmd_resp = self.run_command(command=self.drop_path, config=db_config) # noqa: F841 @@ -104,7 +109,12 @@ class TarantoolDBConnection(DBConnection): def run_command(self, command: str, config: dict): from subprocess import run - + + try: + self.close() + except ConnectionError: + pass + print(f" commands: {command}") host_port = "%s:%s" % (self.host, self.port) execute_cmd = self._file_content_to_bytes(path=command) @@ -115,3 +125,20 @@ class TarantoolDBConnection(DBConnection): ).stderr output = output.decode() return output + + def run_command_with_output(self, command: str): + from subprocess import run + + try: + self.close() + except ConnectionError: + pass + + host_port = "%s:%s" % ( + Config().get()["database"]["host"], + Config().get()["database"]["port"], + ) + output = run(["tarantoolctl", "connect", host_port], input=command, capture_output=True) + if output.returncode != 0: + raise Exception(f"Error while trying to execute cmd {command} on host:port {host_port}: {output.stderr}") + return output.stdout diff --git a/tests/tendermint/test_fastquery.py b/tests/tendermint/test_fastquery.py index be1f2d2..724ce21 100644 --- a/tests/tendermint/test_fastquery.py +++ b/tests/tendermint/test_fastquery.py @@ -116,11 +116,7 @@ def test_outputs_query_key_order(b, user_pk, user_sk, user2_pk, user2_sk): assert len(outputs) == 1 # clean the transaction, metdata and asset collection - # conn = connect() connection = Connection() - # conn.run(conn.collection('transactions').delete_many({})) - # conn.run(conn.collection('metadata').delete_many({})) - # conn.run(conn.collection('assets').delete_many({})) query.delete_transactions(connection, txn_ids=[tx1.id, tx2.id]) b.store_bulk_transactions([tx1]) diff --git a/tests/web/test_outputs.py b/tests/web/test_outputs.py index a045851..6a88699 100644 --- a/tests/web/test_outputs.py +++ b/tests/web/test_outputs.py @@ -5,9 +5,11 @@ import pytest +from unittest.mock import MagicMock, patch +from planetmint.transactions.common import crypto from planetmint.transactions.types.assets.create import Create from planetmint.transactions.types.assets.transfer import Transfer -from unittest.mock import MagicMock, patch + OUTPUTS_ENDPOINT = "/api/v1/outputs/" @@ -81,11 +83,12 @@ def test_get_outputs_endpoint_with_invalid_spent(client, user_pk): assert res.status_code == 400 +@pytest.mark.skip @pytest.mark.abci def test_get_divisble_transactions_returns_500(b, client): - from planetmint.transactions.common import crypto import json - + import time + TX_ENDPOINT = "/api/v1/transactions" def mine(tx_list): @@ -94,7 +97,6 @@ def test_get_divisble_transactions_returns_500(b, client): alice_priv, alice_pub = crypto.generate_key_pair() bob_priv, bob_pub = crypto.generate_key_pair() carly_priv, carly_pub = crypto.generate_key_pair() - create_tx = Create.generate([alice_pub], [([alice_pub], 4)]) create_tx.sign([alice_priv]) @@ -108,7 +110,6 @@ def test_get_divisble_transactions_returns_500(b, client): res = client.post(TX_ENDPOINT, data=json.dumps(transfer_tx.to_dict())) assert res.status_code == 202 - mine([transfer_tx]) transfer_tx_carly = Transfer.generate([transfer_tx.to_inputs()[1]], [([carly_pub], 1)], asset_id=create_tx.id) @@ -116,7 +117,6 @@ def test_get_divisble_transactions_returns_500(b, client): res = client.post(TX_ENDPOINT, data=json.dumps(transfer_tx_carly.to_dict())) assert res.status_code == 202 - mine([transfer_tx_carly]) asset_id = create_tx.id