From dbd33e5f556f153f47c66234b9ae765f6a3e88a1 Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 14 Jan 2021 22:01:50 +0300 Subject: [PATCH 001/100] Add test_auth_txn_with_deprecated_key Signed-off-by: toktar --- .../test_auth_txn_with_deprecated_key.py | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py diff --git a/indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py b/indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py new file mode 100644 index 000000000..2f73d27f5 --- /dev/null +++ b/indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py @@ -0,0 +1,140 @@ +import shutil +from contextlib import contextmanager + +import pytest + +from indy_common.config_helper import NodeConfigHelper +from indy_node.test.helper import TestNode +from plenum.test.node_catchup.helper import ensure_all_nodes_have_same_data +from plenum.test.test_node import ensureElectionsDone, ensure_node_disconnected, checkNodesConnected +from indy_node.test.auth_rule.helper import sdk_send_and_check_auth_rule_request, sdk_send_and_check_get_auth_rule_request +from indy_common.authorize.auth_actions import ADD_PREFIX, AuthActionAdd +from indy_common.authorize.auth_constraints import AuthConstraint +from indy_common.constants import CONSTRAINT, AUTH_TYPE, CONFIG_LEDGER_ID +from indy_common.authorize.auth_map import one_trustee_constraint +from plenum.common.constants import STEWARD, DATA +from plenum.common.exceptions import RequestNackedException + + +@contextmanager +def extend_auth_map(nodes, key, constraint): + """ + Context manager to add a new auth rule to the auth map and remove it on exit. + + :param nodes: nodes list which auth maps should be changed + :param key: str gotten from AuthActionAdd(...).get_action_id() + :param constraint: AuthConstraint + """ + for node in nodes: + node.write_req_validator.auth_map[key] = constraint + yield + for node in nodes: + node.write_req_validator.auth_map.pop(key, None) + + +def test_auth_txn_with_deprecated_key(tconf, tdir, allPluginsPath, + txnPoolNodeSet, + looper, + sdk_wallet_trustee, + sdk_pool_handle): + """ + Add to the auth_map a fake rule + Send AUTH_RULE txn to change this fake rule (and set the fake key to the config state) + Send GET_AUTH_RULE txn and check that the fake rule was changed + Remove the fake auth rule from the map + Check that we can't get the fake auth rule + Restart the last node with its state regeneration + Check that nodes data is equal (restarted node regenerate config state) + """ + + fake_txn_type = "100002" + fake_key = AuthActionAdd(txn_type=fake_txn_type, + field="*", + value="*").get_action_id() + fake_constraint = one_trustee_constraint + new_auth_constraint = AuthConstraint(role=STEWARD, sig_count=1, need_to_be_owner=False).as_dict + + # Add to the auth_map a fake rule + with extend_auth_map(txnPoolNodeSet, + fake_key, + fake_constraint): + # Send AUTH_RULE txn to change this fake rule (and set the fake key to the config state) + sdk_send_and_check_auth_rule_request(looper, + sdk_pool_handle, + sdk_wallet_trustee, + auth_action=ADD_PREFIX, + auth_type=fake_txn_type, + field='*', + new_value='*', + constraint=new_auth_constraint) + # Send GET_AUTH_RULE txn and check that the fake rule was changed + result = sdk_send_and_check_get_auth_rule_request( + looper, + sdk_pool_handle, + sdk_wallet_trustee, + auth_type=fake_txn_type, + auth_action=ADD_PREFIX, + field="*", + new_value="*" + )[0][1]["result"][DATA][0] + assert result[AUTH_TYPE] == fake_txn_type + assert result[CONSTRAINT] == new_auth_constraint + + # Remove the fake auth rule from the map + # Check that we can't get the fake auth rule + with pytest.raises(RequestNackedException, match="not found in authorization map"): + sdk_send_and_check_auth_rule_request(looper, + sdk_pool_handle, + sdk_wallet_trustee, + auth_action=ADD_PREFIX, + auth_type=fake_txn_type, + field='*', + new_value='*', + constraint=AuthConstraint(role=STEWARD, sig_count=2, + need_to_be_owner=False).as_dict) + + resp = sdk_send_and_check_get_auth_rule_request(looper, + sdk_pool_handle, + sdk_wallet_trustee) + + assert all(rule[AUTH_TYPE] != fake_txn_type for rule in resp[0][1]["result"][DATA]) + + with pytest.raises(RequestNackedException, match="not found in authorization map"): + sdk_send_and_check_get_auth_rule_request( + looper, + sdk_pool_handle, + sdk_wallet_trustee, + auth_type=fake_txn_type, + auth_action=ADD_PREFIX, + field="*", + new_value="*" + ) + # Restart the last node with its state regeneration + ensure_all_nodes_have_same_data(looper, txnPoolNodeSet) + + node_to_stop = txnPoolNodeSet[-1] + node_state = node_to_stop.states[CONFIG_LEDGER_ID] + assert not node_state.isEmpty + state_db_path = node_state._kv.db_path + node_to_stop.cleanupOnStopping = False + node_to_stop.stop() + looper.removeProdable(node_to_stop) + ensure_node_disconnected(looper, node_to_stop, txnPoolNodeSet[:-1]) + + shutil.rmtree(state_db_path) + + config_helper = NodeConfigHelper(node_to_stop.name, tconf, chroot=tdir) + restarted_node = TestNode( + node_to_stop.name, + config_helper=config_helper, + config=tconf, + pluginPaths=allPluginsPath, + ha=node_to_stop.nodestack.ha, + cliha=node_to_stop.clientstack.ha) + looper.add(restarted_node) + txnPoolNodeSet[-1] = restarted_node + + # Check that nodes data is equal (restarted node regenerate config state) + looper.run(checkNodesConnected(txnPoolNodeSet)) + ensureElectionsDone(looper, txnPoolNodeSet, customTimeout=30) + ensure_all_nodes_have_same_data(looper, txnPoolNodeSet, custom_timeout=20) From 2e9029e3ed3ce2be2cf63e055691a0e200736704 Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 14 Jan 2021 22:13:31 +0300 Subject: [PATCH 002/100] UP-37: add writing to test_auth_txn_with_deprecated_key Signed-off-by: toktar --- .../test_auth_txn_with_deprecated_key.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py b/indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py index 2f73d27f5..d2c270b29 100644 --- a/indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py +++ b/indy_node/test/auth_rule/test_auth_txn_with_deprecated_key.py @@ -9,8 +9,8 @@ from plenum.test.test_node import ensureElectionsDone, ensure_node_disconnected, checkNodesConnected from indy_node.test.auth_rule.helper import sdk_send_and_check_auth_rule_request, sdk_send_and_check_get_auth_rule_request from indy_common.authorize.auth_actions import ADD_PREFIX, AuthActionAdd -from indy_common.authorize.auth_constraints import AuthConstraint -from indy_common.constants import CONSTRAINT, AUTH_TYPE, CONFIG_LEDGER_ID +from indy_common.authorize.auth_constraints import AuthConstraint, ROLE +from indy_common.constants import CONSTRAINT, AUTH_TYPE, CONFIG_LEDGER_ID, NYM from indy_common.authorize.auth_map import one_trustee_constraint from plenum.common.constants import STEWARD, DATA from plenum.common.exceptions import RequestNackedException @@ -44,7 +44,7 @@ def test_auth_txn_with_deprecated_key(tconf, tdir, allPluginsPath, Remove the fake auth rule from the map Check that we can't get the fake auth rule Restart the last node with its state regeneration - Check that nodes data is equal (restarted node regenerate config state) + Check that nodes data is equal after changing the existing auth rule (restarted node regenerate config state) """ fake_txn_type = "100002" @@ -137,4 +137,14 @@ def test_auth_txn_with_deprecated_key(tconf, tdir, allPluginsPath, # Check that nodes data is equal (restarted node regenerate config state) looper.run(checkNodesConnected(txnPoolNodeSet)) ensureElectionsDone(looper, txnPoolNodeSet, customTimeout=30) + sdk_send_and_check_auth_rule_request(looper, + sdk_pool_handle, + sdk_wallet_trustee, + auth_action=ADD_PREFIX, + auth_type=NYM, + field=ROLE, + new_value=STEWARD, + constraint=AuthConstraint(role=STEWARD, sig_count=2, + need_to_be_owner=False).as_dict) ensure_all_nodes_have_same_data(looper, txnPoolNodeSet, custom_timeout=20) + From 36886c2040421ea2d4a6959c8552f77d331c1ff0 Mon Sep 17 00:00:00 2001 From: toktar Date: Wed, 20 Jan 2021 02:12:21 +0300 Subject: [PATCH 003/100] UP-34: Start to add GET_FROZEN_LEDGERS and LEDGERS_FREEZE Signed-off-by: toktar --- indy_common/constants.py | 6 ++ indy_common/state/config.py | 1 + .../types/test_get_frozen_ledgers_schema.py | 19 ++++++ .../test/types/test_ledgers_freeze_schema.py | 20 ++++++ indy_common/transactions.py | 3 + indy_common/types.py | 18 +++++- .../ledger_freeze_handler.py | 61 +++++++++++++++++++ .../get_frozen_ledgers_handler.py | 42 +++++++++++++ .../test_catching_up_auth_rule_txn.py | 6 +- 9 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 indy_common/test/types/test_get_frozen_ledgers_schema.py create mode 100644 indy_common/test/types/test_ledgers_freeze_schema.py create mode 100644 indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py create mode 100644 indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py diff --git a/indy_common/constants.py b/indy_common/constants.py index 3d4e6d425..38d3a2aae 100644 --- a/indy_common/constants.py +++ b/indy_common/constants.py @@ -38,6 +38,9 @@ FIELD = "field" RULES = "rules" +# LEDGERS_FREEZE +LEDGERS_IDS = "ledger_ids" + ROLE = 'role' NONCE = 'nonce' ATTRIBUTES = "attributes" @@ -172,6 +175,9 @@ AUTH_RULES = IndyTransactions.AUTH_RULES.value GET_AUTH_RULE = IndyTransactions.GET_AUTH_RULE.value +LEDGERS_FREEZE = IndyTransactions.LEDGERS_FREEZE.value +GET_FROZEN_LEDGERS = IndyTransactions.GET_FROZEN_LEDGERS.value + # client Rich Schema transaction types JSON_LD_CONTEXT = IndyTransactions.JSON_LD_CONTEXT.value RICH_SCHEMA = IndyTransactions.RICH_SCHEMA.value diff --git a/indy_common/state/config.py b/indy_common/state/config.py index 3f111a216..008be3f19 100644 --- a/indy_common/state/config.py +++ b/indy_common/state/config.py @@ -1,4 +1,5 @@ MARKER_AUTH_RULE = "1" +MARKER_FROZEN_LEDGERS = "2" def make_state_path_for_auth_rule(action_id) -> bytes: diff --git a/indy_common/test/types/test_get_frozen_ledgers_schema.py b/indy_common/test/types/test_get_frozen_ledgers_schema.py new file mode 100644 index 000000000..f4aeae9eb --- /dev/null +++ b/indy_common/test/types/test_get_frozen_ledgers_schema.py @@ -0,0 +1,19 @@ +from collections import OrderedDict + +from indy_common.types import ClientGetFrozenLedgersOperation +from plenum.common.messages.fields import ConstantField + +EXPECTED_ORDERED_FIELDS = OrderedDict([ + ("type", ConstantField) +]) + + +def test_has_expected_fields(): + actual_field_names = OrderedDict(ClientGetFrozenLedgersOperation.schema).keys() + assert actual_field_names == EXPECTED_ORDERED_FIELDS.keys() + + +def test_has_expected_validators(): + schema = dict(ClientGetFrozenLedgersOperation.schema) + for field, validator in EXPECTED_ORDERED_FIELDS.items(): + assert isinstance(schema[field], validator) diff --git a/indy_common/test/types/test_ledgers_freeze_schema.py b/indy_common/test/types/test_ledgers_freeze_schema.py new file mode 100644 index 000000000..97431445a --- /dev/null +++ b/indy_common/test/types/test_ledgers_freeze_schema.py @@ -0,0 +1,20 @@ +from collections import OrderedDict + +from indy_common.types import ClientLedgersFreezeOperation +from plenum.common.messages.fields import ConstantField, IterableField + +EXPECTED_ORDERED_FIELDS = OrderedDict([ + ("type", ConstantField), + ("ledgers_ids", IterableField) +]) + + +def test_has_expected_fields(): + actual_field_names = OrderedDict(ClientLedgersFreezeOperation.schema).keys() + assert actual_field_names == EXPECTED_ORDERED_FIELDS.keys() + + +def test_has_expected_validators(): + schema = dict(ClientLedgersFreezeOperation.schema) + for field, validator in EXPECTED_ORDERED_FIELDS.items(): + assert isinstance(schema[field], validator) diff --git a/indy_common/transactions.py b/indy_common/transactions.py index b1d966d76..ca87542c4 100644 --- a/indy_common/transactions.py +++ b/indy_common/transactions.py @@ -38,6 +38,9 @@ class IndyTransactions(Transactions): GET_AUTH_RULE = "121" AUTH_RULES = "122" + LEDGERS_FREEZE = "123" + GET_FROZEN_LEDGERS = "123" + # Rich Schema JSON_LD_CONTEXT = "200" RICH_SCHEMA = "201" diff --git a/indy_common/types.py b/indy_common/types.py index f76e56b1a..90421e7ad 100644 --- a/indy_common/types.py +++ b/indy_common/types.py @@ -44,7 +44,7 @@ RS_NAME, RS_ID, RS_CONTENT, RS_CONTEXT_TYPE_VALUE, RICH_SCHEMA, RS_SCHEMA_TYPE_VALUE, RS_ENCODING_TYPE_VALUE, \ RICH_SCHEMA_ENCODING, RS_MAPPING_TYPE_VALUE, RICH_SCHEMA_MAPPING, RS_CRED_DEF_TYPE_VALUE, \ RICH_SCHEMA_CRED_DEF, GET_RICH_SCHEMA_OBJECT_BY_ID, GET_RICH_SCHEMA_OBJECT_BY_METADATA, \ - RICH_SCHEMA_PRES_DEF, RS_PRES_DEF_TYPE_VALUE + RICH_SCHEMA_PRES_DEF, RS_PRES_DEF_TYPE_VALUE, GET_FROZEN_LEDGERS, LEDGERS_FREEZE, LEDGERS_IDS from indy_common.version import SchemaVersion @@ -415,6 +415,20 @@ class ClientGetAuthRuleOperation(MessageValidator): ) +class ClientLedgersFreezeOperation(MessageValidator): + schema = ( + (TXN_TYPE, ConstantField(LEDGERS_FREEZE)), + # Not LedgerIdField because the ledger may be already removed + (LEDGERS_IDS, IterableField(inner_field_type=IntegerField())) + ) + + +class ClientGetFrozenLedgersOperation(MessageValidator): + schema = ( + (TXN_TYPE, ConstantField(GET_FROZEN_LEDGERS)) + ) + + def rich_schema_objects_schema(txn_type, rs_type): return ( (TXN_TYPE, ConstantField(txn_type)), @@ -497,6 +511,8 @@ class ClientOperationField(PClientOperationField): RICH_SCHEMA_PRES_DEF: ClientRichSchemaPresDefOperation(), GET_RICH_SCHEMA_OBJECT_BY_ID: ClientGetRichSchemaObjectByIdOperation(), GET_RICH_SCHEMA_OBJECT_BY_METADATA: ClientGetRichSchemaObjectByMetadataOperation(), + LEDGERS_FREEZE: ClientLedgersFreezeOperation(), + GET_FROZEN_LEDGERS: ClientGetFrozenLedgersOperation() } # TODO: it is a workaround because INDY-338, `operations` must be a class diff --git a/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py b/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py new file mode 100644 index 000000000..844ace190 --- /dev/null +++ b/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py @@ -0,0 +1,61 @@ +from typing import Optional + +from indy_common.authorize.auth_actions import AuthActionAdd, AuthActionEdit +from indy_common.authorize.auth_request_validator import WriteRequestValidator +from indy_common.constants import CONFIG_LEDGER_ID, LEDGERS_FREEZE, LEDGERS_IDS + +from common.serializers.serialization import pool_state_serializer, config_state_serializer +from indy_common.state.config import MARKER_FROZEN_LEDGERS +from plenum.common.constants import CONFIG_LEDGER_ID, TXN_AUTHOR_AGREEMENT_AML, AML, AML_VERSION +from plenum.common.exceptions import InvalidClientRequest +from plenum.common.request import Request +from plenum.common.txn_util import get_payload_data, get_seq_no, get_txn_time +from plenum.server.database_manager import DatabaseManager +from plenum.server.request_handlers.handler_interfaces.write_request_handler import WriteRequestHandler +from plenum.server.request_handlers.static_taa_helper import StaticTAAHelper +from plenum.server.request_handlers.utils import encode_state_value + + +class LedgerFreezeHandler(WriteRequestHandler): + state_serializer = pool_state_serializer + + def __init__(self, database_manager: DatabaseManager, + write_req_validator: WriteRequestValidator): + super().__init__(database_manager, LEDGERS_FREEZE, CONFIG_LEDGER_ID) + self.write_req_validator = write_req_validator + + def static_validation(self, request: Request): + self._validate_request_type(request) + + def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + self._validate_request_type(request) + state_path = self.make_state_path_for_frozen_ledgers() + frozen_ledgers, _, _ = self.get_from_state(state_path) + + if frozen_ledgers is None: + self.write_req_validator.validate(request, + [AuthActionAdd(txn_type=LEDGERS_FREEZE, + field='*', + value='*')]) + else: + self.write_req_validator.validate(request, + [AuthActionEdit(txn_type=LEDGERS_FREEZE, + field='*', + old_value='*', + new_value='*')]) + + def update_state(self, txn, prev_result, request, is_committed=False): + self._validate_txn_type(txn) + seq_no = get_seq_no(txn) + txn_time = get_txn_time(txn) + ledgers_ids = get_payload_data(txn)[LEDGERS_IDS] + frozen_ledgers = self.make_frozen_ledgers_list(ledgers_ids) + self.state.set(self.make_state_path_for_frozen_ledgers(), encode_state_value(frozen_ledgers, seq_no, txn_time)) + return txn + + @staticmethod + def make_state_path_for_frozen_ledgers() -> bytes: + return "{MARKER}:FROZEN_LEDGERS" \ + .format(MARKER=MARKER_FROZEN_LEDGERS).encode() + + diff --git a/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py b/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py new file mode 100644 index 000000000..9485b2f9f --- /dev/null +++ b/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py @@ -0,0 +1,42 @@ +from common.serializers.serialization import domain_state_serializer +from indy_common.authorize.auth_constraints import ConstraintsSerializer +from indy_common.authorize.auth_request_validator import WriteRequestValidator +from indy_common.state import config +from indy_common.types import ClientGetAuthRuleOperation +from indy_node.server.request_handlers.config_req_handlers.auth_rule.abstract_auth_rule_handler import \ + AbstractAuthRuleHandler +from indy_node.server.request_handlers.config_req_handlers.auth_rule.static_auth_rule_helper import StaticAuthRuleHelper +from indy_node.server.request_handlers.config_req_handlers.ledger_freeze_handler import LedgerFreezeHandler +from plenum.common.txn_util import get_request_data +from plenum.server.request_handlers.handler_interfaces.read_request_handler import ReadRequestHandler + +from indy_common.authorize.auth_actions import EDIT_PREFIX, split_action_id +from indy_common.constants import CONFIG_LEDGER_ID, AUTH_ACTION, OLD_VALUE, \ + NEW_VALUE, AUTH_TYPE, FIELD, CONSTRAINT, GET_AUTH_RULE, GET_FROZEN_LEDGERS +from plenum.common.exceptions import InvalidClientRequest +from plenum.common.request import Request +from plenum.server.database_manager import DatabaseManager + + +class GetFrozenLedgersHandler(ReadRequestHandler): + + def __init__(self, database_manager: DatabaseManager): + super().__init__(database_manager, GET_FROZEN_LEDGERS, CONFIG_LEDGER_ID) + + def static_validation(self, request: Request): + self._validate_request_type(request) + + def get_result(self, request: Request): + self._validate_request_type(request) + state_path = LedgerFreezeHandler.make_state_path_for_frozen_ledgers() + try: + data, last_seq_no, last_update_time, proof = self.lookup(state_path, is_committed=True, with_proof=True) + except KeyError: + data, last_seq_no, last_update_time, proof = None, None, None, None + result = self.make_result(request=request, + data=data, + last_seq_no=last_seq_no, + update_time=last_update_time, + proof=proof) + return result + diff --git a/indy_node/test/auth_rule/test_catching_up_auth_rule_txn.py b/indy_node/test/auth_rule/test_catching_up_auth_rule_txn.py index 0b2e09f75..45da913c9 100644 --- a/indy_node/test/auth_rule/test_catching_up_auth_rule_txn.py +++ b/indy_node/test/auth_rule/test_catching_up_auth_rule_txn.py @@ -43,12 +43,16 @@ def test_catching_up_auth_rule_txn(looper, auth_type=action.txn_type, field=action.field, new_value=action.value, old_value=None, constraint=changed_constraint.as_dict) + sdk_add_new_nym(looper, + sdk_pool_handle, + sdk_wallet_trustee, + 'newSteward2') delayed_node.start_catchup() looper.run(eventually(lambda: assertExp(delayed_node.mode == Mode.participating))) sdk_add_new_nym(looper, sdk_pool_handle, sdk_wallet_steward, - 'newSteward2', + 'newSteward3', STEWARD_STRING, dest=new_steward_did, verkey=new_steward_verkey) ensure_all_nodes_have_same_data(looper, txnPoolNodeSet) From 6b75acce0423c4107f07971a40ddc16f6b1849a8 Mon Sep 17 00:00:00 2001 From: toktar Date: Wed, 20 Jan 2021 08:58:20 +0300 Subject: [PATCH 004/100] UP-34: Add an auth rule for ledger freeze Signed-off-by: toktar --- indy_common/authorize/auth_map.py | 6 ++ indy_common/constants.py | 2 +- indy_common/test/test_transactions.py | 5 +- indy_common/transactions.py | 2 +- indy_node/server/node.py | 5 +- .../ledger_freeze_handler.py | 31 ++++---- .../auth_framework/edit_frozen_ledgers.py | 71 +++++++++++++++++++ .../auth_framework/test_auth_rule_using.py | 2 + indy_node/test/freeze_ledgers/__init__.py | 0 indy_node/test/freeze_ledgers/helper.py | 28 ++++++++ 10 files changed, 131 insertions(+), 21 deletions(-) create mode 100644 indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py create mode 100644 indy_node/test/freeze_ledgers/__init__.py create mode 100644 indy_node/test/freeze_ledgers/helper.py diff --git a/indy_common/authorize/auth_map.py b/indy_common/authorize/auth_map.py index 985729633..222b61d3a 100644 --- a/indy_common/authorize/auth_map.py +++ b/indy_common/authorize/auth_map.py @@ -236,6 +236,11 @@ old_value='*', new_value='*') +edit_frozen_ledgers = AuthActionEdit(txn_type=REVOC_REG_ENTRY, + field='*', + old_value='*', + new_value='*') + # Anyone constraint anyone_constraint = AuthConstraint(role='*', sig_count=1) @@ -324,6 +329,7 @@ (add_revoc_reg_entry.get_action_id(), endorser_or_steward_or_trustee_owner_constraint), (edit_revoc_reg_def.get_action_id(), owner_constraint), (edit_revoc_reg_entry.get_action_id(), owner_constraint), + (edit_frozen_ledgers.get_action_id(), one_trustee_constraint), ]) # Edit Trustee: diff --git a/indy_common/constants.py b/indy_common/constants.py index 38d3a2aae..018e0e5f3 100644 --- a/indy_common/constants.py +++ b/indy_common/constants.py @@ -39,7 +39,7 @@ RULES = "rules" # LEDGERS_FREEZE -LEDGERS_IDS = "ledger_ids" +LEDGERS_IDS = "ledgers_ids" ROLE = 'role' NONCE = 'nonce' diff --git a/indy_common/test/test_transactions.py b/indy_common/test/test_transactions.py index f74055ee4..09570ac08 100644 --- a/indy_common/test/test_transactions.py +++ b/indy_common/test/test_transactions.py @@ -4,7 +4,7 @@ GET_REVOC_REG_DEF, GET_REVOC_REG, GET_REVOC_REG_DELTA, POOL_RESTART, VALIDATOR_INFO, CHANGE_KEY, AUTH_RULE, \ GET_AUTH_RULE, AUTH_RULES, RICH_SCHEMA, RICH_SCHEMA_ENCODING, \ RICH_SCHEMA_MAPPING, RICH_SCHEMA_CRED_DEF, JSON_LD_CONTEXT, GET_RICH_SCHEMA_OBJECT_BY_METADATA, \ - GET_RICH_SCHEMA_OBJECT_BY_ID, RICH_SCHEMA_PRES_DEF + GET_RICH_SCHEMA_OBJECT_BY_ID, RICH_SCHEMA_PRES_DEF, LEDGERS_FREEZE, GET_FROZEN_LEDGERS from indy_common.transactions import IndyTransactions @@ -39,6 +39,9 @@ def test_transactions_are_encoded(): assert GET_AUTH_RULE == "121" assert AUTH_RULES == "122" + assert LEDGERS_FREEZE == "123" + assert GET_FROZEN_LEDGERS == "124" + assert JSON_LD_CONTEXT == "200" assert RICH_SCHEMA == "201" assert RICH_SCHEMA_ENCODING == "202" diff --git a/indy_common/transactions.py b/indy_common/transactions.py index ca87542c4..0a9fb0b02 100644 --- a/indy_common/transactions.py +++ b/indy_common/transactions.py @@ -39,7 +39,7 @@ class IndyTransactions(Transactions): AUTH_RULES = "122" LEDGERS_FREEZE = "123" - GET_FROZEN_LEDGERS = "123" + GET_FROZEN_LEDGERS = "124" # Rich Schema JSON_LD_CONTEXT = "200" diff --git a/indy_node/server/node.py b/indy_node/server/node.py index a24aa1597..dd1d257a2 100644 --- a/indy_node/server/node.py +++ b/indy_node/server/node.py @@ -20,7 +20,7 @@ from indy_common.config_util import getConfig from indy_common.constants import TXN_TYPE, ATTRIB, DATA, ACTION, \ NODE_UPGRADE, COMPLETE, FAIL, POOL_UPGRADE, POOL_CONFIG, \ - IN_PROGRESS, AUTH_RULE, AUTH_RULES + IN_PROGRESS, AUTH_RULE, AUTH_RULES, LEDGERS_FREEZE from indy_common.types import Request, SafeRequest from indy_common.config_helper import NodeConfigHelper from indy_node.server.client_authn import LedgerBasedAuthNr @@ -238,7 +238,8 @@ def can_write_txn(self, txn_type): return self.poolCfg.isWritable() or txn_type in [POOL_UPGRADE, POOL_CONFIG, AUTH_RULE, - AUTH_RULES] + AUTH_RULES, + LEDGERS_FREEZE] def execute_domain_txns(self, three_pc_batch) -> List: """ diff --git a/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py b/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py index 844ace190..dbfa29067 100644 --- a/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py @@ -1,23 +1,26 @@ from typing import Optional -from indy_common.authorize.auth_actions import AuthActionAdd, AuthActionEdit +from indy_common.authorize.auth_actions import AuthActionEdit from indy_common.authorize.auth_request_validator import WriteRequestValidator from indy_common.constants import CONFIG_LEDGER_ID, LEDGERS_FREEZE, LEDGERS_IDS -from common.serializers.serialization import pool_state_serializer, config_state_serializer +from common.serializers.serialization import config_state_serializer from indy_common.state.config import MARKER_FROZEN_LEDGERS -from plenum.common.constants import CONFIG_LEDGER_ID, TXN_AUTHOR_AGREEMENT_AML, AML, AML_VERSION +from plenum.common.constants import CONFIG_LEDGER_ID from plenum.common.exceptions import InvalidClientRequest from plenum.common.request import Request from plenum.common.txn_util import get_payload_data, get_seq_no, get_txn_time from plenum.server.database_manager import DatabaseManager from plenum.server.request_handlers.handler_interfaces.write_request_handler import WriteRequestHandler -from plenum.server.request_handlers.static_taa_helper import StaticTAAHelper from plenum.server.request_handlers.utils import encode_state_value class LedgerFreezeHandler(WriteRequestHandler): - state_serializer = pool_state_serializer + state_serializer = config_state_serializer + + LEDGER = "ledger" + STATE = "state" + SEQ_NO = "seq_no" def __init__(self, database_manager: DatabaseManager, write_req_validator: WriteRequestValidator): @@ -29,20 +32,12 @@ def static_validation(self, request: Request): def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) - state_path = self.make_state_path_for_frozen_ledgers() - frozen_ledgers, _, _ = self.get_from_state(state_path) - - if frozen_ledgers is None: - self.write_req_validator.validate(request, - [AuthActionAdd(txn_type=LEDGERS_FREEZE, - field='*', - value='*')]) - else: - self.write_req_validator.validate(request, + self.write_req_validator.validate(request, [AuthActionEdit(txn_type=LEDGERS_FREEZE, field='*', old_value='*', new_value='*')]) + # TODO: add a check for existing ledgers_ids in audit def update_state(self, txn, prev_result, request, is_committed=False): self._validate_txn_type(txn) @@ -58,4 +53,8 @@ def make_state_path_for_frozen_ledgers() -> bytes: return "{MARKER}:FROZEN_LEDGERS" \ .format(MARKER=MARKER_FROZEN_LEDGERS).encode() - +# TODO: add getting root hashes from audit + def make_frozen_ledgers_list(self, ledgers_ids): + return {ledger_id: {LedgerFreezeHandler.LEDGER: 0, + LedgerFreezeHandler.STATE: 0, + LedgerFreezeHandler.SEQ_NO: 0} for ledger_id in ledgers_ids} diff --git a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py new file mode 100644 index 000000000..f98fc5b24 --- /dev/null +++ b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py @@ -0,0 +1,71 @@ +import pytest +from plenum.common.constants import STEWARD + +from indy_node.server.request_handlers.action_req_handlers.pool_restart_handler import PoolRestartHandler +from indy_node.test.freeze_ledgers.helper import sdk_send_freeze_ledgers + +from indy_common.authorize.auth_actions import EDIT_PREFIX +from indy_common.authorize.auth_constraints import AuthConstraint +from indy_common.constants import LEDGERS_FREEZE +from indy_node.test.auth_rule.auth_framework.basic import AuthTest +from plenum.common.exceptions import RequestRejectedException +from plenum.test.pool_transactions.helper import sdk_add_new_nym + +from indy_node.test.helper import build_auth_rule_request_json + + +class EditFrozenLedgersTest(AuthTest): + def __init__(self, env, action_id): + super().__init__(env, action_id) + + def prepare(self): + self.default_auth_rule = self.get_default_auth_rule() + self.changed_auth_rule = self.get_changed_auth_rule() + for n in self.env.txnPoolNodeSet: + for h in n.action_manager.request_handlers.values(): + if isinstance(h, PoolRestartHandler): + h.restarter.handleRestartRequest = lambda *args, **kwargs: True + + def run(self): + frozen_ledgers_ids = ["10001"] + + # Step 1. Check default auth rule + sdk_send_freeze_ledgers(self.looper, self.trustee_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + with pytest.raises(RequestRejectedException): + sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + + # Step 2. Change auth rule + self.send_and_check(self.changed_auth_rule, wallet=self.trustee_wallet) + + # Step 3. Check, that we cannot send txn the old way + sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + with pytest.raises(RequestRejectedException): + sdk_send_freeze_ledgers(self.looper, self.trustee_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + + # Step 4. Check, that we can send restart action in changed way + sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + + # Step 5. Return default auth rule + self.send_and_check(self.default_auth_rule, self.trustee_wallet) + + # Step 6. Check, that default auth rule works + sdk_send_freeze_ledgers(self.looper, self.trustee_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + with pytest.raises(RequestRejectedException): + sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + + def result(self): + pass + + def get_changed_auth_rule(self): + self.new_default_wallet = sdk_add_new_nym(self.looper, self.sdk_pool_handle, self.trustee_wallet, role=STEWARD) + constraint = AuthConstraint(role=STEWARD, + sig_count=1, + need_to_be_owner=False) + return build_auth_rule_request_json( + self.looper, self.trustee_wallet[1], + auth_action=EDIT_PREFIX, + auth_type=LEDGERS_FREEZE, + field='*', + new_value='*', + constraint=constraint.as_dict + ) diff --git a/indy_node/test/auth_rule/auth_framework/test_auth_rule_using.py b/indy_node/test/auth_rule/auth_framework/test_auth_rule_using.py index 2f7341461..8744fca1b 100644 --- a/indy_node/test/auth_rule/auth_framework/test_auth_rule_using.py +++ b/indy_node/test/auth_rule/auth_framework/test_auth_rule_using.py @@ -4,6 +4,7 @@ from collections import OrderedDict from indy_node.test.auth_rule.auth_framework.disable_taa import TAADisableTest +from indy_node.test.auth_rule.auth_framework.edit_frozen_ledgers import EditFrozenLedgersTest from plenum.common.constants import STEWARD, TRUSTEE, IDENTITY_OWNER from indy_common.constants import ( @@ -123,6 +124,7 @@ class TestAuthRuleUsing(): auth_map.change_client_port.get_action_id(): EditNodeClientPortTest, auth_map.change_bls_key.get_action_id(): EditNodeBlsTest, auth_map.disable_txn_author_agreement.get_action_id(): TAADisableTest, + auth_map.edit_frozen_ledgers.get_action_id(): EditFrozenLedgersTest, }) # TODO a workaround until sdk aceepts empty TAA to make possible its deactivation diff --git a/indy_node/test/freeze_ledgers/__init__.py b/indy_node/test/freeze_ledgers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/indy_node/test/freeze_ledgers/helper.py b/indy_node/test/freeze_ledgers/helper.py new file mode 100644 index 000000000..6dae58eac --- /dev/null +++ b/indy_node/test/freeze_ledgers/helper.py @@ -0,0 +1,28 @@ +from plenum.common.constants import TXN_TYPE, CURRENT_PROTOCOL_VERSION +from plenum.test.helper import sdk_sign_and_submit_req, sdk_get_and_check_replies, sdk_gen_request +from indy_common.constants import LEDGERS_FREEZE, GET_FROZEN_LEDGERS, LEDGERS_IDS + + +def build_freeze_ledgers_request(did, ledgers_ids: [str]): + op = {TXN_TYPE: LEDGERS_FREEZE, + LEDGERS_IDS: ledgers_ids} + sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, + identifier=did) + + +def build_get_frozen_ledgers_request(did): + op = {TXN_TYPE: GET_FROZEN_LEDGERS} + sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, + identifier=did) + + +def sdk_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallet, ledgers_ids: [str]): + req = looper.loop.run_until_complete(build_freeze_ledgers_request(sdk_wallet[1], ledgers_ids)) # json.dumps(params) + rep = sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet, req) + return sdk_get_and_check_replies(looper, [rep])[0] + + +def sdk_get_frozen_ledgers(looper, sdk_pool_handle, sdk_wallet): + req = looper.loop.run_until_complete(build_get_frozen_ledgers_request(sdk_wallet[1])) + rep = sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet, req) + return sdk_get_and_check_replies(looper, [rep])[0] From d733ba1f941ecdbb8257a40525e346b31e0d146b Mon Sep 17 00:00:00 2001 From: toktar Date: Sun, 24 Jan 2021 19:43:05 +0300 Subject: [PATCH 005/100] UP-34: add ledgers freeze to auth_map Signed-off-by: toktar --- indy_common/auth.py | 4 +- indy_common/authorize/auth_map.py | 5 ++- indy_node/server/node.py | 3 +- .../auth_framework/edit_frozen_ledgers.py | 18 +++++--- indy_node/test/freeze_ledgers/helper.py | 30 ++++++++----- .../test_send_get_frozen_ledgers.py | 42 +++++++++++++++++++ 6 files changed, 82 insertions(+), 20 deletions(-) create mode 100644 indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py diff --git a/indy_common/auth.py b/indy_common/auth.py index 176f0eaed..5eff4616c 100644 --- a/indy_common/auth.py +++ b/indy_common/auth.py @@ -4,7 +4,7 @@ from indy_common.constants import OWNER, POOL_UPGRADE, ENDORSER, NYM, \ POOL_CONFIG, SCHEMA, CLAIM_DEF, \ - POOL_RESTART, VALIDATOR_INFO, NETWORK_MONITOR + POOL_RESTART, VALIDATOR_INFO, NETWORK_MONITOR, LEDGERS_FREEZE from indy_common.roles import Roles logger = getlogger() @@ -62,6 +62,8 @@ def generate_auth_map(valid_roles): {TRUSTEE: []}, '{}___'.format(VALIDATOR_INFO): {TRUSTEE: [], STEWARD: []}, + '{}___'.format(LEDGERS_FREEZE): + {TRUSTEE: [], TRUSTEE: [], TRUSTEE: []}, } return auth_map diff --git a/indy_common/authorize/auth_map.py b/indy_common/authorize/auth_map.py index 222b61d3a..5e864f1d3 100644 --- a/indy_common/authorize/auth_map.py +++ b/indy_common/authorize/auth_map.py @@ -259,6 +259,9 @@ # One Trustee constraint one_trustee_constraint = AuthConstraint(TRUSTEE, 1) +# Three Trustee constraint +three_trustee_constraint = AuthConstraint(TRUSTEE, 3) + # Steward or Trustee constraint steward_or_trustee_constraint = AuthConstraintOr([AuthConstraint(STEWARD, 1), AuthConstraint(TRUSTEE, 1)]) @@ -329,7 +332,7 @@ (add_revoc_reg_entry.get_action_id(), endorser_or_steward_or_trustee_owner_constraint), (edit_revoc_reg_def.get_action_id(), owner_constraint), (edit_revoc_reg_entry.get_action_id(), owner_constraint), - (edit_frozen_ledgers.get_action_id(), one_trustee_constraint), + (edit_frozen_ledgers.get_action_id(), three_trustee_constraint), ]) # Edit Trustee: diff --git a/indy_node/server/node.py b/indy_node/server/node.py index dd1d257a2..043573560 100644 --- a/indy_node/server/node.py +++ b/indy_node/server/node.py @@ -238,8 +238,7 @@ def can_write_txn(self, txn_type): return self.poolCfg.isWritable() or txn_type in [POOL_UPGRADE, POOL_CONFIG, AUTH_RULE, - AUTH_RULES, - LEDGERS_FREEZE] + AUTH_RULES] def execute_domain_txns(self, three_pc_batch) -> List: """ diff --git a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py index f98fc5b24..bb8fdf931 100644 --- a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py +++ b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py @@ -1,5 +1,5 @@ import pytest -from plenum.common.constants import STEWARD +from plenum.common.constants import STEWARD, TRUSTEE_STRING from indy_node.server.request_handlers.action_req_handlers.pool_restart_handler import PoolRestartHandler from indy_node.test.freeze_ledgers.helper import sdk_send_freeze_ledgers @@ -11,14 +11,22 @@ from plenum.common.exceptions import RequestRejectedException from plenum.test.pool_transactions.helper import sdk_add_new_nym -from indy_node.test.helper import build_auth_rule_request_json +from indy_node.test.helper import build_auth_rule_request_json, sdk_send_and_check_req_json class EditFrozenLedgersTest(AuthTest): def __init__(self, env, action_id): super().__init__(env, action_id) + self.trustee_wallets = [self.trustee_wallet] def prepare(self): + for i in range(3): + wallet = sdk_add_new_nym(self.looper, + self.sdk_pool_handle, + self.trustee_wallet, + alias='trustee{}'.format(i), + role=TRUSTEE_STRING) + self.trustee_wallets.append(wallet) self.default_auth_rule = self.get_default_auth_rule() self.changed_auth_rule = self.get_changed_auth_rule() for n in self.env.txnPoolNodeSet: @@ -30,7 +38,7 @@ def run(self): frozen_ledgers_ids = ["10001"] # Step 1. Check default auth rule - sdk_send_freeze_ledgers(self.looper, self.trustee_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.trustee_wallets, self.sdk_pool_handle, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) @@ -40,7 +48,7 @@ def run(self): # Step 3. Check, that we cannot send txn the old way sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): - sdk_send_freeze_ledgers(self.looper, self.trustee_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.trustee_wallets, self.sdk_pool_handle, frozen_ledgers_ids) # Step 4. Check, that we can send restart action in changed way sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) @@ -49,7 +57,7 @@ def run(self): self.send_and_check(self.default_auth_rule, self.trustee_wallet) # Step 6. Check, that default auth rule works - sdk_send_freeze_ledgers(self.looper, self.trustee_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.trustee_wallets, self.sdk_pool_handle, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) diff --git a/indy_node/test/freeze_ledgers/helper.py b/indy_node/test/freeze_ledgers/helper.py index 6dae58eac..e9262d8a4 100644 --- a/indy_node/test/freeze_ledgers/helper.py +++ b/indy_node/test/freeze_ledgers/helper.py @@ -1,28 +1,36 @@ +import json + from plenum.common.constants import TXN_TYPE, CURRENT_PROTOCOL_VERSION -from plenum.test.helper import sdk_sign_and_submit_req, sdk_get_and_check_replies, sdk_gen_request +from plenum.test.helper import sdk_sign_and_submit_req, sdk_get_and_check_replies, sdk_gen_request, \ + sdk_sign_request_objects, sdk_send_signed_requests, sdk_sign_and_submit_req_obj from indy_common.constants import LEDGERS_FREEZE, GET_FROZEN_LEDGERS, LEDGERS_IDS def build_freeze_ledgers_request(did, ledgers_ids: [str]): - op = {TXN_TYPE: LEDGERS_FREEZE, + op = {TXN_TYPE: "123", LEDGERS_IDS: ledgers_ids} - sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, + return sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, identifier=did) def build_get_frozen_ledgers_request(did): - op = {TXN_TYPE: GET_FROZEN_LEDGERS} - sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, + op = {TXN_TYPE: "124"} + return sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, identifier=did) -def sdk_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallet, ledgers_ids: [str]): - req = looper.loop.run_until_complete(build_freeze_ledgers_request(sdk_wallet[1], ledgers_ids)) # json.dumps(params) - rep = sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet, req) - return sdk_get_and_check_replies(looper, [rep])[0] +def sdk_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallets, ledgers_ids: [str]): + # req = looper.loop.run_until_complete(build_freeze_ledgers_request(sdk_wallets[0][1], ledgers_ids)) # json.dumps(params) + # sdk_multi_sign_request_objects + req = build_freeze_ledgers_request(sdk_wallets[0][1], ledgers_ids) # json.dumps(params) + s_req = None + for sdk_wallet in sdk_wallets: + s_req = sdk_sign_request_objects(looper, sdk_wallet, [req])[0] + return sdk_send_signed_requests(sdk_pool_handle, [s_req])[0] def sdk_get_frozen_ledgers(looper, sdk_pool_handle, sdk_wallet): - req = looper.loop.run_until_complete(build_get_frozen_ledgers_request(sdk_wallet[1])) - rep = sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet, req) + # req = looper.loop.run_until_complete(build_get_frozen_ledgers_request(sdk_wallet[1])) + req = build_get_frozen_ledgers_request(sdk_wallet[1]) + rep = sdk_sign_and_submit_req_obj(looper, sdk_pool_handle, sdk_wallet, req) return sdk_get_and_check_replies(looper, [rep])[0] diff --git a/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py b/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py new file mode 100644 index 000000000..055c7d726 --- /dev/null +++ b/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py @@ -0,0 +1,42 @@ +import json + +import pytest +from plenum.common.constants import TXN_TYPE + +from plenum.test.helper import sdk_sign_and_submit_op, sdk_get_and_check_replies + +from indy_common.authorize.auth_constraints import AuthConstraintForbidden +from indy_common.config import SCHEMA_ATTRIBUTES_LIMIT +from indy_common.constants import SCHEMA_NAME, SCHEMA_VERSION, SCHEMA_ATTR_NAMES, DOMAIN_LEDGER_ID, LEDGERS_IDS, \ + LEDGERS_FREEZE, GET_FROZEN_LEDGERS +from indy_common.types import SchemaField +from indy_node.test.api.helper import validate_write_reply, sdk_write_schema_and_check +from indy_node.test.freeze_ledgers.helper import sdk_send_freeze_ledgers, sdk_get_frozen_ledgers +from plenum.common.exceptions import RequestRejectedException, RequestNackedException +from plenum.common.util import randomString +from plenum.config import NAME_FIELD_LIMIT + + +def test_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallet_trustee, + sdk_wallet_trustee_list): + op = {TXN_TYPE: "123", + LEDGERS_IDS: [DOMAIN_LEDGER_ID]} + req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) + sdk_get_and_check_replies(looper, [req]) + + op = {TXN_TYPE: "124"} + req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) + result = sdk_get_and_check_replies(looper, [req]) + # + # sdk_send_freeze_ledgers( + # looper, sdk_pool_handle, + # sdk_wallet_trustee_list, + # [DOMAIN_LEDGER_ID] + # ) + # + # + # + # result = sdk_get_frozen_ledgers(looper, sdk_pool_handle, + # sdk_wallet_trustee_list[0]) + + print(result) From 0cfe7e313a39aaf3bcccaa0f5e4582a13843b715 Mon Sep 17 00:00:00 2001 From: toktar Date: Mon, 25 Jan 2021 04:05:28 +0300 Subject: [PATCH 006/100] UP-34: get hash roots from audit for ledgers_freeze_handler Signed-off-by: toktar --- indy_common/authorize/auth_map.py | 4 +- indy_common/types.py | 2 +- indy_node/server/node_bootstrap.py | 7 +++ ...e_handler.py => ledgers_freeze_handler.py} | 35 +++++++++-- .../get_frozen_ledgers_handler.py | 4 +- indy_node/test/freeze_ledgers/helper.py | 12 ++-- .../test_send_get_frozen_ledgers.py | 62 ++++++++++++------- 7 files changed, 88 insertions(+), 38 deletions(-) rename indy_node/server/request_handlers/config_req_handlers/{ledger_freeze_handler.py => ledgers_freeze_handler.py} (58%) diff --git a/indy_common/authorize/auth_map.py b/indy_common/authorize/auth_map.py index 5e864f1d3..2b527ac16 100644 --- a/indy_common/authorize/auth_map.py +++ b/indy_common/authorize/auth_map.py @@ -7,7 +7,7 @@ from indy_common.constants import ENDORSER, POOL_CONFIG, VALIDATOR_INFO, POOL_UPGRADE, POOL_RESTART, NODE, \ CLAIM_DEF, SCHEMA, NYM, ROLE, AUTH_RULE, NETWORK_MONITOR, REVOC_REG_ENTRY, \ REVOC_REG_DEF, ATTRIB, AUTH_RULES, JSON_LD_CONTEXT, RICH_SCHEMA, RICH_SCHEMA_MAPPING, \ - RICH_SCHEMA_ENCODING, RICH_SCHEMA_CRED_DEF, RICH_SCHEMA_PRES_DEF + RICH_SCHEMA_ENCODING, RICH_SCHEMA_CRED_DEF, RICH_SCHEMA_PRES_DEF, LEDGERS_FREEZE from plenum.common.constants import TRUSTEE, STEWARD, VERKEY, TXN_AUTHOR_AGREEMENT, TXN_AUTHOR_AGREEMENT_AML, \ TXN_AUTHOR_AGREEMENT_DISABLE @@ -236,7 +236,7 @@ old_value='*', new_value='*') -edit_frozen_ledgers = AuthActionEdit(txn_type=REVOC_REG_ENTRY, +edit_frozen_ledgers = AuthActionEdit(txn_type=LEDGERS_FREEZE, field='*', old_value='*', new_value='*') diff --git a/indy_common/types.py b/indy_common/types.py index 90421e7ad..bb511f576 100644 --- a/indy_common/types.py +++ b/indy_common/types.py @@ -425,7 +425,7 @@ class ClientLedgersFreezeOperation(MessageValidator): class ClientGetFrozenLedgersOperation(MessageValidator): schema = ( - (TXN_TYPE, ConstantField(GET_FROZEN_LEDGERS)) + (TXN_TYPE, ConstantField(GET_FROZEN_LEDGERS)), ) diff --git a/indy_node/server/node_bootstrap.py b/indy_node/server/node_bootstrap.py index b4da59ac4..8ad29e795 100644 --- a/indy_node/server/node_bootstrap.py +++ b/indy_node/server/node_bootstrap.py @@ -12,6 +12,7 @@ from indy_node.server.request_handlers.config_req_handlers.auth_rule.auth_rule_handler import AuthRuleHandler from indy_node.server.request_handlers.config_req_handlers.auth_rule.auth_rule_handler_1_9_1 import AuthRuleHandler191 from indy_node.server.request_handlers.config_req_handlers.auth_rule.auth_rules_handler import AuthRulesHandler +from indy_node.server.request_handlers.config_req_handlers.ledgers_freeze_handler import LedgersFreezeHandler from indy_node.server.request_handlers.config_req_handlers.node_upgrade_handler import NodeUpgradeHandler from indy_node.server.request_handlers.config_req_handlers.pool_config_handler import PoolConfigHandler from indy_node.server.request_handlers.config_req_handlers.pool_upgrade_handler import PoolUpgradeHandler @@ -45,6 +46,7 @@ from indy_node.server.request_handlers.read_req_handlers.get_attribute_handler import GetAttributeHandler from indy_node.server.request_handlers.read_req_handlers.get_auth_rule_handler import GetAuthRuleHandler from indy_node.server.request_handlers.read_req_handlers.get_claim_def_handler import GetClaimDefHandler +from indy_node.server.request_handlers.read_req_handlers.get_frozen_ledgers_handler import GetFrozenLedgersHandler from indy_node.server.request_handlers.read_req_handlers.get_nym_handler import GetNymHandler from indy_node.server.request_handlers.read_req_handlers.get_revoc_reg_def_handler import GetRevocRegDefHandler from indy_node.server.request_handlers.read_req_handlers.get_revoc_reg_delta_handler import GetRevocRegDeltaHandler @@ -197,6 +199,9 @@ def _register_config_req_handlers(self): get_taa_aml_handler = GetTxnAuthorAgreementAmlHandler(database_manager=self.node.db_manager) get_taa_handler = GetTxnAuthorAgreementHandler(database_manager=self.node.db_manager) node_upgrade_handler = NodeUpgradeHandler(database_manager=self.node.db_manager) + ledgers_freeze_handler = LedgersFreezeHandler(database_manager=self.node.db_manager, + write_req_validator=self.node.write_req_validator) + get_frozen_ledgers_handler = GetFrozenLedgersHandler(database_manager=self.node.db_manager) # Register write handlers self.node.write_manager.register_req_handler(auth_rule_handler) self.node.write_manager.register_req_handler(auth_rules_handler) @@ -206,10 +211,12 @@ def _register_config_req_handlers(self): self.node.write_manager.register_req_handler(taa_handler) self.node.write_manager.register_req_handler(taa_disable_handler) self.node.write_manager.register_req_handler(node_upgrade_handler) + self.node.write_manager.register_req_handler(ledgers_freeze_handler) # Register read handlers self.node.read_manager.register_req_handler(get_auth_rule_handler) self.node.read_manager.register_req_handler(get_taa_aml_handler) self.node.read_manager.register_req_handler(get_taa_handler) + self.node.read_manager.register_req_handler(get_frozen_ledgers_handler) # Register write handlers for a version self.node.write_manager.register_req_handler_with_version(auth_rule_handler_1_9_1, version="1.9.1") diff --git a/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py similarity index 58% rename from indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py rename to indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py index dbfa29067..b994a9472 100644 --- a/indy_node/server/request_handlers/config_req_handlers/ledger_freeze_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py @@ -6,7 +6,8 @@ from common.serializers.serialization import config_state_serializer from indy_common.state.config import MARKER_FROZEN_LEDGERS -from plenum.common.constants import CONFIG_LEDGER_ID +from plenum.common.constants import CONFIG_LEDGER_ID, AUDIT_LEDGER_ID, AUDIT_TXN_NODE_REG, AUDIT_TXN_LEDGER_ROOT, \ + AUDIT_TXN_STATE_ROOT, AUDIT_TXN_LEDGERS_SIZE from plenum.common.exceptions import InvalidClientRequest from plenum.common.request import Request from plenum.common.txn_util import get_payload_data, get_seq_no, get_txn_time @@ -15,7 +16,7 @@ from plenum.server.request_handlers.utils import encode_state_value -class LedgerFreezeHandler(WriteRequestHandler): +class LedgersFreezeHandler(WriteRequestHandler): state_serializer = config_state_serializer LEDGER = "ledger" @@ -29,6 +30,7 @@ def __init__(self, database_manager: DatabaseManager, def static_validation(self, request: Request): self._validate_request_type(request) + # TODO: add a check that ledgers_ids doesn't contains base ledgers def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) @@ -55,6 +57,29 @@ def make_state_path_for_frozen_ledgers() -> bytes: # TODO: add getting root hashes from audit def make_frozen_ledgers_list(self, ledgers_ids): - return {ledger_id: {LedgerFreezeHandler.LEDGER: 0, - LedgerFreezeHandler.STATE: 0, - LedgerFreezeHandler.SEQ_NO: 0} for ledger_id in ledgers_ids} + ledger_root, state_root, seq_no = self.__load_hash_roots_from_audit_ledger() + return {ledger_id: {LedgersFreezeHandler.LEDGER: ledger_root, + LedgersFreezeHandler.STATE: state_root, + LedgersFreezeHandler.SEQ_NO: seq_no} for ledger_id in ledgers_ids} + + def __load_hash_roots_from_audit_ledger(self): + audit_ledger = self.database_manager.get_ledger(AUDIT_LEDGER_ID) + if not audit_ledger: + return None, None, None + + last_txn = audit_ledger.get_last_committed_txn() + last_txn_ledger_root = get_payload_data(last_txn).get(AUDIT_TXN_LEDGER_ROOT, None) + last_txn_state_root = get_payload_data(last_txn).get(AUDIT_TXN_STATE_ROOT, None) + last_txn_seq_no = get_payload_data(last_txn).get(AUDIT_TXN_LEDGERS_SIZE, None) + + if isinstance(last_txn_ledger_root, int): + seq_no = get_seq_no(last_txn) - last_txn_ledger_root + audit_txn_for_seq_no = audit_ledger.getBySeqNo(seq_no) + last_txn_ledger_root = get_payload_data(audit_txn_for_seq_no).get(AUDIT_TXN_LEDGER_ROOT) + + if isinstance(last_txn_state_root, int): + seq_no = get_seq_no(last_txn) - last_txn_ledger_root + audit_txn_for_seq_no = audit_ledger.getBySeqNo(seq_no) + last_txn_state_root = get_payload_data(audit_txn_for_seq_no).get(AUDIT_TXN_STATE_ROOT) + + return last_txn_ledger_root, last_txn_state_root, last_txn_seq_no diff --git a/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py b/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py index 9485b2f9f..3291986e0 100644 --- a/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py +++ b/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py @@ -6,7 +6,7 @@ from indy_node.server.request_handlers.config_req_handlers.auth_rule.abstract_auth_rule_handler import \ AbstractAuthRuleHandler from indy_node.server.request_handlers.config_req_handlers.auth_rule.static_auth_rule_helper import StaticAuthRuleHelper -from indy_node.server.request_handlers.config_req_handlers.ledger_freeze_handler import LedgerFreezeHandler +from indy_node.server.request_handlers.config_req_handlers.ledgers_freeze_handler import LedgersFreezeHandler from plenum.common.txn_util import get_request_data from plenum.server.request_handlers.handler_interfaces.read_request_handler import ReadRequestHandler @@ -28,7 +28,7 @@ def static_validation(self, request: Request): def get_result(self, request: Request): self._validate_request_type(request) - state_path = LedgerFreezeHandler.make_state_path_for_frozen_ledgers() + state_path = LedgersFreezeHandler.make_state_path_for_frozen_ledgers() try: data, last_seq_no, last_update_time, proof = self.lookup(state_path, is_committed=True, with_proof=True) except KeyError: diff --git a/indy_node/test/freeze_ledgers/helper.py b/indy_node/test/freeze_ledgers/helper.py index e9262d8a4..2db4c7b0d 100644 --- a/indy_node/test/freeze_ledgers/helper.py +++ b/indy_node/test/freeze_ledgers/helper.py @@ -2,19 +2,19 @@ from plenum.common.constants import TXN_TYPE, CURRENT_PROTOCOL_VERSION from plenum.test.helper import sdk_sign_and_submit_req, sdk_get_and_check_replies, sdk_gen_request, \ - sdk_sign_request_objects, sdk_send_signed_requests, sdk_sign_and_submit_req_obj + sdk_sign_request_objects, sdk_send_signed_requests, sdk_sign_and_submit_req_obj, sdk_multi_sign_request_objects from indy_common.constants import LEDGERS_FREEZE, GET_FROZEN_LEDGERS, LEDGERS_IDS def build_freeze_ledgers_request(did, ledgers_ids: [str]): - op = {TXN_TYPE: "123", + op = {TXN_TYPE: LEDGERS_FREEZE, LEDGERS_IDS: ledgers_ids} return sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, identifier=did) def build_get_frozen_ledgers_request(did): - op = {TXN_TYPE: "124"} + op = {TXN_TYPE: GET_FROZEN_LEDGERS} return sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, identifier=did) @@ -23,10 +23,8 @@ def sdk_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallets, ledgers_ids: [ # req = looper.loop.run_until_complete(build_freeze_ledgers_request(sdk_wallets[0][1], ledgers_ids)) # json.dumps(params) # sdk_multi_sign_request_objects req = build_freeze_ledgers_request(sdk_wallets[0][1], ledgers_ids) # json.dumps(params) - s_req = None - for sdk_wallet in sdk_wallets: - s_req = sdk_sign_request_objects(looper, sdk_wallet, [req])[0] - return sdk_send_signed_requests(sdk_pool_handle, [s_req])[0] + signed_reqs = sdk_multi_sign_request_objects(looper, sdk_wallets, [req]) + return sdk_send_signed_requests(sdk_pool_handle, signed_reqs)[0] def sdk_get_frozen_ledgers(looper, sdk_pool_handle, sdk_wallet): diff --git a/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py b/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py index 055c7d726..0393176f5 100644 --- a/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py +++ b/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py @@ -1,9 +1,10 @@ import json import pytest -from plenum.common.constants import TXN_TYPE +from plenum.common.constants import TXN_TYPE, DATA +from plenum.test.freshness.helper import check_freshness_updated_for_ledger -from plenum.test.helper import sdk_sign_and_submit_op, sdk_get_and_check_replies +from plenum.test.helper import sdk_sign_and_submit_op, sdk_get_and_check_replies, freshness from indy_common.authorize.auth_constraints import AuthConstraintForbidden from indy_common.config import SCHEMA_ATTRIBUTES_LIMIT @@ -15,28 +16,47 @@ from plenum.common.exceptions import RequestRejectedException, RequestNackedException from plenum.common.util import randomString from plenum.config import NAME_FIELD_LIMIT +from stp_core.loop.eventually import eventually +FRESHNESS_TIMEOUT = 5 -def test_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallet_trustee, + +@pytest.fixture(scope="module") +def tconf(tconf): + with freshness(tconf, enabled=True, timeout=FRESHNESS_TIMEOUT): + yield tconf + + + +def test_send_freeze_ledgers(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_trustee, sdk_wallet_trustee_list): - op = {TXN_TYPE: "123", - LEDGERS_IDS: [DOMAIN_LEDGER_ID]} - req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) - sdk_get_and_check_replies(looper, [req]) - - op = {TXN_TYPE: "124"} - req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) - result = sdk_get_and_check_replies(looper, [req]) - # - # sdk_send_freeze_ledgers( - # looper, sdk_pool_handle, - # sdk_wallet_trustee_list, - # [DOMAIN_LEDGER_ID] - # ) - # - # + ledger_to_remove = DOMAIN_LEDGER_ID + + looper.run(eventually( + check_freshness_updated_for_ledger, txnPoolNodeSet, ledger_to_remove, + timeout=3 * FRESHNESS_TIMEOUT) + ) + # op = {TXN_TYPE: "123", + # LEDGERS_IDS: [DOMAIN_LEDGER_ID]} + # req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) + # sdk_get_and_check_replies(looper, [req]) # - # result = sdk_get_frozen_ledgers(looper, sdk_pool_handle, - # sdk_wallet_trustee_list[0]) + # op = {TXN_TYPE: "124"} + # req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) + # result = sdk_get_and_check_replies(looper, [req]) + sdk_send_freeze_ledgers( + looper, sdk_pool_handle, + sdk_wallet_trustee_list, + [ledger_to_remove] + ) + + + + result = sdk_get_frozen_ledgers(looper, sdk_pool_handle, + sdk_wallet_trustee)[1]["result"][DATA] print(result) + + assert result[ledger_to_remove]["state"] + assert result[ledger_to_remove]["ledger"] + assert result[ledger_to_remove]["ledger"] >= 0 From 7fb6b8b74fb883162ccc6bd65d57ab4eaaae6b67 Mon Sep 17 00:00:00 2001 From: toktar Date: Tue, 26 Jan 2021 15:25:19 +0300 Subject: [PATCH 007/100] UP-34: move freeze ledgers transactions from indy-node to indy-plenum Signed-off-by: toktar --- indy_common/constants.py | 6 - indy_common/state/config.py | 1 - indy_common/test/test_transactions.py | 3 - .../types/test_get_frozen_ledgers_schema.py | 19 --- .../test/types/test_ledgers_freeze_schema.py | 20 --- indy_common/transactions.py | 3 - indy_common/types.py | 20 +-- indy_node/server/node_bootstrap.py | 2 +- .../ledgers_freeze_handler.py | 71 +-------- .../get_frozen_ledgers_handler.py | 42 ------ .../test_send_ledgers_freeze.py | 136 ++++++++++++++++++ 11 files changed, 144 insertions(+), 179 deletions(-) delete mode 100644 indy_common/test/types/test_get_frozen_ledgers_schema.py delete mode 100644 indy_common/test/types/test_ledgers_freeze_schema.py delete mode 100644 indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py create mode 100644 indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py diff --git a/indy_common/constants.py b/indy_common/constants.py index 018e0e5f3..3d4e6d425 100644 --- a/indy_common/constants.py +++ b/indy_common/constants.py @@ -38,9 +38,6 @@ FIELD = "field" RULES = "rules" -# LEDGERS_FREEZE -LEDGERS_IDS = "ledgers_ids" - ROLE = 'role' NONCE = 'nonce' ATTRIBUTES = "attributes" @@ -175,9 +172,6 @@ AUTH_RULES = IndyTransactions.AUTH_RULES.value GET_AUTH_RULE = IndyTransactions.GET_AUTH_RULE.value -LEDGERS_FREEZE = IndyTransactions.LEDGERS_FREEZE.value -GET_FROZEN_LEDGERS = IndyTransactions.GET_FROZEN_LEDGERS.value - # client Rich Schema transaction types JSON_LD_CONTEXT = IndyTransactions.JSON_LD_CONTEXT.value RICH_SCHEMA = IndyTransactions.RICH_SCHEMA.value diff --git a/indy_common/state/config.py b/indy_common/state/config.py index 008be3f19..3f111a216 100644 --- a/indy_common/state/config.py +++ b/indy_common/state/config.py @@ -1,5 +1,4 @@ MARKER_AUTH_RULE = "1" -MARKER_FROZEN_LEDGERS = "2" def make_state_path_for_auth_rule(action_id) -> bytes: diff --git a/indy_common/test/test_transactions.py b/indy_common/test/test_transactions.py index 09570ac08..9d5fec06d 100644 --- a/indy_common/test/test_transactions.py +++ b/indy_common/test/test_transactions.py @@ -39,9 +39,6 @@ def test_transactions_are_encoded(): assert GET_AUTH_RULE == "121" assert AUTH_RULES == "122" - assert LEDGERS_FREEZE == "123" - assert GET_FROZEN_LEDGERS == "124" - assert JSON_LD_CONTEXT == "200" assert RICH_SCHEMA == "201" assert RICH_SCHEMA_ENCODING == "202" diff --git a/indy_common/test/types/test_get_frozen_ledgers_schema.py b/indy_common/test/types/test_get_frozen_ledgers_schema.py deleted file mode 100644 index f4aeae9eb..000000000 --- a/indy_common/test/types/test_get_frozen_ledgers_schema.py +++ /dev/null @@ -1,19 +0,0 @@ -from collections import OrderedDict - -from indy_common.types import ClientGetFrozenLedgersOperation -from plenum.common.messages.fields import ConstantField - -EXPECTED_ORDERED_FIELDS = OrderedDict([ - ("type", ConstantField) -]) - - -def test_has_expected_fields(): - actual_field_names = OrderedDict(ClientGetFrozenLedgersOperation.schema).keys() - assert actual_field_names == EXPECTED_ORDERED_FIELDS.keys() - - -def test_has_expected_validators(): - schema = dict(ClientGetFrozenLedgersOperation.schema) - for field, validator in EXPECTED_ORDERED_FIELDS.items(): - assert isinstance(schema[field], validator) diff --git a/indy_common/test/types/test_ledgers_freeze_schema.py b/indy_common/test/types/test_ledgers_freeze_schema.py deleted file mode 100644 index 97431445a..000000000 --- a/indy_common/test/types/test_ledgers_freeze_schema.py +++ /dev/null @@ -1,20 +0,0 @@ -from collections import OrderedDict - -from indy_common.types import ClientLedgersFreezeOperation -from plenum.common.messages.fields import ConstantField, IterableField - -EXPECTED_ORDERED_FIELDS = OrderedDict([ - ("type", ConstantField), - ("ledgers_ids", IterableField) -]) - - -def test_has_expected_fields(): - actual_field_names = OrderedDict(ClientLedgersFreezeOperation.schema).keys() - assert actual_field_names == EXPECTED_ORDERED_FIELDS.keys() - - -def test_has_expected_validators(): - schema = dict(ClientLedgersFreezeOperation.schema) - for field, validator in EXPECTED_ORDERED_FIELDS.items(): - assert isinstance(schema[field], validator) diff --git a/indy_common/transactions.py b/indy_common/transactions.py index 0a9fb0b02..b1d966d76 100644 --- a/indy_common/transactions.py +++ b/indy_common/transactions.py @@ -38,9 +38,6 @@ class IndyTransactions(Transactions): GET_AUTH_RULE = "121" AUTH_RULES = "122" - LEDGERS_FREEZE = "123" - GET_FROZEN_LEDGERS = "124" - # Rich Schema JSON_LD_CONTEXT = "200" RICH_SCHEMA = "201" diff --git a/indy_common/types.py b/indy_common/types.py index bb511f576..b896fae67 100644 --- a/indy_common/types.py +++ b/indy_common/types.py @@ -44,7 +44,7 @@ RS_NAME, RS_ID, RS_CONTENT, RS_CONTEXT_TYPE_VALUE, RICH_SCHEMA, RS_SCHEMA_TYPE_VALUE, RS_ENCODING_TYPE_VALUE, \ RICH_SCHEMA_ENCODING, RS_MAPPING_TYPE_VALUE, RICH_SCHEMA_MAPPING, RS_CRED_DEF_TYPE_VALUE, \ RICH_SCHEMA_CRED_DEF, GET_RICH_SCHEMA_OBJECT_BY_ID, GET_RICH_SCHEMA_OBJECT_BY_METADATA, \ - RICH_SCHEMA_PRES_DEF, RS_PRES_DEF_TYPE_VALUE, GET_FROZEN_LEDGERS, LEDGERS_FREEZE, LEDGERS_IDS + RICH_SCHEMA_PRES_DEF, RS_PRES_DEF_TYPE_VALUE from indy_common.version import SchemaVersion @@ -415,20 +415,6 @@ class ClientGetAuthRuleOperation(MessageValidator): ) -class ClientLedgersFreezeOperation(MessageValidator): - schema = ( - (TXN_TYPE, ConstantField(LEDGERS_FREEZE)), - # Not LedgerIdField because the ledger may be already removed - (LEDGERS_IDS, IterableField(inner_field_type=IntegerField())) - ) - - -class ClientGetFrozenLedgersOperation(MessageValidator): - schema = ( - (TXN_TYPE, ConstantField(GET_FROZEN_LEDGERS)), - ) - - def rich_schema_objects_schema(txn_type, rs_type): return ( (TXN_TYPE, ConstantField(txn_type)), @@ -510,9 +496,7 @@ class ClientOperationField(PClientOperationField): RICH_SCHEMA_CRED_DEF: ClientRichSchemaCredDefOperation(), RICH_SCHEMA_PRES_DEF: ClientRichSchemaPresDefOperation(), GET_RICH_SCHEMA_OBJECT_BY_ID: ClientGetRichSchemaObjectByIdOperation(), - GET_RICH_SCHEMA_OBJECT_BY_METADATA: ClientGetRichSchemaObjectByMetadataOperation(), - LEDGERS_FREEZE: ClientLedgersFreezeOperation(), - GET_FROZEN_LEDGERS: ClientGetFrozenLedgersOperation() + GET_RICH_SCHEMA_OBJECT_BY_METADATA: ClientGetRichSchemaObjectByMetadataOperation() } # TODO: it is a workaround because INDY-338, `operations` must be a class diff --git a/indy_node/server/node_bootstrap.py b/indy_node/server/node_bootstrap.py index 8ad29e795..a907296ce 100644 --- a/indy_node/server/node_bootstrap.py +++ b/indy_node/server/node_bootstrap.py @@ -46,7 +46,7 @@ from indy_node.server.request_handlers.read_req_handlers.get_attribute_handler import GetAttributeHandler from indy_node.server.request_handlers.read_req_handlers.get_auth_rule_handler import GetAuthRuleHandler from indy_node.server.request_handlers.read_req_handlers.get_claim_def_handler import GetClaimDefHandler -from indy_node.server.request_handlers.read_req_handlers.get_frozen_ledgers_handler import GetFrozenLedgersHandler +from plenum.server.request_handlers.get_frozen_ledgers_handler import GetFrozenLedgersHandler from indy_node.server.request_handlers.read_req_handlers.get_nym_handler import GetNymHandler from indy_node.server.request_handlers.read_req_handlers.get_revoc_reg_def_handler import GetRevocRegDefHandler from indy_node.server.request_handlers.read_req_handlers.get_revoc_reg_delta_handler import GetRevocRegDeltaHandler diff --git a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py index b994a9472..2b60f1939 100644 --- a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py @@ -2,84 +2,23 @@ from indy_common.authorize.auth_actions import AuthActionEdit from indy_common.authorize.auth_request_validator import WriteRequestValidator -from indy_common.constants import CONFIG_LEDGER_ID, LEDGERS_FREEZE, LEDGERS_IDS - -from common.serializers.serialization import config_state_serializer -from indy_common.state.config import MARKER_FROZEN_LEDGERS -from plenum.common.constants import CONFIG_LEDGER_ID, AUDIT_LEDGER_ID, AUDIT_TXN_NODE_REG, AUDIT_TXN_LEDGER_ROOT, \ - AUDIT_TXN_STATE_ROOT, AUDIT_TXN_LEDGERS_SIZE -from plenum.common.exceptions import InvalidClientRequest +from plenum.common.constants import LEDGERS_FREEZE from plenum.common.request import Request -from plenum.common.txn_util import get_payload_data, get_seq_no, get_txn_time from plenum.server.database_manager import DatabaseManager -from plenum.server.request_handlers.handler_interfaces.write_request_handler import WriteRequestHandler -from plenum.server.request_handlers.utils import encode_state_value - +from plenum.server.request_handlers.ledgers_freeze_handler import LedgersFreezeHandler as PLedgersFreezeHandler -class LedgersFreezeHandler(WriteRequestHandler): - state_serializer = config_state_serializer - LEDGER = "ledger" - STATE = "state" - SEQ_NO = "seq_no" +class LedgersFreezeHandler(PLedgersFreezeHandler): def __init__(self, database_manager: DatabaseManager, write_req_validator: WriteRequestValidator): - super().__init__(database_manager, LEDGERS_FREEZE, CONFIG_LEDGER_ID) + super().__init__(database_manager) self.write_req_validator = write_req_validator - def static_validation(self, request: Request): - self._validate_request_type(request) - # TODO: add a check that ledgers_ids doesn't contains base ledgers - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): - self._validate_request_type(request) + super().dynamic_validation(request, req_pp_time) self.write_req_validator.validate(request, [AuthActionEdit(txn_type=LEDGERS_FREEZE, field='*', old_value='*', new_value='*')]) - # TODO: add a check for existing ledgers_ids in audit - - def update_state(self, txn, prev_result, request, is_committed=False): - self._validate_txn_type(txn) - seq_no = get_seq_no(txn) - txn_time = get_txn_time(txn) - ledgers_ids = get_payload_data(txn)[LEDGERS_IDS] - frozen_ledgers = self.make_frozen_ledgers_list(ledgers_ids) - self.state.set(self.make_state_path_for_frozen_ledgers(), encode_state_value(frozen_ledgers, seq_no, txn_time)) - return txn - - @staticmethod - def make_state_path_for_frozen_ledgers() -> bytes: - return "{MARKER}:FROZEN_LEDGERS" \ - .format(MARKER=MARKER_FROZEN_LEDGERS).encode() - -# TODO: add getting root hashes from audit - def make_frozen_ledgers_list(self, ledgers_ids): - ledger_root, state_root, seq_no = self.__load_hash_roots_from_audit_ledger() - return {ledger_id: {LedgersFreezeHandler.LEDGER: ledger_root, - LedgersFreezeHandler.STATE: state_root, - LedgersFreezeHandler.SEQ_NO: seq_no} for ledger_id in ledgers_ids} - - def __load_hash_roots_from_audit_ledger(self): - audit_ledger = self.database_manager.get_ledger(AUDIT_LEDGER_ID) - if not audit_ledger: - return None, None, None - - last_txn = audit_ledger.get_last_committed_txn() - last_txn_ledger_root = get_payload_data(last_txn).get(AUDIT_TXN_LEDGER_ROOT, None) - last_txn_state_root = get_payload_data(last_txn).get(AUDIT_TXN_STATE_ROOT, None) - last_txn_seq_no = get_payload_data(last_txn).get(AUDIT_TXN_LEDGERS_SIZE, None) - - if isinstance(last_txn_ledger_root, int): - seq_no = get_seq_no(last_txn) - last_txn_ledger_root - audit_txn_for_seq_no = audit_ledger.getBySeqNo(seq_no) - last_txn_ledger_root = get_payload_data(audit_txn_for_seq_no).get(AUDIT_TXN_LEDGER_ROOT) - - if isinstance(last_txn_state_root, int): - seq_no = get_seq_no(last_txn) - last_txn_ledger_root - audit_txn_for_seq_no = audit_ledger.getBySeqNo(seq_no) - last_txn_state_root = get_payload_data(audit_txn_for_seq_no).get(AUDIT_TXN_STATE_ROOT) - - return last_txn_ledger_root, last_txn_state_root, last_txn_seq_no diff --git a/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py b/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py deleted file mode 100644 index 3291986e0..000000000 --- a/indy_node/server/request_handlers/read_req_handlers/get_frozen_ledgers_handler.py +++ /dev/null @@ -1,42 +0,0 @@ -from common.serializers.serialization import domain_state_serializer -from indy_common.authorize.auth_constraints import ConstraintsSerializer -from indy_common.authorize.auth_request_validator import WriteRequestValidator -from indy_common.state import config -from indy_common.types import ClientGetAuthRuleOperation -from indy_node.server.request_handlers.config_req_handlers.auth_rule.abstract_auth_rule_handler import \ - AbstractAuthRuleHandler -from indy_node.server.request_handlers.config_req_handlers.auth_rule.static_auth_rule_helper import StaticAuthRuleHelper -from indy_node.server.request_handlers.config_req_handlers.ledgers_freeze_handler import LedgersFreezeHandler -from plenum.common.txn_util import get_request_data -from plenum.server.request_handlers.handler_interfaces.read_request_handler import ReadRequestHandler - -from indy_common.authorize.auth_actions import EDIT_PREFIX, split_action_id -from indy_common.constants import CONFIG_LEDGER_ID, AUTH_ACTION, OLD_VALUE, \ - NEW_VALUE, AUTH_TYPE, FIELD, CONSTRAINT, GET_AUTH_RULE, GET_FROZEN_LEDGERS -from plenum.common.exceptions import InvalidClientRequest -from plenum.common.request import Request -from plenum.server.database_manager import DatabaseManager - - -class GetFrozenLedgersHandler(ReadRequestHandler): - - def __init__(self, database_manager: DatabaseManager): - super().__init__(database_manager, GET_FROZEN_LEDGERS, CONFIG_LEDGER_ID) - - def static_validation(self, request: Request): - self._validate_request_type(request) - - def get_result(self, request: Request): - self._validate_request_type(request) - state_path = LedgersFreezeHandler.make_state_path_for_frozen_ledgers() - try: - data, last_seq_no, last_update_time, proof = self.lookup(state_path, is_committed=True, with_proof=True) - except KeyError: - data, last_seq_no, last_update_time, proof = None, None, None, None - result = self.make_result(request=request, - data=data, - last_seq_no=last_seq_no, - update_time=last_update_time, - proof=proof) - return result - diff --git a/indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py b/indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py new file mode 100644 index 000000000..f4f47c85b --- /dev/null +++ b/indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py @@ -0,0 +1,136 @@ +import json + +import pytest +from indy.ledger import build_get_schema_request +from plenum.common.exceptions import RequestNackedException + +from plenum.common.constants import DATA, NAME, VERSION, TXN_METADATA, TXN_METADATA_SEQ_NO + +from plenum.common.types import OPERATION + +from plenum.test.helper import sdk_sign_and_submit_req, sdk_get_and_check_replies + +from indy_node.test.api.helper import sdk_write_schema +from indy_node.test.helper import createUuidIdentifier, modify_field + + +@pytest.fixture(scope="module") +def send_schema(looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee): + schema_json, _ = sdk_write_schema(looper, sdk_pool_handle, sdk_wallet_trustee) + return json.loads(schema_json)['id'] + + +@pytest.fixture(scope="module") +def send_schema_seq_no(looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee): + _, reply = sdk_write_schema(looper, sdk_pool_handle, sdk_wallet_trustee) + return reply['result'][TXN_METADATA][TXN_METADATA_SEQ_NO] + + +@pytest.fixture(scope="module") +def send_schema_req(looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee): + schema_json, reply = sdk_write_schema( + looper, sdk_pool_handle, + sdk_wallet_trustee, + ["attrib1", "attrib2"], + "some_name_ajf", + "1.0") + return schema_json, reply + + +def test_send_get_schema_succeeds( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + assert rep[0][1]['result']['seqNo'] + + +def test_send_get_schema_as_client( + looper, sdk_pool_handle, nodeSet, sdk_wallet_client, send_schema): + _, did = sdk_wallet_client + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_client, request)]) + assert rep[0][1]['result']['seqNo'] + + +def test_send_get_schema_fails_with_invalid_name( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + request = modify_field(request, 'name111', OPERATION, DATA, NAME) + rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + assert rep[0][1]['result']['seqNo'] is None + + +def test_send_get_schema_fails_with_invalid_dest( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + uuid_identifier = createUuidIdentifier() + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + request = modify_field(request, uuid_identifier, OPERATION, 'dest') + rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + assert rep[0][1]['result']['seqNo'] is None + + +def test_send_get_schema_fails_with_invalid_version( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + request = modify_field(request, '2.0', OPERATION, DATA, VERSION) + rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + assert rep[0][1]['result']['seqNo'] is None + + +def test_send_get_schema_fails_with_invalid_version_syntax( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + request = modify_field(request, 'asd', OPERATION, DATA, VERSION) + with pytest.raises(RequestNackedException) as e: + sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + e.match("Invalid version: 'asd'") + + +def test_send_get_schema_fails_without_version( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + request = json.loads(request) + del request[OPERATION][DATA][VERSION] + request = json.dumps(request) + with pytest.raises(RequestNackedException) as e: + sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + e.match('missed fields - version') + + +def test_send_get_schema_fails_without_name( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + request = json.loads(request) + del request[OPERATION][DATA][NAME] + request = json.dumps(request) + with pytest.raises(RequestNackedException) as e: + sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + e.match('missed fields - name') + + +def test_send_get_schema_fails_without_dest( + looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): + _, did = sdk_wallet_trustee + + request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) + request = json.loads(request) + del request[OPERATION]['dest'] + request = json.dumps(request) + with pytest.raises(RequestNackedException) as e: + sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) + e.match('missed fields - dest') From b50d696c789b40f8713ed15b946afc32f102678c Mon Sep 17 00:00:00 2001 From: toktar Date: Wed, 27 Jan 2021 01:58:40 +0300 Subject: [PATCH 008/100] UP-34: change `dynamic_validation` in WriteRequestHandler Signed-off-by: toktar --- .../auth_rule/auth_rule_handler.py | 2 +- .../auth_rule/auth_rules_handler.py | 2 +- .../config_req_handlers/ledgers_freeze_handler.py | 14 ++++++++------ .../config_req_handlers/node_upgrade_handler.py | 2 +- .../config_req_handlers/pool_config_handler.py | 2 +- .../config_req_handlers/pool_upgrade_handler.py | 2 +- .../domain_req_handlers/attribute_handler.py | 2 +- .../domain_req_handlers/claim_def_handler.py | 2 +- .../domain_req_handlers/idr_cache_nym_handler.py | 2 +- .../domain_req_handlers/nym_handler.py | 2 +- .../domain_req_handlers/revoc_reg_def_handler.py | 2 +- .../domain_req_handlers/revoc_reg_entry_handler.py | 2 +- .../abstract_rich_schema_object_handler.py | 2 +- .../domain_req_handlers/schema_handler.py | 2 +- 14 files changed, 21 insertions(+), 19 deletions(-) diff --git a/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rule_handler.py b/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rule_handler.py index 376c7e7e8..0bda7a0c7 100644 --- a/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rule_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rule_handler.py @@ -21,7 +21,7 @@ def static_validation(self, request: Request): self._validate_request_type(request) self._static_validation_for_rule(operation, identifier, req_id) - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) self.write_req_validator.validate(request, [AuthActionEdit(txn_type=AUTH_RULE, diff --git a/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rules_handler.py b/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rules_handler.py index d739c4736..807b035a0 100644 --- a/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rules_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/auth_rule/auth_rules_handler.py @@ -22,7 +22,7 @@ def static_validation(self, request: Request): for rule in operation.get(RULES): self._static_validation_for_rule(rule, identifier, req_id) - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) self.write_req_validator.validate(request, [AuthActionEdit(txn_type=AUTH_RULES, diff --git a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py index 2b60f1939..b2a1de7be 100644 --- a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py @@ -15,10 +15,12 @@ def __init__(self, database_manager: DatabaseManager, super().__init__(database_manager) self.write_req_validator = write_req_validator - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): - super().dynamic_validation(request, req_pp_time) + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + pass + + def authorize(self, request): self.write_req_validator.validate(request, - [AuthActionEdit(txn_type=LEDGERS_FREEZE, - field='*', - old_value='*', - new_value='*')]) + [AuthActionEdit(txn_type=LEDGERS_FREEZE, + field='*', + old_value='*', + new_value='*')]) diff --git a/indy_node/server/request_handlers/config_req_handlers/node_upgrade_handler.py b/indy_node/server/request_handlers/config_req_handlers/node_upgrade_handler.py index f0cb00241..28b96d8ea 100644 --- a/indy_node/server/request_handlers/config_req_handlers/node_upgrade_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/node_upgrade_handler.py @@ -16,7 +16,7 @@ def __init__(self, database_manager: DatabaseManager): def update_state(self, txn, prev_result, request, is_committed=False): pass - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): pass def static_validation(self, request: Request): diff --git a/indy_node/server/request_handlers/config_req_handlers/pool_config_handler.py b/indy_node/server/request_handlers/config_req_handlers/pool_config_handler.py index 2e046fee0..d65adbb96 100644 --- a/indy_node/server/request_handlers/config_req_handlers/pool_config_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/pool_config_handler.py @@ -22,7 +22,7 @@ def __init__(self, database_manager: DatabaseManager, def static_validation(self, request: Request): self._validate_request_type(request) - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) action = '*' status = '*' diff --git a/indy_node/server/request_handlers/config_req_handlers/pool_upgrade_handler.py b/indy_node/server/request_handlers/config_req_handlers/pool_upgrade_handler.py index 5d31c74b4..f68bb2a69 100644 --- a/indy_node/server/request_handlers/config_req_handlers/pool_upgrade_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/pool_upgrade_handler.py @@ -48,7 +48,7 @@ def static_validation(self, request: Request): "{} not a valid schedule since {}". format(schedule, msg)) - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) identifier, req_id, operation = get_request_data(request) status = '*' diff --git a/indy_node/server/request_handlers/domain_req_handlers/attribute_handler.py b/indy_node/server/request_handlers/domain_req_handlers/attribute_handler.py index 1afe389f8..b1d7147db 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/attribute_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/attribute_handler.py @@ -55,7 +55,7 @@ def static_validation(self, request: Request): 'Attribute field must be dict while adding it as a row field'. format(TARGET_NYM)) - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) identifier, req_id, operation = get_request_data(request) diff --git a/indy_node/server/request_handlers/domain_req_handlers/claim_def_handler.py b/indy_node/server/request_handlers/domain_req_handlers/claim_def_handler.py index 5e1b1855e..b8b8528e6 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/claim_def_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/claim_def_handler.py @@ -29,7 +29,7 @@ def __init__(self, database_manager: DatabaseManager, def static_validation(self, request: Request): pass - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): # we can not add a Claim Def with existent ISSUER_DID # sine a Claim Def needs to be identified by seqNo self._validate_request_type(request) diff --git a/indy_node/server/request_handlers/domain_req_handlers/idr_cache_nym_handler.py b/indy_node/server/request_handlers/domain_req_handlers/idr_cache_nym_handler.py index b796b45ba..988f195ca 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/idr_cache_nym_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/idr_cache_nym_handler.py @@ -36,7 +36,7 @@ def update_state(self, txn, prev_result, request, is_committed=False): def static_validation(self, request): pass - def dynamic_validation(self, request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request, req_pp_time: Optional[int]): pass def gen_state_key(self, txn): diff --git a/indy_node/server/request_handlers/domain_req_handlers/nym_handler.py b/indy_node/server/request_handlers/domain_req_handlers/nym_handler.py index e943cd8a4..606754c82 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/nym_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/nym_handler.py @@ -42,7 +42,7 @@ def static_validation(self, request: Request): "{} not a valid role". format(role)) - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) operation = request.operation diff --git a/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_def_handler.py b/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_def_handler.py index f387cfe5f..2a17f5de8 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_def_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_def_handler.py @@ -40,7 +40,7 @@ def static_validation(self, request: Request): "Expected: 'did:marker:signature_type:schema_ref' or " "'did:marker:signature_type:schema_ref:tag'".format(CRED_DEF_ID)) - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) operation = request.operation cred_def_id = operation.get(CRED_DEF_ID) diff --git a/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_entry_handler.py b/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_entry_handler.py index 05ac52613..61b7b3951 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_entry_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/revoc_reg_entry_handler.py @@ -28,7 +28,7 @@ def __init__(self, database_manager: DatabaseManager, def static_validation(self, request: Request): pass - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) rev_reg_tags = request.operation[REVOC_REG_DEF_ID] author_did, req_id, operation = get_request_data(request) diff --git a/indy_node/server/request_handlers/domain_req_handlers/rich_schema/abstract_rich_schema_object_handler.py b/indy_node/server/request_handlers/domain_req_handlers/rich_schema/abstract_rich_schema_object_handler.py index 74cee1e25..32aec566c 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/rich_schema/abstract_rich_schema_object_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/rich_schema/abstract_rich_schema_object_handler.py @@ -33,7 +33,7 @@ def static_validation(self, request: Request): def do_static_validation_content(self, content_as_dict, request): pass - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): self._validate_request_type(request) rs_id = request.operation[RS_ID] diff --git a/indy_node/server/request_handlers/domain_req_handlers/schema_handler.py b/indy_node/server/request_handlers/domain_req_handlers/schema_handler.py index fe34d2039..4702bc2dd 100644 --- a/indy_node/server/request_handlers/domain_req_handlers/schema_handler.py +++ b/indy_node/server/request_handlers/domain_req_handlers/schema_handler.py @@ -27,7 +27,7 @@ def __init__(self, database_manager: DatabaseManager, def static_validation(self, request: Request): pass - def dynamic_validation(self, request: Request, req_pp_time: Optional[int]): + def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): # we can not add a Schema with already existent NAME and VERSION # sine a Schema needs to be identified by seqNo self._validate_request_type(request) From ade3dd4226dd46e265e3b6e0c9164be53df97199 Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 28 Jan 2021 18:03:22 +0300 Subject: [PATCH 009/100] UP-34: add frozen ledgers stubs to catchup and audit handler Signed-off-by: toktar --- indy_node/server/node_bootstrap.py | 2 +- .../config_req_handlers/ledgers_freeze_handler.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/indy_node/server/node_bootstrap.py b/indy_node/server/node_bootstrap.py index a907296ce..22127c362 100644 --- a/indy_node/server/node_bootstrap.py +++ b/indy_node/server/node_bootstrap.py @@ -46,7 +46,7 @@ from indy_node.server.request_handlers.read_req_handlers.get_attribute_handler import GetAttributeHandler from indy_node.server.request_handlers.read_req_handlers.get_auth_rule_handler import GetAuthRuleHandler from indy_node.server.request_handlers.read_req_handlers.get_claim_def_handler import GetClaimDefHandler -from plenum.server.request_handlers.get_frozen_ledgers_handler import GetFrozenLedgersHandler +from plenum.server.request_handlers.ledgers_freeze.get_frozen_ledgers_handler import GetFrozenLedgersHandler from indy_node.server.request_handlers.read_req_handlers.get_nym_handler import GetNymHandler from indy_node.server.request_handlers.read_req_handlers.get_revoc_reg_def_handler import GetRevocRegDefHandler from indy_node.server.request_handlers.read_req_handlers.get_revoc_reg_delta_handler import GetRevocRegDeltaHandler diff --git a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py index b2a1de7be..9d9195ae1 100644 --- a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py @@ -5,7 +5,7 @@ from plenum.common.constants import LEDGERS_FREEZE from plenum.common.request import Request from plenum.server.database_manager import DatabaseManager -from plenum.server.request_handlers.ledgers_freeze_handler import LedgersFreezeHandler as PLedgersFreezeHandler +from plenum.server.request_handlers.ledgers_freeze.ledgers_freeze_handler import LedgersFreezeHandler as PLedgersFreezeHandler class LedgersFreezeHandler(PLedgersFreezeHandler): From 6ed1b5a01f07bca81421841173114d192a417e21 Mon Sep 17 00:00:00 2001 From: Robin Klemens <39259938+udosson@users.noreply.github.com> Date: Tue, 2 Feb 2021 17:39:16 +0100 Subject: [PATCH 010/100] initial commit --- .github/workflows/build-u18004.yml | 76 ++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .github/workflows/build-u18004.yml diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml new file mode 100644 index 000000000..bd7885326 --- /dev/null +++ b/.github/workflows/build-u18004.yml @@ -0,0 +1,76 @@ +name: indy-node-build-u1804 +on: [ push, pull_request ] + +jobs: + decorator-checks: + name: Run decorator checks + needs: lint + runs-on: ubuntu-18.04 + #TODO: move this to hyperledger? + container: udosson/indy-node-ci-u1804:latest + outputs: + matrix-common: ${{ steps.ctd.outputs.matrix-common }} + matrix-node: ${{ steps.ctd.outputs.matrix-node }} + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: Check test decorators + id: ctd + run: | + chmod +x ./scripts/run_pytest_check.sh + ./scripts/run_pytest_check.sh + + indy-common: + name: Build Indy Common + needs: decorator-checks + runs-on: ubuntu-18.04 + #TODO: move this to hyperledger? + container: udosson/indy-node-ci-u1804:latest + strategy: + matrix: ${{fromJson(needs.decorator-checks.outputs.matrix-common)}} + fail-fast: false + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: Install dependencies + run: pip install .[tests] + continue-on-error: true + + - name: Run Indy Common tests + run: python3 -m pytest -l -m ${{ matrix.module }} -vv --junitxml=test-result-common-${{ matrix.module }}.xml indy_common + + + indy-node: + name: Build Indy Node + needs: decorator-checks + runs-on: ubuntu-18.04 + #TODO: move this to hyperledger? + container: udosson/indy-node-ci-u1804:latest + strategy: + matrix: ${{fromJson(needs.decorator-checks.outputs.matrix-node)}} + fail-fast: false + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: Install dependencies + run: pip install .[tests] + continue-on-error: true + + - name: Run Indy Node ${{ matrix.module }} tests + run: python3 -m pytest -l -m ${{ matrix.module }} -vv --junitxml=test-result-node-${{ matrix.module }}.xml indy_node + + + lint: + name: Lint + runs-on: ubuntu-18.04 + #TODO: move this to hyperledger? + container: udosson/indy-node-ci-u1804:latest + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: flake8 + run: python3 -m flake8 From 1af91450f09d97cfcf0bb17e96c1a484177cef24 Mon Sep 17 00:00:00 2001 From: Robin Klemens <39259938+udosson@users.noreply.github.com> Date: Tue, 2 Feb 2021 17:48:01 +0100 Subject: [PATCH 011/100] simplified workflow --- .github/workflows/build-u18004.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index bd7885326..2e9ec9bfb 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -28,8 +28,9 @@ jobs: #TODO: move this to hyperledger? container: udosson/indy-node-ci-u1804:latest strategy: - matrix: ${{fromJson(needs.decorator-checks.outputs.matrix-common)}} - fail-fast: false + matrix: + module: [indy_common] + slice: [1, 2] steps: - name: Check out code uses: actions/checkout@v2 @@ -37,20 +38,19 @@ jobs: - name: Install dependencies run: pip install .[tests] continue-on-error: true - - - name: Run Indy Common tests - run: python3 -m pytest -l -m ${{ matrix.module }} -vv --junitxml=test-result-common-${{ matrix.module }}.xml indy_common - + + - name: Run Indy Common ${{ matrix.module }} test slice ${{ matrix.slice }}/2 + run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }}/2 indy-node: name: Build Indy Node - needs: decorator-checks runs-on: ubuntu-18.04 #TODO: move this to hyperledger? container: udosson/indy-node-ci-u1804:latest strategy: - matrix: ${{fromJson(needs.decorator-checks.outputs.matrix-node)}} - fail-fast: false + matrix: + module: [indy_node] + slice: [1, 2, 3] steps: - name: Check out code uses: actions/checkout@v2 @@ -58,10 +58,11 @@ jobs: - name: Install dependencies run: pip install .[tests] continue-on-error: true + + - name: Run Indy Node ${{ matrix.module }} test slice ${{ matrix.slice }}/3 + run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }}/3 - - name: Run Indy Node ${{ matrix.module }} tests - run: python3 -m pytest -l -m ${{ matrix.module }} -vv --junitxml=test-result-node-${{ matrix.module }}.xml indy_node - + lint: name: Lint From c491e7819569aa6e66acc46615f66869ed8d59ce Mon Sep 17 00:00:00 2001 From: Robin Klemens <39259938+udosson@users.noreply.github.com> Date: Tue, 2 Feb 2021 17:49:57 +0100 Subject: [PATCH 012/100] removed decorator checks --- .github/workflows/build-u18004.yml | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 2e9ec9bfb..8933c937e 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -2,28 +2,8 @@ name: indy-node-build-u1804 on: [ push, pull_request ] jobs: - decorator-checks: - name: Run decorator checks - needs: lint - runs-on: ubuntu-18.04 - #TODO: move this to hyperledger? - container: udosson/indy-node-ci-u1804:latest - outputs: - matrix-common: ${{ steps.ctd.outputs.matrix-common }} - matrix-node: ${{ steps.ctd.outputs.matrix-node }} - steps: - - name: Check out code - uses: actions/checkout@v2 - - - name: Check test decorators - id: ctd - run: | - chmod +x ./scripts/run_pytest_check.sh - ./scripts/run_pytest_check.sh - indy-common: name: Build Indy Common - needs: decorator-checks runs-on: ubuntu-18.04 #TODO: move this to hyperledger? container: udosson/indy-node-ci-u1804:latest From f14511db0bf8661d46164c855c34303a4f1258ab Mon Sep 17 00:00:00 2001 From: Robin Klemens <39259938+udosson@users.noreply.github.com> Date: Tue, 2 Feb 2021 18:01:19 +0100 Subject: [PATCH 013/100] removed slices --- .github/workflows/build-u18004.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 8933c937e..243f75785 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -10,7 +10,6 @@ jobs: strategy: matrix: module: [indy_common] - slice: [1, 2] steps: - name: Check out code uses: actions/checkout@v2 @@ -19,8 +18,8 @@ jobs: run: pip install .[tests] continue-on-error: true - - name: Run Indy Common ${{ matrix.module }} test slice ${{ matrix.slice }}/2 - run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }}/2 + - name: Run Indy Common ${{ matrix.module }} test slice ${{ matrix.slice }} + run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }} indy-node: name: Build Indy Node @@ -30,7 +29,6 @@ jobs: strategy: matrix: module: [indy_node] - slice: [1, 2, 3] steps: - name: Check out code uses: actions/checkout@v2 @@ -39,8 +37,8 @@ jobs: run: pip install .[tests] continue-on-error: true - - name: Run Indy Node ${{ matrix.module }} test slice ${{ matrix.slice }}/3 - run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }}/3 + - name: Run Indy Node ${{ matrix.module }} test slice ${{ matrix.slice }} + run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }} From f2a6d5889f7bba277057bda370893cc51bc552e5 Mon Sep 17 00:00:00 2001 From: Robin Klemens <39259938+udosson@users.noreply.github.com> Date: Tue, 2 Feb 2021 18:07:28 +0100 Subject: [PATCH 014/100] removed modules --- .github/workflows/build-u18004.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 243f75785..11ec479a3 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -8,8 +8,6 @@ jobs: #TODO: move this to hyperledger? container: udosson/indy-node-ci-u1804:latest strategy: - matrix: - module: [indy_common] steps: - name: Check out code uses: actions/checkout@v2 @@ -18,8 +16,8 @@ jobs: run: pip install .[tests] continue-on-error: true - - name: Run Indy Common ${{ matrix.module }} test slice ${{ matrix.slice }} - run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }} + - name: Run Indy Common test + run: python3 -m pytest -l -vv --junitxml=test-result-indy-common.xml --dir indy_common --output "test-result-indy-common.txt" indy-node: name: Build Indy Node @@ -27,8 +25,6 @@ jobs: #TODO: move this to hyperledger? container: udosson/indy-node-ci-u1804:latest strategy: - matrix: - module: [indy_node] steps: - name: Check out code uses: actions/checkout@v2 @@ -37,8 +33,8 @@ jobs: run: pip install .[tests] continue-on-error: true - - name: Run Indy Node ${{ matrix.module }} test slice ${{ matrix.slice }} - run: python3 -m pytest -l -vv --junitxml=test-result-plenum-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }} + - name: Run Indy Node test + run: python3 -m pytest -l -vv --junitxml=test-result-indy-node.xml --dir indy_node --output "test-result-indy-node.txt" From b2eb9cf2d876e975cf8b1181f248309932889769 Mon Sep 17 00:00:00 2001 From: Robin Klemens <39259938+udosson@users.noreply.github.com> Date: Tue, 2 Feb 2021 18:16:02 +0100 Subject: [PATCH 015/100] bug fix: removed strategy: --- .github/workflows/build-u18004.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 11ec479a3..335999c18 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -7,7 +7,6 @@ jobs: runs-on: ubuntu-18.04 #TODO: move this to hyperledger? container: udosson/indy-node-ci-u1804:latest - strategy: steps: - name: Check out code uses: actions/checkout@v2 @@ -24,7 +23,6 @@ jobs: runs-on: ubuntu-18.04 #TODO: move this to hyperledger? container: udosson/indy-node-ci-u1804:latest - strategy: steps: - name: Check out code uses: actions/checkout@v2 From 6f90b08c503e9b5a80420d9c5beac1a787731711 Mon Sep 17 00:00:00 2001 From: Kevin Griffin Date: Thu, 4 Feb 2021 15:39:40 -0500 Subject: [PATCH 016/100] adds GitHub Actions and build containers Signed-off-by: Kevin Griffin --- .github/workflows/README.md | 25 ++++++ .github/workflows/build.yaml | 117 +++++++++++++++++++++++++++++ .github/workflows/build/Dockerfile | 17 +++++ .github/workflows/build/README.md | 3 + .github/workflows/lint/Dockerfile | 21 ++++++ .github/workflows/lint/README.md | 3 + .gitignore | 16 +++- setup.py | 2 +- 8 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/README.md create mode 100644 .github/workflows/build.yaml create mode 100644 .github/workflows/build/Dockerfile create mode 100644 .github/workflows/build/README.md create mode 100644 .github/workflows/lint/Dockerfile create mode 100644 .github/workflows/lint/README.md diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 000000000..f1587ac39 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,25 @@ +### Github Actions Workflow + +This build file replaces the existing `Jenkins.ci` build process. + +`lint.yaml` replaces the `Static code validation` stage of the Jenkins build. + +`build.yaml` replaces the `Build / Test` stage of the Jenkins build. + +Many of the other stages are replaced merely by the fact we're using Github Actions, we use prebuild Docker containers so we don't have to replicate the steps for building containers. + +The `Build result notification` stage was not moved to GHA, build failures will be reports via GHA. + +The build process for `Jenkins.nightly` was not ported to GHA. + +#### Configuring actions + +If you are cloning or forking this repo you will need to configure two secrets for Actions to run correctly. + +Secrets can be set via Settings -> Secrets -> New repository secret. + +CR_USER is your GH username. +CR_PAT can be created by following [these directions](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) + +Once you have run the build once with those secrets, you have to make then package public. +Access the package at https://ghcr.io/USER/indy-node/indy-node-build or https://ghcr.io/USER/indy-node/indy-node-lint then change the visibility in 'Package Settings' to 'Public' then re-run the build. diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 000000000..9ee5ffad3 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,117 @@ +name: indy-node-build +on: [ push, pull_request ] + +jobs: + workflow-setup: + runs-on: ubuntu-latest + outputs: + CACHE_KEY_LINT: ${{ steps.cache.outputs.CACHE_KEY_LINT }} + CACHE_KEY_BUILD: ${{ steps.cache.outputs.CACHE_KEY_BUILD }} + # Expose the lowercase version of the GitHub repository name + # to all subsequent jobs that reference image repositories + # as the push and pull operations require the URL of the repository + # to be in lowercase. + GITHUB_REPOSITORY_NAME: ${{ steps.cache.outputs.GITHUB_REPOSITORY_NAME }} + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Set outputs + id: cache + run: | + echo "::set-output name=CACHE_KEY_LINT::${{ hashFiles('.github/workflows/lint/Dockerfile') }}" + echo "::set-output name=CACHE_KEY_BUILD::${{ hashFiles('.github/workflows/build/Dockerfile') }}" + echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" + + build-lint-image: + needs: workflow-setup + runs-on: ubuntu-latest + env: + DOCKER_BUILDKIT: 1 + CACHE_KEY_LINT: ${{ needs.workflow-setup.outputs.CACHE_KEY_LINT }} + GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Try load from cache. + id: cache-image-lint + uses: actions/cache@v2 + with: + path: ${GITHUB_WORKSPACE}/cache + key: ${{ env.CACHE_KEY_LINT }} + - name: If NOT found in cache, build and push image. + if: steps.cache-image-lint.outputs.cache-hit != 'true' + run: | + echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin + docker build -f .github/workflows/lint/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest + mkdir -p ${GITHUB_WORKSPACE}/cache + touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_LINT }} + + build-test-image: + needs: workflow-setup + runs-on: ubuntu-latest + env: + DOCKER_BUILDKIT: 1 + CACHE_KEY_BUILD: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD }} + GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} + steps: + - name: Git checkout + uses: actions/checkout@v2 + - name: Try load from cache. + id: cache-image-build + uses: actions/cache@v2 + with: + path: ${GITHUB_WORKSPACE}/cache + key: ${{ env.CACHE_KEY_BUILD }} + - name: If NOT found in cache, build and push image. + if: steps.cache-image-build.outputs.cache-hit != 'true' + run: | + echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin + docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest + mkdir -p ${GITHUB_WORKSPACE}/cache + touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD }} + + indy_node: + name: Build Indy Node + needs: build-test-image + runs-on: ubuntu-18.04 + container: + image: ghcr.io/${{ github.repository }}/indy-node-build + strategy: + matrix: + module: [indy_node, indy_common] + slice: [1, 2, 3, 4 ,5, 6, 7,8, 9, 10, 11] + fail-fast: false + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: Install dependencies + run: pip install .[tests] + continue-on-error: true + + - name: Run Indy Node ${{ matrix.module }} test slice ${{ matrix.slice }}/${{ strategy.job-total }} + run: RUSTPYTHONASYNCIODEBUG=0 python3 runner.py --pytest "python3 -m pytest -l -vv --junitxml=test-result-indy-node-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-node-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }}/${{ strategy.job-total }}" + + - name: Publish Test Report + uses: scacap/action-surefire-report@v1 + with: + check_name: Indy Node ${{ matrix.module }} ${{ matrix.slice }}/${{ strategy.job-total }} Test Report + github_token: ${{ secrets.GITHUB_TOKEN }} + report_paths: test-result-indy-node-${{ matrix.module }}-${{ matrix.slice }}.xml + + lint: + name: Lint + runs-on: ubuntu-latest + container: + image: ghcr.io/${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }}/indy-node-lint + needs: [workflow-setup, build-lint-image] + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: flake8 + run: python3 -m flake8 diff --git a/.github/workflows/build/Dockerfile b/.github/workflows/build/Dockerfile new file mode 100644 index 000000000..0a1ce13c6 --- /dev/null +++ b/.github/workflows/build/Dockerfile @@ -0,0 +1,17 @@ +FROM hyperledger/indy-core-baseci:0.0.3-master +LABEL maintainer="Hyperledger " + +RUN apt-get update -y && apt-get install -y \ + python3-nacl \ + libindy-crypto=0.4.5 \ + libindy=1.13.0~1420 \ +# rocksdb python wrapper + libbz2-dev \ + zlib1g-dev \ + liblz4-dev \ + libsnappy-dev \ + rocksdb=5.8.8 \ + ursa=0.3.2-2 \ + jq + +RUN indy_image_clean diff --git a/.github/workflows/build/README.md b/.github/workflows/build/README.md new file mode 100644 index 000000000..984f201f2 --- /dev/null +++ b/.github/workflows/build/README.md @@ -0,0 +1,3 @@ +# Building the build image + +This `Dockerfile` is used as part of the workflow, any changes to it will force the docker image to be rebuilt and that new image will be used to run the downstream workflow. \ No newline at end of file diff --git a/.github/workflows/lint/Dockerfile b/.github/workflows/lint/Dockerfile new file mode 100644 index 000000000..d1870d403 --- /dev/null +++ b/.github/workflows/lint/Dockerfile @@ -0,0 +1,21 @@ +# Development +FROM ubuntu:18.04 +LABEL maintainer="Kevin Griffin " + +RUN apt-get update && apt-get dist-upgrade -y + +# Install environment +RUN apt-get install -y \ + git \ + wget \ + python3.5 \ + python3-pip \ + python-setuptools \ + python3-nacl + +RUN pip3 install -U \ + 'pip<10.0.0' \ + setuptools \ + pep8==1.7.1 \ + pep8-naming==0.6.1 \ + flake8==3.5.0 diff --git a/.github/workflows/lint/README.md b/.github/workflows/lint/README.md new file mode 100644 index 000000000..6b2a83fd0 --- /dev/null +++ b/.github/workflows/lint/README.md @@ -0,0 +1,3 @@ +# Building the lint image + +This `Dockerfile` is used as part of the workflow, any changes to it will force the docker image to be rebuilt and that new image will be used to run the downstream workflow. \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6147ec972..ca783e72d 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,9 @@ var/ *.egg *.eggs +# Needed for GitHub Actions +!.github/workflows/build + # Installer logs pip-log.txt pip-delete-this-directory.txt @@ -72,8 +75,15 @@ include/ # generated doc files docs/source/api_docs/ -# hidden files -.* +# IntelliJ specific config +*.idea +*.iml + +#vscode +.vscode # Vagrant files -.vagrant \ No newline at end of file +.vagrant + +# test output from working with GitHub actions +test-result-node.xml \ No newline at end of file diff --git a/setup.py b/setup.py index 5e8cd71e7..e8fdb3788 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ BASE_DIR = os.path.join(os.path.expanduser("~"), ".indy") tests_require = ['attrs==19.1.0', 'pytest==3.3.1', 'pytest-xdist==1.22.1', 'pytest-forked==0.2', - 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio==0.8.0'] + 'python3-indy==1.15.0', 'pytest-asyncio==0.8.0'] setup( name=metadata['__title__'], From 30383eab0125dd97715a734cf5fbb5a0d67879bf Mon Sep 17 00:00:00 2001 From: toktar Date: Wed, 10 Feb 2021 02:51:39 +0300 Subject: [PATCH 017/100] UP-34: update freeze tests and imports Signed-off-by: toktar --- indy_common/auth.py | 4 +- indy_common/authorize/auth_map.py | 4 +- indy_node/server/node.py | 2 +- .../auth_framework/edit_frozen_ledgers.py | 5 +- indy_node/test/freeze_ledgers/helper.py | 34 ---- .../test_send_get_frozen_ledgers.py | 62 ------- .../test_send_ledgers_freeze.py | 163 ++++-------------- 7 files changed, 40 insertions(+), 234 deletions(-) delete mode 100644 indy_node/test/freeze_ledgers/helper.py delete mode 100644 indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py diff --git a/indy_common/auth.py b/indy_common/auth.py index 5eff4616c..d54b01331 100644 --- a/indy_common/auth.py +++ b/indy_common/auth.py @@ -1,10 +1,10 @@ from indy_common.config_util import getConfig -from plenum.common.constants import TRUSTEE, STEWARD, NODE +from plenum.common.constants import TRUSTEE, STEWARD, NODE, LEDGERS_FREEZE from stp_core.common.log import getlogger from indy_common.constants import OWNER, POOL_UPGRADE, ENDORSER, NYM, \ POOL_CONFIG, SCHEMA, CLAIM_DEF, \ - POOL_RESTART, VALIDATOR_INFO, NETWORK_MONITOR, LEDGERS_FREEZE + POOL_RESTART, VALIDATOR_INFO, NETWORK_MONITOR from indy_common.roles import Roles logger = getlogger() diff --git a/indy_common/authorize/auth_map.py b/indy_common/authorize/auth_map.py index 2b527ac16..df3b2b492 100644 --- a/indy_common/authorize/auth_map.py +++ b/indy_common/authorize/auth_map.py @@ -7,9 +7,9 @@ from indy_common.constants import ENDORSER, POOL_CONFIG, VALIDATOR_INFO, POOL_UPGRADE, POOL_RESTART, NODE, \ CLAIM_DEF, SCHEMA, NYM, ROLE, AUTH_RULE, NETWORK_MONITOR, REVOC_REG_ENTRY, \ REVOC_REG_DEF, ATTRIB, AUTH_RULES, JSON_LD_CONTEXT, RICH_SCHEMA, RICH_SCHEMA_MAPPING, \ - RICH_SCHEMA_ENCODING, RICH_SCHEMA_CRED_DEF, RICH_SCHEMA_PRES_DEF, LEDGERS_FREEZE + RICH_SCHEMA_ENCODING, RICH_SCHEMA_CRED_DEF, RICH_SCHEMA_PRES_DEF from plenum.common.constants import TRUSTEE, STEWARD, VERKEY, TXN_AUTHOR_AGREEMENT, TXN_AUTHOR_AGREEMENT_AML, \ - TXN_AUTHOR_AGREEMENT_DISABLE + TXN_AUTHOR_AGREEMENT_DISABLE, LEDGERS_FREEZE edit_role_actions = {} # type: Dict[str, Dict[str, AuthActionEdit]] for role_from in accepted_roles: diff --git a/indy_node/server/node.py b/indy_node/server/node.py index 043573560..a24aa1597 100644 --- a/indy_node/server/node.py +++ b/indy_node/server/node.py @@ -20,7 +20,7 @@ from indy_common.config_util import getConfig from indy_common.constants import TXN_TYPE, ATTRIB, DATA, ACTION, \ NODE_UPGRADE, COMPLETE, FAIL, POOL_UPGRADE, POOL_CONFIG, \ - IN_PROGRESS, AUTH_RULE, AUTH_RULES, LEDGERS_FREEZE + IN_PROGRESS, AUTH_RULE, AUTH_RULES from indy_common.types import Request, SafeRequest from indy_common.config_helper import NodeConfigHelper from indy_node.server.client_authn import LedgerBasedAuthNr diff --git a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py index bb8fdf931..077d956c7 100644 --- a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py +++ b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py @@ -1,14 +1,13 @@ import pytest -from plenum.common.constants import STEWARD, TRUSTEE_STRING +from plenum.common.constants import STEWARD, TRUSTEE_STRING, LEDGERS_FREEZE from indy_node.server.request_handlers.action_req_handlers.pool_restart_handler import PoolRestartHandler -from indy_node.test.freeze_ledgers.helper import sdk_send_freeze_ledgers from indy_common.authorize.auth_actions import EDIT_PREFIX from indy_common.authorize.auth_constraints import AuthConstraint -from indy_common.constants import LEDGERS_FREEZE from indy_node.test.auth_rule.auth_framework.basic import AuthTest from plenum.common.exceptions import RequestRejectedException +from plenum.test.freeze_ledgers.helper import sdk_send_freeze_ledgers from plenum.test.pool_transactions.helper import sdk_add_new_nym from indy_node.test.helper import build_auth_rule_request_json, sdk_send_and_check_req_json diff --git a/indy_node/test/freeze_ledgers/helper.py b/indy_node/test/freeze_ledgers/helper.py deleted file mode 100644 index 2db4c7b0d..000000000 --- a/indy_node/test/freeze_ledgers/helper.py +++ /dev/null @@ -1,34 +0,0 @@ -import json - -from plenum.common.constants import TXN_TYPE, CURRENT_PROTOCOL_VERSION -from plenum.test.helper import sdk_sign_and_submit_req, sdk_get_and_check_replies, sdk_gen_request, \ - sdk_sign_request_objects, sdk_send_signed_requests, sdk_sign_and_submit_req_obj, sdk_multi_sign_request_objects -from indy_common.constants import LEDGERS_FREEZE, GET_FROZEN_LEDGERS, LEDGERS_IDS - - -def build_freeze_ledgers_request(did, ledgers_ids: [str]): - op = {TXN_TYPE: LEDGERS_FREEZE, - LEDGERS_IDS: ledgers_ids} - return sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, - identifier=did) - - -def build_get_frozen_ledgers_request(did): - op = {TXN_TYPE: GET_FROZEN_LEDGERS} - return sdk_gen_request(op, protocol_version=CURRENT_PROTOCOL_VERSION, - identifier=did) - - -def sdk_send_freeze_ledgers(looper, sdk_pool_handle, sdk_wallets, ledgers_ids: [str]): - # req = looper.loop.run_until_complete(build_freeze_ledgers_request(sdk_wallets[0][1], ledgers_ids)) # json.dumps(params) - # sdk_multi_sign_request_objects - req = build_freeze_ledgers_request(sdk_wallets[0][1], ledgers_ids) # json.dumps(params) - signed_reqs = sdk_multi_sign_request_objects(looper, sdk_wallets, [req]) - return sdk_send_signed_requests(sdk_pool_handle, signed_reqs)[0] - - -def sdk_get_frozen_ledgers(looper, sdk_pool_handle, sdk_wallet): - # req = looper.loop.run_until_complete(build_get_frozen_ledgers_request(sdk_wallet[1])) - req = build_get_frozen_ledgers_request(sdk_wallet[1]) - rep = sdk_sign_and_submit_req_obj(looper, sdk_pool_handle, sdk_wallet, req) - return sdk_get_and_check_replies(looper, [rep])[0] diff --git a/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py b/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py deleted file mode 100644 index 0393176f5..000000000 --- a/indy_node/test/freeze_ledgers/test_send_get_frozen_ledgers.py +++ /dev/null @@ -1,62 +0,0 @@ -import json - -import pytest -from plenum.common.constants import TXN_TYPE, DATA -from plenum.test.freshness.helper import check_freshness_updated_for_ledger - -from plenum.test.helper import sdk_sign_and_submit_op, sdk_get_and_check_replies, freshness - -from indy_common.authorize.auth_constraints import AuthConstraintForbidden -from indy_common.config import SCHEMA_ATTRIBUTES_LIMIT -from indy_common.constants import SCHEMA_NAME, SCHEMA_VERSION, SCHEMA_ATTR_NAMES, DOMAIN_LEDGER_ID, LEDGERS_IDS, \ - LEDGERS_FREEZE, GET_FROZEN_LEDGERS -from indy_common.types import SchemaField -from indy_node.test.api.helper import validate_write_reply, sdk_write_schema_and_check -from indy_node.test.freeze_ledgers.helper import sdk_send_freeze_ledgers, sdk_get_frozen_ledgers -from plenum.common.exceptions import RequestRejectedException, RequestNackedException -from plenum.common.util import randomString -from plenum.config import NAME_FIELD_LIMIT -from stp_core.loop.eventually import eventually - -FRESHNESS_TIMEOUT = 5 - - -@pytest.fixture(scope="module") -def tconf(tconf): - with freshness(tconf, enabled=True, timeout=FRESHNESS_TIMEOUT): - yield tconf - - - -def test_send_freeze_ledgers(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_trustee, - sdk_wallet_trustee_list): - ledger_to_remove = DOMAIN_LEDGER_ID - - looper.run(eventually( - check_freshness_updated_for_ledger, txnPoolNodeSet, ledger_to_remove, - timeout=3 * FRESHNESS_TIMEOUT) - ) - # op = {TXN_TYPE: "123", - # LEDGERS_IDS: [DOMAIN_LEDGER_ID]} - # req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) - # sdk_get_and_check_replies(looper, [req]) - # - - # op = {TXN_TYPE: "124"} - # req = sdk_sign_and_submit_op(looper, sdk_pool_handle, sdk_wallet_trustee, op) - # result = sdk_get_and_check_replies(looper, [req]) - sdk_send_freeze_ledgers( - looper, sdk_pool_handle, - sdk_wallet_trustee_list, - [ledger_to_remove] - ) - - - - result = sdk_get_frozen_ledgers(looper, sdk_pool_handle, - sdk_wallet_trustee)[1]["result"][DATA] - print(result) - - assert result[ledger_to_remove]["state"] - assert result[ledger_to_remove]["ledger"] - assert result[ledger_to_remove]["ledger"] >= 0 diff --git a/indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py b/indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py index f4f47c85b..2f692fef7 100644 --- a/indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py +++ b/indy_node/test/freeze_ledgers/test_send_ledgers_freeze.py @@ -1,136 +1,39 @@ -import json - import pytest -from indy.ledger import build_get_schema_request -from plenum.common.exceptions import RequestNackedException - -from plenum.common.constants import DATA, NAME, VERSION, TXN_METADATA, TXN_METADATA_SEQ_NO - -from plenum.common.types import OPERATION - -from plenum.test.helper import sdk_sign_and_submit_req, sdk_get_and_check_replies - -from indy_node.test.api.helper import sdk_write_schema -from indy_node.test.helper import createUuidIdentifier, modify_field +from plenum.common.constants import DATA +from plenum.common.exceptions import RequestRejectedException +from plenum.test.freeze_ledgers.helper import sdk_get_frozen_ledgers, sdk_send_freeze_ledgers +from plenum.test.helper import freshness - -@pytest.fixture(scope="module") -def send_schema(looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee): - schema_json, _ = sdk_write_schema(looper, sdk_pool_handle, sdk_wallet_trustee) - return json.loads(schema_json)['id'] - - -@pytest.fixture(scope="module") -def send_schema_seq_no(looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee): - _, reply = sdk_write_schema(looper, sdk_pool_handle, sdk_wallet_trustee) - return reply['result'][TXN_METADATA][TXN_METADATA_SEQ_NO] +FRESHNESS_TIMEOUT = 5 @pytest.fixture(scope="module") -def send_schema_req(looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee): - schema_json, reply = sdk_write_schema( +def tconf(tconf): + with freshness(tconf, enabled=True, timeout=FRESHNESS_TIMEOUT): + yield tconf + + +def test_send_freeze_ledgers(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_trustee_list): + with pytest.raises(RequestRejectedException, match="Not enough TRUSTEE signatures"): + sdk_send_freeze_ledgers( + looper, sdk_pool_handle, + sdk_wallet_trustee_list[:-1], + [] + ) + + # check that the config state doesn't contain frozen ledgers records + result = sdk_get_frozen_ledgers(looper, sdk_pool_handle, + sdk_wallet_trustee_list[0])[1]["result"][DATA] + assert result is None + + # add to the config state a frozen ledgers record with an empty list + sdk_send_freeze_ledgers( looper, sdk_pool_handle, - sdk_wallet_trustee, - ["attrib1", "attrib2"], - "some_name_ajf", - "1.0") - return schema_json, reply - - -def test_send_get_schema_succeeds( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - assert rep[0][1]['result']['seqNo'] - - -def test_send_get_schema_as_client( - looper, sdk_pool_handle, nodeSet, sdk_wallet_client, send_schema): - _, did = sdk_wallet_client - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_client, request)]) - assert rep[0][1]['result']['seqNo'] - - -def test_send_get_schema_fails_with_invalid_name( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - request = modify_field(request, 'name111', OPERATION, DATA, NAME) - rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - assert rep[0][1]['result']['seqNo'] is None - - -def test_send_get_schema_fails_with_invalid_dest( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - uuid_identifier = createUuidIdentifier() - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - request = modify_field(request, uuid_identifier, OPERATION, 'dest') - rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - assert rep[0][1]['result']['seqNo'] is None - - -def test_send_get_schema_fails_with_invalid_version( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - request = modify_field(request, '2.0', OPERATION, DATA, VERSION) - rep = sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - assert rep[0][1]['result']['seqNo'] is None - - -def test_send_get_schema_fails_with_invalid_version_syntax( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - request = modify_field(request, 'asd', OPERATION, DATA, VERSION) - with pytest.raises(RequestNackedException) as e: - sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - e.match("Invalid version: 'asd'") - - -def test_send_get_schema_fails_without_version( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - request = json.loads(request) - del request[OPERATION][DATA][VERSION] - request = json.dumps(request) - with pytest.raises(RequestNackedException) as e: - sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - e.match('missed fields - version') - - -def test_send_get_schema_fails_without_name( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - request = json.loads(request) - del request[OPERATION][DATA][NAME] - request = json.dumps(request) - with pytest.raises(RequestNackedException) as e: - sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - e.match('missed fields - name') - - -def test_send_get_schema_fails_without_dest( - looper, sdk_pool_handle, nodeSet, sdk_wallet_trustee, send_schema): - _, did = sdk_wallet_trustee - - request = looper.loop.run_until_complete(build_get_schema_request(did, send_schema)) - request = json.loads(request) - del request[OPERATION]['dest'] - request = json.dumps(request) - with pytest.raises(RequestNackedException) as e: - sdk_get_and_check_replies(looper, [sdk_sign_and_submit_req(sdk_pool_handle, sdk_wallet_trustee, request)]) - e.match('missed fields - dest') + sdk_wallet_trustee_list, + [] + ) + + # check that the config state contains a frozen ledgers record with an empty list + result = sdk_get_frozen_ledgers(looper, sdk_pool_handle, + sdk_wallet_trustee_list[0])[1]["result"][DATA] + assert len(result) == 0 From e4033ef74d4362afc3fdba555699158128255881 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 9 Feb 2021 17:38:41 -0700 Subject: [PATCH 018/100] update libraries v1 Signed-off-by: Ryan Marsh --- indy_node/test/nym_txn/test_nym_additional.py | 2 +- setup.py | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/indy_node/test/nym_txn/test_nym_additional.py b/indy_node/test/nym_txn/test_nym_additional.py index 1c589a27b..612f84b1f 100644 --- a/indy_node/test/nym_txn/test_nym_additional.py +++ b/indy_node/test/nym_txn/test_nym_additional.py @@ -25,7 +25,7 @@ def set_verkey(looper, sdk_pool_handle, sdk_wallet_sender, dest, verkey): return wh, new_did -@pytest.fixture("module") +@pytest.fixture(scope="module") def endorser_did_verkey(looper, sdk_wallet_client): wh, _ = sdk_wallet_client named_did, verkey = looper.loop.run_until_complete( diff --git a/setup.py b/setup.py index 5e8cd71e7..3d9a497f9 100644 --- a/setup.py +++ b/setup.py @@ -27,8 +27,8 @@ BASE_DIR = os.path.join(os.path.expanduser("~"), ".indy") -tests_require = ['attrs==19.1.0', 'pytest==3.3.1', 'pytest-xdist==1.22.1', 'pytest-forked==0.2', - 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio==0.8.0'] +tests_require = ['attrs', 'pytest', 'pytest-xdist', 'pytest-forked', + 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio'] setup( name=metadata['__title__'], @@ -54,9 +54,7 @@ data_files=[( (BASE_DIR, ['data/nssm_original.exe']) )], - install_requires=['indy-plenum==1.13.0.dev1032', - 'timeout-decorator==0.4.0', - 'distro==1.3.0'], + install_requires=['indy-plenum==1.13.0.dev1032', 'timeout-decorator', 'distro'], setup_requires=['pytest-runner'], extras_require={ 'tests': tests_require From b06bf9c994268f9d6cb037c39dbfb8273011390b Mon Sep 17 00:00:00 2001 From: toktar Date: Wed, 10 Feb 2021 07:40:32 +0300 Subject: [PATCH 019/100] UP-34: bump plenum version Signed-off-by: toktar --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e8fdb3788..0d279d13d 100644 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ data_files=[( (BASE_DIR, ['data/nssm_original.exe']) )], - install_requires=['indy-plenum==1.13.0.dev1032', + install_requires=['indy-plenum==1.13.0.dev1033', 'timeout-decorator==0.4.0', 'distro==1.3.0'], setup_requires=['pytest-runner'], From 5ea6e7211224ae425165bc47e2e704bd505efa0e Mon Sep 17 00:00:00 2001 From: toktar Date: Wed, 10 Feb 2021 07:48:56 +0300 Subject: [PATCH 020/100] UP-34: fix `generate_auth_map` Signed-off-by: toktar --- indy_common/auth.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indy_common/auth.py b/indy_common/auth.py index d54b01331..dbaf9ab9a 100644 --- a/indy_common/auth.py +++ b/indy_common/auth.py @@ -63,7 +63,7 @@ def generate_auth_map(valid_roles): '{}___'.format(VALIDATOR_INFO): {TRUSTEE: [], STEWARD: []}, '{}___'.format(LEDGERS_FREEZE): - {TRUSTEE: [], TRUSTEE: [], TRUSTEE: []}, + {TRUSTEE: []}, } return auth_map From 08e9836fa2d196931f442cd8ee88d485d206e265 Mon Sep 17 00:00:00 2001 From: Ry Jones Date: Wed, 10 Feb 2021 08:41:17 -0800 Subject: [PATCH 021/100] chore: Add workflow trigger Signed-off-by: Ry Jones --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 9ee5ffad3..177b7e44b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,5 +1,5 @@ name: indy-node-build -on: [ push, pull_request ] +on: [ push, pull_request, workflow_dispatch ] jobs: workflow-setup: From b411290040db3c83813945d8cd29113432acc9c4 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Thu, 11 Feb 2021 02:07:23 +0300 Subject: [PATCH 022/100] Add script for remove ledger Signed-off-by: anton.denishchenko --- scripts/remove_ledger.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 scripts/remove_ledger.py diff --git a/scripts/remove_ledger.py b/scripts/remove_ledger.py new file mode 100644 index 000000000..4256e7617 --- /dev/null +++ b/scripts/remove_ledger.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 + +from pathlib import Path +import shutil +from sys import argv +script, file_path = argv +from indy_common.config_util import getConfig +from indy_common.config_helper import ConfigHelper + +config = getConfig() +config_helper = ConfigHelper(config) + +def main(file_path): + exceptions = ["domen", "config", "pool", "audit"] + if file_path not in exceptions: + for path in Path(config_helper.ledger_data_dir).rglob(file_path + "_*"): + shutil.rmtree(str(path)) + print('follow directory was deleted: ' + path.name) + else: + print('Can`t delete ledger: ' + file_path) + +if __name__ == '__main__': + main(file_path) From df7b41fd52c908b1bf9a523e0548087f3f383781 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Wed, 10 Feb 2021 16:54:34 -0700 Subject: [PATCH 023/100] collections.abc and module for tests Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 1 + .../read_req_handlers/get_revoc_reg_delta_handler.py | 2 +- indy_node/test/nym_txn/test_nym_additional.py | 2 +- indy_node/test/pool_restart/test_pool_restart.py | 1 + scripts/performance/perf_load/perf_utils.py | 2 +- setup.py | 8 +++----- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 0044a0303..abf00f027 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,6 +34,7 @@ def testValidInputAndReturn(): takesStr('1') +# FIXME -> RTM: TypeError: Subscripted generics cannot be used with class and instance checks def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/server/request_handlers/read_req_handlers/get_revoc_reg_delta_handler.py b/indy_node/server/request_handlers/read_req_handlers/get_revoc_reg_delta_handler.py index b4c84e47c..cdb16e7a8 100644 --- a/indy_node/server/request_handlers/read_req_handlers/get_revoc_reg_delta_handler.py +++ b/indy_node/server/request_handlers/read_req_handlers/get_revoc_reg_delta_handler.py @@ -1,4 +1,4 @@ -from collections import Callable +from collections.abc import Callable from indy_common.constants import FROM, TO, REVOC_REG_DEF_ID, ISSUANCE_TYPE, REVOKED, ISSUED, VALUE, REVOC_TYPE, \ ACCUM_TO, STATE_PROOF_FROM, ACCUM_FROM, GET_REVOC_REG_DELTA diff --git a/indy_node/test/nym_txn/test_nym_additional.py b/indy_node/test/nym_txn/test_nym_additional.py index 1c589a27b..612f84b1f 100644 --- a/indy_node/test/nym_txn/test_nym_additional.py +++ b/indy_node/test/nym_txn/test_nym_additional.py @@ -25,7 +25,7 @@ def set_verkey(looper, sdk_pool_handle, sdk_wallet_sender, dest, verkey): return wh, new_did -@pytest.fixture("module") +@pytest.fixture(scope="module") def endorser_did_verkey(looper, sdk_wallet_client): wh, _ = sdk_wallet_client named_did, verkey = looper.loop.run_until_complete( diff --git a/indy_node/test/pool_restart/test_pool_restart.py b/indy_node/test/pool_restart/test_pool_restart.py index e0ef51421..a21c59993 100644 --- a/indy_node/test/pool_restart/test_pool_restart.py +++ b/indy_node/test/pool_restart/test_pool_restart.py @@ -94,6 +94,7 @@ def test_pool_restart_now_without_datetime( tdir, tconf, START) +# FIXME -> RTM: pool_restart failures def test_pool_restart_in_view_change(sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, txnPoolNodeSet): diff --git a/scripts/performance/perf_load/perf_utils.py b/scripts/performance/perf_load/perf_utils.py index 9753dfdbd..c02237385 100644 --- a/scripts/performance/perf_load/perf_utils.py +++ b/scripts/performance/perf_load/perf_utils.py @@ -1,7 +1,7 @@ import json import os import argparse -from collections import Sequence +from collections.abc import Sequence from typing import Dict, List from queue import Queue, Empty diff --git a/setup.py b/setup.py index 5e8cd71e7..3d9a497f9 100644 --- a/setup.py +++ b/setup.py @@ -27,8 +27,8 @@ BASE_DIR = os.path.join(os.path.expanduser("~"), ".indy") -tests_require = ['attrs==19.1.0', 'pytest==3.3.1', 'pytest-xdist==1.22.1', 'pytest-forked==0.2', - 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio==0.8.0'] +tests_require = ['attrs', 'pytest', 'pytest-xdist', 'pytest-forked', + 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio'] setup( name=metadata['__title__'], @@ -54,9 +54,7 @@ data_files=[( (BASE_DIR, ['data/nssm_original.exe']) )], - install_requires=['indy-plenum==1.13.0.dev1032', - 'timeout-decorator==0.4.0', - 'distro==1.3.0'], + install_requires=['indy-plenum==1.13.0.dev1032', 'timeout-decorator', 'distro'], setup_requires=['pytest-runner'], extras_require={ 'tests': tests_require From ac5a12bae2b2d9b3133f81cfbcd77c85afa3abfb Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Thu, 11 Feb 2021 11:46:36 +0300 Subject: [PATCH 024/100] Fix after review Signed-off-by: anton.denishchenko --- scripts/remove_ledger.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/remove_ledger.py b/scripts/remove_ledger.py index 4256e7617..afb5b8195 100644 --- a/scripts/remove_ledger.py +++ b/scripts/remove_ledger.py @@ -3,21 +3,21 @@ from pathlib import Path import shutil from sys import argv -script, file_path = argv +script, ledger_name = argv from indy_common.config_util import getConfig from indy_common.config_helper import ConfigHelper config = getConfig() config_helper = ConfigHelper(config) -def main(file_path): +def remove(ledger_name): exceptions = ["domen", "config", "pool", "audit"] - if file_path not in exceptions: - for path in Path(config_helper.ledger_data_dir).rglob(file_path + "_*"): + if ledger_name not in exceptions: + for path in Path(config_helper.ledger_data_dir).rglob(ledger_name + "_*"): shutil.rmtree(str(path)) - print('follow directory was deleted: ' + path.name) + print('The follow directory was deleted: ' + path.name) else: - print('Can`t delete ledger: ' + file_path) + print('Can`t delete built in ledger: ' + ledger_name) if __name__ == '__main__': - main(file_path) + remove(ledger_name) From f8a94fc8d32550641e596681b27e31060e051342 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Thu, 11 Feb 2021 12:04:33 +0300 Subject: [PATCH 025/100] Fix linter issues Signed-off-by: anton.denishchenko --- scripts/remove_ledger.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/remove_ledger.py b/scripts/remove_ledger.py index afb5b8195..834519763 100644 --- a/scripts/remove_ledger.py +++ b/scripts/remove_ledger.py @@ -3,12 +3,9 @@ from pathlib import Path import shutil from sys import argv -script, ledger_name = argv from indy_common.config_util import getConfig from indy_common.config_helper import ConfigHelper -config = getConfig() -config_helper = ConfigHelper(config) def remove(ledger_name): exceptions = ["domen", "config", "pool", "audit"] @@ -19,5 +16,9 @@ def remove(ledger_name): else: print('Can`t delete built in ledger: ' + ledger_name) + if __name__ == '__main__': + config = getConfig() + config_helper = ConfigHelper(config) + script, ledger_name = argv remove(ledger_name) From ab9225b607553a9432f365865fb618e9155b9c93 Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 11 Feb 2021 13:49:57 +0300 Subject: [PATCH 026/100] UP-34: fix frozen ledgers auth tests Signed-off-by: toktar --- .../auth_framework/edit_frozen_ledgers.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py index 077d956c7..ef71d91cc 100644 --- a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py +++ b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py @@ -34,31 +34,31 @@ def prepare(self): h.restarter.handleRestartRequest = lambda *args, **kwargs: True def run(self): - frozen_ledgers_ids = ["10001"] + frozen_ledgers_ids = [10001] # Step 1. Check default auth rule - sdk_send_freeze_ledgers(self.looper, self.trustee_wallets, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.trustee_wallets, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): - sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet, frozen_ledgers_ids) # Step 2. Change auth rule self.send_and_check(self.changed_auth_rule, wallet=self.trustee_wallet) # Step 3. Check, that we cannot send txn the old way - sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): - sdk_send_freeze_ledgers(self.looper, self.trustee_wallets, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.trustee_wallets, frozen_ledgers_ids) # Step 4. Check, that we can send restart action in changed way - sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet,frozen_ledgers_ids) # Step 5. Return default auth rule self.send_and_check(self.default_auth_rule, self.trustee_wallet) # Step 6. Check, that default auth rule works - sdk_send_freeze_ledgers(self.looper, self.trustee_wallets, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.trustee_wallets, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): - sdk_send_freeze_ledgers(self.looper, self.new_default_wallet, self.sdk_pool_handle, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet, frozen_ledgers_ids) def result(self): pass From a680bbf415e5bef9f7680b6a05c93b5ce730b0df Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 11 Feb 2021 15:28:07 +0300 Subject: [PATCH 027/100] UP-34: fix test_transactions.py import Signed-off-by: toktar --- indy_common/test/test_transactions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indy_common/test/test_transactions.py b/indy_common/test/test_transactions.py index 9d5fec06d..f74055ee4 100644 --- a/indy_common/test/test_transactions.py +++ b/indy_common/test/test_transactions.py @@ -4,7 +4,7 @@ GET_REVOC_REG_DEF, GET_REVOC_REG, GET_REVOC_REG_DELTA, POOL_RESTART, VALIDATOR_INFO, CHANGE_KEY, AUTH_RULE, \ GET_AUTH_RULE, AUTH_RULES, RICH_SCHEMA, RICH_SCHEMA_ENCODING, \ RICH_SCHEMA_MAPPING, RICH_SCHEMA_CRED_DEF, JSON_LD_CONTEXT, GET_RICH_SCHEMA_OBJECT_BY_METADATA, \ - GET_RICH_SCHEMA_OBJECT_BY_ID, RICH_SCHEMA_PRES_DEF, LEDGERS_FREEZE, GET_FROZEN_LEDGERS + GET_RICH_SCHEMA_OBJECT_BY_ID, RICH_SCHEMA_PRES_DEF from indy_common.transactions import IndyTransactions From 939b4a4e4aa706450955443dd9a36c89acd6711c Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 11 Feb 2021 15:37:18 +0300 Subject: [PATCH 028/100] UP-34: fix ledgers_freeze_handler bug with validation Signed-off-by: toktar --- .../config_req_handlers/ledgers_freeze_handler.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py index 9d9195ae1..b189bb637 100644 --- a/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py +++ b/indy_node/server/request_handlers/config_req_handlers/ledgers_freeze_handler.py @@ -15,9 +15,6 @@ def __init__(self, database_manager: DatabaseManager, super().__init__(database_manager) self.write_req_validator = write_req_validator - def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[int]): - pass - def authorize(self, request): self.write_req_validator.validate(request, [AuthActionEdit(txn_type=LEDGERS_FREEZE, From 58bd670b8f327da2b8b8ac8d63dec6d4ea91d726 Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 11 Feb 2021 17:10:29 +0300 Subject: [PATCH 029/100] UP-34: fix edit_frozen_ledgers test Signed-off-by: toktar --- .../test/auth_rule/auth_framework/edit_frozen_ledgers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py index ef71d91cc..4e896e47e 100644 --- a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py +++ b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py @@ -39,18 +39,18 @@ def run(self): # Step 1. Check default auth rule sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.trustee_wallets, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): - sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, [self.new_default_wallet], frozen_ledgers_ids) # Step 2. Change auth rule self.send_and_check(self.changed_auth_rule, wallet=self.trustee_wallet) # Step 3. Check, that we cannot send txn the old way - sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, [self.new_default_wallet], frozen_ledgers_ids) with pytest.raises(RequestRejectedException): sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.trustee_wallets, frozen_ledgers_ids) # Step 4. Check, that we can send restart action in changed way - sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet,frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, [self.new_default_wallet], frozen_ledgers_ids) # Step 5. Return default auth rule self.send_and_check(self.default_auth_rule, self.trustee_wallet) @@ -58,7 +58,7 @@ def run(self): # Step 6. Check, that default auth rule works sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.trustee_wallets, frozen_ledgers_ids) with pytest.raises(RequestRejectedException): - sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.new_default_wallet, frozen_ledgers_ids) + sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, [self.new_default_wallet], frozen_ledgers_ids) def result(self): pass From d166dacf4e14cbe27f3b18c717ae66e2c5ff6ea2 Mon Sep 17 00:00:00 2001 From: toktar Date: Thu, 11 Feb 2021 19:18:42 +0300 Subject: [PATCH 030/100] UP-34: fix edit_frozen_ledgers test Signed-off-by: toktar --- indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py index 4e896e47e..dee1e57a2 100644 --- a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py +++ b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py @@ -34,7 +34,7 @@ def prepare(self): h.restarter.handleRestartRequest = lambda *args, **kwargs: True def run(self): - frozen_ledgers_ids = [10001] + frozen_ledgers_ids = [] # Step 1. Check default auth rule sdk_send_freeze_ledgers(self.looper, self.sdk_pool_handle, self.trustee_wallets, frozen_ledgers_ids) From b3f580349e2f458face443faec740e57e1cd1382 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 11 Feb 2021 10:12:13 -0700 Subject: [PATCH 031/100] fixes pool_restart tests Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 1 - indy_node/test/pool_restart/test_pool_restart.py | 16 +++++++++------- .../test_pool_restart_now_with_empty_datetime.py | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index abf00f027..0044a0303 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,6 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: TypeError: Subscripted generics cannot be used with class and instance checks def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/pool_restart/test_pool_restart.py b/indy_node/test/pool_restart/test_pool_restart.py index a21c59993..876c79fb1 100644 --- a/indy_node/test/pool_restart/test_pool_restart.py +++ b/indy_node/test/pool_restart/test_pool_restart.py @@ -11,7 +11,6 @@ from indy_node.test.pool_restart.helper import _createServer, _stopServer, sdk_send_restart from plenum.common.constants import REPLY, TXN_TYPE from plenum.common.types import f -from plenum.test.testing_utils import FakeSomething def test_pool_restart( @@ -89,12 +88,11 @@ def test_pool_restart_cancel( def test_pool_restart_now_without_datetime( - sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf): + sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, txnPoolNodeSet): pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, - tdir, tconf, START) + tdir, tconf, START, txnPoolNodeSet) -# FIXME -> RTM: pool_restart failures def test_pool_restart_in_view_change(sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, txnPoolNodeSet): @@ -102,11 +100,11 @@ def test_pool_restart_in_view_change(sdk_pool_handle, sdk_wallet_trustee, looper node.master_replica._consensus_data.waiting_for_new_view = True pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, - tdir, tconf, START) + tdir, tconf, START, txnPoolNodeSet) def pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, - action, datetime=None): + action, txnPoolNodeSet, use_time=True): server, indicator = looper.loop.run_until_complete( _createServer( host=tconf.controlServiceHost, @@ -114,11 +112,15 @@ def pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, ) ) + time = None + if use_time: + unow = datetime.utcnow().replace(tzinfo=dateutil.tz.tzutc()) + time = str(datetime.isoformat(unow + timedelta(seconds=1000))) req_obj, resp = sdk_send_restart(looper, sdk_wallet_trustee, sdk_pool_handle, action=action, - datetime=datetime) + datetime=time) _stopServer(server) _comparison_reply(resp, req_obj) diff --git a/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py b/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py index ac3e22215..bf807da64 100644 --- a/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py +++ b/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py @@ -3,6 +3,6 @@ def test_pool_restart_now_with_empty_datetime( - sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf): + sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, txnPoolNodeSet): pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, - tdir, tconf, START, "") \ No newline at end of file + tdir, tconf, START, "", use_time=False) From f2253f1513465dbe9a077b8b8486594716ab9502 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 11 Feb 2021 10:12:13 -0700 Subject: [PATCH 032/100] fixes pool_restart tests Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 1 - indy_node/test/pool_restart/test_pool_restart.py | 16 +++++++++------- .../test_pool_restart_now_with_empty_datetime.py | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index abf00f027..0044a0303 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,6 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: TypeError: Subscripted generics cannot be used with class and instance checks def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/pool_restart/test_pool_restart.py b/indy_node/test/pool_restart/test_pool_restart.py index a21c59993..876c79fb1 100644 --- a/indy_node/test/pool_restart/test_pool_restart.py +++ b/indy_node/test/pool_restart/test_pool_restart.py @@ -11,7 +11,6 @@ from indy_node.test.pool_restart.helper import _createServer, _stopServer, sdk_send_restart from plenum.common.constants import REPLY, TXN_TYPE from plenum.common.types import f -from plenum.test.testing_utils import FakeSomething def test_pool_restart( @@ -89,12 +88,11 @@ def test_pool_restart_cancel( def test_pool_restart_now_without_datetime( - sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf): + sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, txnPoolNodeSet): pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, - tdir, tconf, START) + tdir, tconf, START, txnPoolNodeSet) -# FIXME -> RTM: pool_restart failures def test_pool_restart_in_view_change(sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, txnPoolNodeSet): @@ -102,11 +100,11 @@ def test_pool_restart_in_view_change(sdk_pool_handle, sdk_wallet_trustee, looper node.master_replica._consensus_data.waiting_for_new_view = True pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, - tdir, tconf, START) + tdir, tconf, START, txnPoolNodeSet) def pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, - action, datetime=None): + action, txnPoolNodeSet, use_time=True): server, indicator = looper.loop.run_until_complete( _createServer( host=tconf.controlServiceHost, @@ -114,11 +112,15 @@ def pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, ) ) + time = None + if use_time: + unow = datetime.utcnow().replace(tzinfo=dateutil.tz.tzutc()) + time = str(datetime.isoformat(unow + timedelta(seconds=1000))) req_obj, resp = sdk_send_restart(looper, sdk_wallet_trustee, sdk_pool_handle, action=action, - datetime=datetime) + datetime=time) _stopServer(server) _comparison_reply(resp, req_obj) diff --git a/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py b/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py index ac3e22215..bf807da64 100644 --- a/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py +++ b/indy_node/test/pool_restart/test_pool_restart_now_with_empty_datetime.py @@ -3,6 +3,6 @@ def test_pool_restart_now_with_empty_datetime( - sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf): + sdk_pool_handle, sdk_wallet_trustee, looper, tdir, tconf, txnPoolNodeSet): pool_restart_now(sdk_pool_handle, sdk_wallet_trustee, looper, - tdir, tconf, START, "") \ No newline at end of file + tdir, tconf, START, "", use_time=False) From 90c1da8c528d9627f59b3dfb1ae24917a3bbe4ed Mon Sep 17 00:00:00 2001 From: toktar Date: Fri, 12 Feb 2021 01:09:19 +0300 Subject: [PATCH 033/100] UP-34: fix edit_frozen_ledgers test Signed-off-by: toktar --- indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py index dee1e57a2..8dd0d3801 100644 --- a/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py +++ b/indy_node/test/auth_rule/auth_framework/edit_frozen_ledgers.py @@ -73,6 +73,7 @@ def get_changed_auth_rule(self): auth_action=EDIT_PREFIX, auth_type=LEDGERS_FREEZE, field='*', + old_value='*', new_value='*', constraint=constraint.as_dict ) From f39e82e2de31372b688289c630329a821f9f6a36 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Fri, 12 Feb 2021 13:03:20 +0300 Subject: [PATCH 034/100] Add warn before delete ledger Signed-off-by: anton.denishchenko --- scripts/remove_ledger.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/scripts/remove_ledger.py b/scripts/remove_ledger.py index 834519763..c7e34a0c2 100644 --- a/scripts/remove_ledger.py +++ b/scripts/remove_ledger.py @@ -7,12 +7,37 @@ from indy_common.config_helper import ConfigHelper +def warn(ledger_name, directories_path): + print('The follow directories will be delete:') + + for path in directories_path: + print(str(path)) + + print('Delete ledger is irrevocable operation.\nProceed only if you know consequences.') + answer = input('Do you want to delete ledger ' + ledger_name + '?\n Press [y/N]') + + if answer.lower() == 'yes' or answer.lower() == 'y': + return True + + return False + + def remove(ledger_name): - exceptions = ["domen", "config", "pool", "audit"] + exceptions = ["domain", "config", "pool", "audit"] if ledger_name not in exceptions: + directories_path = [] + for path in Path(config_helper.ledger_data_dir).rglob(ledger_name + "_*"): - shutil.rmtree(str(path)) - print('The follow directory was deleted: ' + path.name) + directories_path.append(path) + + if not len(directories_path): + print('Doesn`t exist ledger: ' + ledger_name) + + elif warn(ledger_name, directories_path): + for path in directories_path: + shutil.rmtree(str(path)) + print('Ledger removed successfully!') + else: print('Can`t delete built in ledger: ' + ledger_name) From dfe641b6786b17a11d0c2de7618b65df58cf3365 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Fri, 12 Feb 2021 19:55:36 +0300 Subject: [PATCH 035/100] Refactoring after review Signed-off-by: anton.denishchenko --- scripts/remove_ledger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/remove_ledger.py b/scripts/remove_ledger.py index c7e34a0c2..44c595bd8 100644 --- a/scripts/remove_ledger.py +++ b/scripts/remove_ledger.py @@ -8,12 +8,12 @@ def warn(ledger_name, directories_path): - print('The follow directories will be delete:') + print('The follow directories will be deleted:') for path in directories_path: print(str(path)) - print('Delete ledger is irrevocable operation.\nProceed only if you know consequences.') + print('Deleting a ledger is an irrevocable operation.\nProceed only if you know the consequences.') answer = input('Do you want to delete ledger ' + ledger_name + '?\n Press [y/N]') if answer.lower() == 'yes' or answer.lower() == 'y': From f8ccba11fa15c41c796b27102dbdbad02d5814ae Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Fri, 12 Feb 2021 21:33:02 +0300 Subject: [PATCH 036/100] Minor fix Signed-off-by: anton.denishchenko --- scripts/remove_ledger.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/remove_ledger.py b/scripts/remove_ledger.py index 44c595bd8..b3f0b2465 100644 --- a/scripts/remove_ledger.py +++ b/scripts/remove_ledger.py @@ -8,7 +8,7 @@ def warn(ledger_name, directories_path): - print('The follow directories will be deleted:') + print('The following directories will be deleted:') for path in directories_path: print(str(path)) @@ -31,7 +31,7 @@ def remove(ledger_name): directories_path.append(path) if not len(directories_path): - print('Doesn`t exist ledger: ' + ledger_name) + print('Ledger doesn`t exist: ' + ledger_name) elif warn(ledger_name, directories_path): for path in directories_path: From 8d0b8cc98ad8220553025d0b4872263b899f5179 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Fri, 12 Feb 2021 14:07:30 -0700 Subject: [PATCH 037/100] upgrades deps and pytest features Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 1 + indy_node/test/conftest.py | 22 +++++++++++++++---- .../test_node_control_util.py | 2 +- .../test/suspension/test_node_suspension.py | 4 ++-- indy_node/test/tools/test_nsreplay.py | 2 +- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 0044a0303..875db7e71 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,6 +34,7 @@ def testValidInputAndReturn(): takesStr('1') +# FIXME -> RTM: Fails def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/conftest.py b/indy_node/test/conftest.py index bcdc9008c..83e65795c 100644 --- a/indy_node/test/conftest.py +++ b/indy_node/test/conftest.py @@ -97,7 +97,21 @@ def _(): return _ -@pytest.fixture(scope='module') +@pytest.fixture(scope='module', name="sdk_node_theta_added") +def sdk_node_theta_added_fixture(looper, + txnPoolNodeSet, + tdir, + tconf, + sdk_pool_handle, + sdk_wallet_trustee, + allPluginsPath, + node_config_helper_class, + testNodeClass, + name=None, + services=[VALIDATOR]): + return sdk_node_theta_added(looper, nodeSet, tdir, tconf, sdk_pool_handle, sdk_wallet_trustee, allPluginsPath, node_config_helper_class, testNodeClass, name) + + def sdk_node_theta_added(looper, txnPoolNodeSet, tdir, @@ -244,21 +258,21 @@ def nodeIds(nodeSet): @pytest.fixture(scope="module") def pool_ledger(tconf, tmpdir_factory): - tdir = tmpdir_factory.mktemp('').strpath + tdir = tmpdir_factory.mktemp('tmp').strpath return Ledger(CompactMerkleTree(), dataDir=tdir) @pytest.fixture(scope="module") def domain_ledger(tconf, tmpdir_factory): - tdir = tmpdir_factory.mktemp('').strpath + tdir = tmpdir_factory.mktemp('tmp').strpath return Ledger(CompactMerkleTree(), dataDir=tdir) @pytest.fixture(scope="module") def config_ledger(tconf, tmpdir_factory): - tdir = tmpdir_factory.mktemp('').strpath + tdir = tmpdir_factory.mktemp('tmp').strpath return Ledger(CompactMerkleTree(), dataDir=tdir) diff --git a/indy_node/test/node_control_utils/test_node_control_util.py b/indy_node/test/node_control_utils/test_node_control_util.py index 0ad8344fb..f104d3155 100644 --- a/indy_node/test/node_control_utils/test_node_control_util.py +++ b/indy_node/test/node_control_utils/test_node_control_util.py @@ -127,7 +127,7 @@ def test_get_latest_pkg_version_invalid_args(): (APP_NAME, None, 'Version: 1.2.3\nVersion: 1.2.4\nVersion: 1.2.5~rc1\nVersion: 1.2.5~dev1\nVersion: 1.2.3.4.5', '1.2.5rc1'), (APP_NAME, '1.2.5', 'Version: 1.2.3\nVersion: 1.2.4\nVersion: 1.2.5~rc1\nVersion: 1.2.5~dev1\nVersion: 1.2.3.4.5', None), ], - ids=lambda s: s.replace('\n', '_').replace(' ', '_') + ids=lambda s: s.replace('\n', '_').replace(' ', '_') if s else None ) def test_get_latest_pkg_version( monkeypatch, pkg_name, upstream, output, expected): diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index 8352b345d..a5279b6b3 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,8 +13,8 @@ nodeCount = 7 -def testSuspendNode(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, - tdir, tconf, allPluginsPath): +def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, + tdir, tconf, allPluginsPath): """ Suspend a node and then cancel suspension. Suspend while suspended to test that there is no error diff --git a/indy_node/test/tools/test_nsreplay.py b/indy_node/test/tools/test_nsreplay.py index d3d9d42f3..176955d63 100644 --- a/indy_node/test/tools/test_nsreplay.py +++ b/indy_node/test/tools/test_nsreplay.py @@ -78,7 +78,7 @@ def tconf(tconf): return tconf -@pytest.yield_fixture(scope="session", autouse=True) +@pytest.fixture(scope="session", autouse=True) def warncheck(warnfilters): pass From 75c12d930263ace6931ee6dff90bf36f110f3df9 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Fri, 12 Feb 2021 14:07:30 -0700 Subject: [PATCH 038/100] upgrades deps and pytest features Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 1 + indy_node/test/conftest.py | 22 +++++++++++++++---- .../test_node_control_util.py | 2 +- .../test/suspension/test_node_suspension.py | 4 ++-- indy_node/test/tools/test_nsreplay.py | 2 +- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 0044a0303..875db7e71 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,6 +34,7 @@ def testValidInputAndReturn(): takesStr('1') +# FIXME -> RTM: Fails def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/conftest.py b/indy_node/test/conftest.py index bcdc9008c..83e65795c 100644 --- a/indy_node/test/conftest.py +++ b/indy_node/test/conftest.py @@ -97,7 +97,21 @@ def _(): return _ -@pytest.fixture(scope='module') +@pytest.fixture(scope='module', name="sdk_node_theta_added") +def sdk_node_theta_added_fixture(looper, + txnPoolNodeSet, + tdir, + tconf, + sdk_pool_handle, + sdk_wallet_trustee, + allPluginsPath, + node_config_helper_class, + testNodeClass, + name=None, + services=[VALIDATOR]): + return sdk_node_theta_added(looper, nodeSet, tdir, tconf, sdk_pool_handle, sdk_wallet_trustee, allPluginsPath, node_config_helper_class, testNodeClass, name) + + def sdk_node_theta_added(looper, txnPoolNodeSet, tdir, @@ -244,21 +258,21 @@ def nodeIds(nodeSet): @pytest.fixture(scope="module") def pool_ledger(tconf, tmpdir_factory): - tdir = tmpdir_factory.mktemp('').strpath + tdir = tmpdir_factory.mktemp('tmp').strpath return Ledger(CompactMerkleTree(), dataDir=tdir) @pytest.fixture(scope="module") def domain_ledger(tconf, tmpdir_factory): - tdir = tmpdir_factory.mktemp('').strpath + tdir = tmpdir_factory.mktemp('tmp').strpath return Ledger(CompactMerkleTree(), dataDir=tdir) @pytest.fixture(scope="module") def config_ledger(tconf, tmpdir_factory): - tdir = tmpdir_factory.mktemp('').strpath + tdir = tmpdir_factory.mktemp('tmp').strpath return Ledger(CompactMerkleTree(), dataDir=tdir) diff --git a/indy_node/test/node_control_utils/test_node_control_util.py b/indy_node/test/node_control_utils/test_node_control_util.py index 0ad8344fb..f104d3155 100644 --- a/indy_node/test/node_control_utils/test_node_control_util.py +++ b/indy_node/test/node_control_utils/test_node_control_util.py @@ -127,7 +127,7 @@ def test_get_latest_pkg_version_invalid_args(): (APP_NAME, None, 'Version: 1.2.3\nVersion: 1.2.4\nVersion: 1.2.5~rc1\nVersion: 1.2.5~dev1\nVersion: 1.2.3.4.5', '1.2.5rc1'), (APP_NAME, '1.2.5', 'Version: 1.2.3\nVersion: 1.2.4\nVersion: 1.2.5~rc1\nVersion: 1.2.5~dev1\nVersion: 1.2.3.4.5', None), ], - ids=lambda s: s.replace('\n', '_').replace(' ', '_') + ids=lambda s: s.replace('\n', '_').replace(' ', '_') if s else None ) def test_get_latest_pkg_version( monkeypatch, pkg_name, upstream, output, expected): diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index 8352b345d..a5279b6b3 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,8 +13,8 @@ nodeCount = 7 -def testSuspendNode(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, - tdir, tconf, allPluginsPath): +def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, + tdir, tconf, allPluginsPath): """ Suspend a node and then cancel suspension. Suspend while suspended to test that there is no error diff --git a/indy_node/test/tools/test_nsreplay.py b/indy_node/test/tools/test_nsreplay.py index d3d9d42f3..176955d63 100644 --- a/indy_node/test/tools/test_nsreplay.py +++ b/indy_node/test/tools/test_nsreplay.py @@ -78,7 +78,7 @@ def tconf(tconf): return tconf -@pytest.yield_fixture(scope="session", autouse=True) +@pytest.fixture(scope="session", autouse=True) def warncheck(warnfilters): pass From 263c38cce21e3d8d586892c0a81bbdaf066bef64 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Mon, 15 Feb 2021 01:10:35 +0300 Subject: [PATCH 039/100] Remove extra white spaces Signed-off-by: anton.denishchenko --- scripts/remove_ledger.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/remove_ledger.py b/scripts/remove_ledger.py index b3f0b2465..c8d36e4cf 100644 --- a/scripts/remove_ledger.py +++ b/scripts/remove_ledger.py @@ -9,16 +9,16 @@ def warn(ledger_name, directories_path): print('The following directories will be deleted:') - + for path in directories_path: print(str(path)) - + print('Deleting a ledger is an irrevocable operation.\nProceed only if you know the consequences.') answer = input('Do you want to delete ledger ' + ledger_name + '?\n Press [y/N]') - + if answer.lower() == 'yes' or answer.lower() == 'y': return True - + return False @@ -29,15 +29,15 @@ def remove(ledger_name): for path in Path(config_helper.ledger_data_dir).rglob(ledger_name + "_*"): directories_path.append(path) - + if not len(directories_path): print('Ledger doesn`t exist: ' + ledger_name) - + elif warn(ledger_name, directories_path): for path in directories_path: shutil.rmtree(str(path)) print('Ledger removed successfully!') - + else: print('Can`t delete built in ledger: ' + ledger_name) From c09221c2554e0014aed981b584850fb0627a60a6 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Tue, 16 Feb 2021 15:03:13 +0300 Subject: [PATCH 040/100] Bump plenum and fix bump libindy Signed-off-by: anton.denishchenko --- .github/workflows/build/Dockerfile | 2 +- ci/ubuntu.dockerfile | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build/Dockerfile b/.github/workflows/build/Dockerfile index 0a1ce13c6..a53e03c44 100644 --- a/.github/workflows/build/Dockerfile +++ b/.github/workflows/build/Dockerfile @@ -4,7 +4,7 @@ LABEL maintainer="Hyperledger " RUN apt-get update -y && apt-get install -y \ python3-nacl \ libindy-crypto=0.4.5 \ - libindy=1.13.0~1420 \ + libindy=1.15.0~1618-xenial \ # rocksdb python wrapper libbz2-dev \ zlib1g-dev \ diff --git a/ci/ubuntu.dockerfile b/ci/ubuntu.dockerfile index 46ea2eda4..8fa83c8b3 100644 --- a/ci/ubuntu.dockerfile +++ b/ci/ubuntu.dockerfile @@ -8,7 +8,7 @@ ARG venv=venv RUN apt-get update -y && apt-get install -y \ python3-nacl \ ursa=0.3.2-2 \ - libindy=1.13.0~1420 \ + libindy=1.15.0~1618-xenial \ # rocksdb python wrapper libbz2-dev \ zlib1g-dev \ diff --git a/setup.py b/setup.py index e8fdb3788..d16024a3f 100644 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ data_files=[( (BASE_DIR, ['data/nssm_original.exe']) )], - install_requires=['indy-plenum==1.13.0.dev1032', + install_requires=['indy-plenum==1.13.0.dev1034', 'timeout-decorator==0.4.0', 'distro==1.3.0'], setup_requires=['pytest-runner'], From 10fb439b7c3dcb7f55fad9ef06ecb11cb800aa51 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 16 Feb 2021 06:56:12 -0700 Subject: [PATCH 041/100] another broken test Signed-off-by: Ryan Marsh --- .../upgrade/test_node_control_tool_processes_invalid_data.py | 2 ++ indy_node/test/upgrade/test_upgrader.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index c90d1d842..bb65973b5 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -18,6 +18,7 @@ def tconf(tconf, tdir): yield tconf +# FIXME -> RTM: Test Failed def test_node_control_tool_processes_invalid_json( monkeypatch, tdir, tconf ): @@ -39,6 +40,7 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) +# FIXME -> RTM: Test Failed def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/upgrade/test_upgrader.py b/indy_node/test/upgrade/test_upgrader.py index 52344e9a6..63d1299fb 100644 --- a/indy_node/test/upgrade/test_upgrader.py +++ b/indy_node/test/upgrade/test_upgrader.py @@ -61,7 +61,7 @@ def wrapped(*x, **y): ) ) - +# FIXME -> RTM: Test Failed @pytest.mark.parametrize( 'lower_version,higher_version', [ From 2b600ee7229b1f0e7ca7494089e9471ac876088c Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 16 Feb 2021 06:56:12 -0700 Subject: [PATCH 042/100] another broken test Signed-off-by: Ryan Marsh --- .../upgrade/test_node_control_tool_processes_invalid_data.py | 2 ++ indy_node/test/upgrade/test_upgrader.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index c90d1d842..bb65973b5 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -18,6 +18,7 @@ def tconf(tconf, tdir): yield tconf +# FIXME -> RTM: Test Failed def test_node_control_tool_processes_invalid_json( monkeypatch, tdir, tconf ): @@ -39,6 +40,7 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) +# FIXME -> RTM: Test Failed def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/upgrade/test_upgrader.py b/indy_node/test/upgrade/test_upgrader.py index 52344e9a6..63d1299fb 100644 --- a/indy_node/test/upgrade/test_upgrader.py +++ b/indy_node/test/upgrade/test_upgrader.py @@ -61,7 +61,7 @@ def wrapped(*x, **y): ) ) - +# FIXME -> RTM: Test Failed @pytest.mark.parametrize( 'lower_version,higher_version', [ From 9959164eb02b0aac43110055a8e3f43c5e30587a Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 16 Feb 2021 10:36:25 -0700 Subject: [PATCH 043/100] : --- indy_common/test/test_strict_types.py | 2 +- .../test/catchup/test_requests_post_multiple_new_nodes.py | 1 + indy_node/test/catchup/test_requests_post_new_node_catchup.py | 1 + indy_node/test/catchup/test_state_recovering.py | 1 + indy_node/test/nym_txn/test_demote_network_monitor.py | 2 ++ indy_node/test/suspension/test_node_suspension.py | 4 +++- .../upgrade/test_node_control_tool_processes_invalid_data.py | 4 ++-- indy_node/test/validator_info/test_validator_info_command.py | 1 + indy_node/test/validator_info/test_validator_info_handler.py | 1 + 9 files changed, 13 insertions(+), 4 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 875db7e71..81143e3c1 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,7 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: Fails +# FIXME -> RTM: Failing Test def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py index 0816456f8..ccc9c2bd9 100644 --- a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py +++ b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py @@ -5,6 +5,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym +#FIXME -> RTM: Failing tests in 'catchup' def test_requests_post_multiple_new_nodes( looper, nodeSet, diff --git a/indy_node/test/catchup/test_requests_post_new_node_catchup.py b/indy_node/test/catchup/test_requests_post_new_node_catchup.py index 5b499b3b2..0cdd856a9 100644 --- a/indy_node/test/catchup/test_requests_post_new_node_catchup.py +++ b/indy_node/test/catchup/test_requests_post_new_node_catchup.py @@ -11,6 +11,7 @@ from indy_common.config_helper import NodeConfigHelper +#FIXME -> RTM: Failing tests in 'catchup' def test_new_node_catchup_update_projection(looper, nodeSet, tconf, tdir, sdk_pool_handle, diff --git a/indy_node/test/catchup/test_state_recovering.py b/indy_node/test/catchup/test_state_recovering.py index 95f0ff53e..83e56cb89 100644 --- a/indy_node/test/catchup/test_state_recovering.py +++ b/indy_node/test/catchup/test_state_recovering.py @@ -87,6 +87,7 @@ def send_auth_rule(looper, sig_count=1).as_dict) +#FIXME -> RTM: Failing tests in 'catchup' def test_state_recovering_for_auth_rule(nodeSet, looper, sdk_pool_handle, sdk_wallet_steward, sdk_wallet_trustee, tdir, tconf, diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index 71c635e19..f5def97d4 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,6 +9,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym +#FIXME -> RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, @@ -32,6 +33,7 @@ def test_network_monitor_suspension_by_another_steward(looper, req = sdk_sign_and_submit_op(looper, sdk_pool_handle, (sdk_wallet_handle, new_steward_did), op) sdk_get_and_check_replies(looper, [req]) +#Fixme -> RTM: Go from here """Check that get_validator_info command works for NETWORK_MONITOR role""" sdk_get_validator_info(looper, (sdk_wallet_handle, new_network_monitor_did), sdk_pool_handle) diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index a5279b6b3..d3201776d 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,8 +13,9 @@ nodeCount = 7 +# FIXME -> RTM: Failing test def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, - tdir, tconf, allPluginsPath): + tdir, tconf, allPluginsPath): """ Suspend a node and then cancel suspension. Suspend while suspended to test that there is no error @@ -51,6 +52,7 @@ def _wait_view_change_finish(looper, nodes, view_no): ensureElectionsDone(looper=looper, nodes=nodes) +# FIXME -> RTM: Failing test def testDemoteNodeWhichWasNeverActive(looper, nodeSet, sdk_pool_handle, sdk_wallet_trustee, tdir, tconf, allPluginsPath): diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index bb65973b5..9347b20f5 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -18,7 +18,7 @@ def tconf(tconf, tdir): yield tconf -# FIXME -> RTM: Test Failed +# FIXME -> RTM: Failing test def test_node_control_tool_processes_invalid_json( monkeypatch, tdir, tconf ): @@ -40,7 +40,7 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) -# FIXME -> RTM: Test Failed +# FIXME -> RTM: Failing test def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/validator_info/test_validator_info_command.py b/indy_node/test/validator_info/test_validator_info_command.py index 97785d41e..597c50ffb 100644 --- a/indy_node/test/validator_info/test_validator_info_command.py +++ b/indy_node/test/validator_info/test_validator_info_command.py @@ -11,6 +11,7 @@ sdk_get_reply, sdk_send_signed_requests, sdk_get_and_check_replies +# FIXME -> RTM: Failing test def test_validator_info_command( sdk_pool_handle, sdk_wallet_trustee, looper): req, resp = sdk_get_validator_info(looper, diff --git a/indy_node/test/validator_info/test_validator_info_handler.py b/indy_node/test/validator_info/test_validator_info_handler.py index 7a02c7b7e..1bc3c5a31 100644 --- a/indy_node/test/validator_info/test_validator_info_handler.py +++ b/indy_node/test/validator_info/test_validator_info_handler.py @@ -6,6 +6,7 @@ from plenum.test.helper import sdk_gen_request, sdk_sign_request_objects +# FIXME -> RTM: Failing Test def test_validator_info_handler(monkeypatch, sdk_wallet_trustee, txnPoolNodeSet, From 8a5ed3e93e6177bc060d7be8c5d12a43471a1634 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 16 Feb 2021 10:36:25 -0700 Subject: [PATCH 044/100] : Signed-off-by: Ryan Marsh Sign-off-executed-by: toktar Approved-at: behalf --- indy_common/test/test_strict_types.py | 2 +- .../test/catchup/test_requests_post_multiple_new_nodes.py | 1 + indy_node/test/catchup/test_requests_post_new_node_catchup.py | 1 + indy_node/test/catchup/test_state_recovering.py | 1 + indy_node/test/nym_txn/test_demote_network_monitor.py | 2 ++ indy_node/test/suspension/test_node_suspension.py | 4 +++- .../upgrade/test_node_control_tool_processes_invalid_data.py | 4 ++-- indy_node/test/validator_info/test_validator_info_command.py | 1 + indy_node/test/validator_info/test_validator_info_handler.py | 1 + 9 files changed, 13 insertions(+), 4 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 875db7e71..81143e3c1 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,7 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: Fails +# FIXME -> RTM: Failing Test def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py index 0816456f8..ccc9c2bd9 100644 --- a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py +++ b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py @@ -5,6 +5,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym +#FIXME -> RTM: Failing tests in 'catchup' def test_requests_post_multiple_new_nodes( looper, nodeSet, diff --git a/indy_node/test/catchup/test_requests_post_new_node_catchup.py b/indy_node/test/catchup/test_requests_post_new_node_catchup.py index 5b499b3b2..0cdd856a9 100644 --- a/indy_node/test/catchup/test_requests_post_new_node_catchup.py +++ b/indy_node/test/catchup/test_requests_post_new_node_catchup.py @@ -11,6 +11,7 @@ from indy_common.config_helper import NodeConfigHelper +#FIXME -> RTM: Failing tests in 'catchup' def test_new_node_catchup_update_projection(looper, nodeSet, tconf, tdir, sdk_pool_handle, diff --git a/indy_node/test/catchup/test_state_recovering.py b/indy_node/test/catchup/test_state_recovering.py index 95f0ff53e..83e56cb89 100644 --- a/indy_node/test/catchup/test_state_recovering.py +++ b/indy_node/test/catchup/test_state_recovering.py @@ -87,6 +87,7 @@ def send_auth_rule(looper, sig_count=1).as_dict) +#FIXME -> RTM: Failing tests in 'catchup' def test_state_recovering_for_auth_rule(nodeSet, looper, sdk_pool_handle, sdk_wallet_steward, sdk_wallet_trustee, tdir, tconf, diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index 71c635e19..f5def97d4 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,6 +9,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym +#FIXME -> RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, @@ -32,6 +33,7 @@ def test_network_monitor_suspension_by_another_steward(looper, req = sdk_sign_and_submit_op(looper, sdk_pool_handle, (sdk_wallet_handle, new_steward_did), op) sdk_get_and_check_replies(looper, [req]) +#Fixme -> RTM: Go from here """Check that get_validator_info command works for NETWORK_MONITOR role""" sdk_get_validator_info(looper, (sdk_wallet_handle, new_network_monitor_did), sdk_pool_handle) diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index a5279b6b3..d3201776d 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,8 +13,9 @@ nodeCount = 7 +# FIXME -> RTM: Failing test def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, - tdir, tconf, allPluginsPath): + tdir, tconf, allPluginsPath): """ Suspend a node and then cancel suspension. Suspend while suspended to test that there is no error @@ -51,6 +52,7 @@ def _wait_view_change_finish(looper, nodes, view_no): ensureElectionsDone(looper=looper, nodes=nodes) +# FIXME -> RTM: Failing test def testDemoteNodeWhichWasNeverActive(looper, nodeSet, sdk_pool_handle, sdk_wallet_trustee, tdir, tconf, allPluginsPath): diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index bb65973b5..9347b20f5 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -18,7 +18,7 @@ def tconf(tconf, tdir): yield tconf -# FIXME -> RTM: Test Failed +# FIXME -> RTM: Failing test def test_node_control_tool_processes_invalid_json( monkeypatch, tdir, tconf ): @@ -40,7 +40,7 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) -# FIXME -> RTM: Test Failed +# FIXME -> RTM: Failing test def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/validator_info/test_validator_info_command.py b/indy_node/test/validator_info/test_validator_info_command.py index 97785d41e..597c50ffb 100644 --- a/indy_node/test/validator_info/test_validator_info_command.py +++ b/indy_node/test/validator_info/test_validator_info_command.py @@ -11,6 +11,7 @@ sdk_get_reply, sdk_send_signed_requests, sdk_get_and_check_replies +# FIXME -> RTM: Failing test def test_validator_info_command( sdk_pool_handle, sdk_wallet_trustee, looper): req, resp = sdk_get_validator_info(looper, diff --git a/indy_node/test/validator_info/test_validator_info_handler.py b/indy_node/test/validator_info/test_validator_info_handler.py index 7a02c7b7e..1bc3c5a31 100644 --- a/indy_node/test/validator_info/test_validator_info_handler.py +++ b/indy_node/test/validator_info/test_validator_info_handler.py @@ -6,6 +6,7 @@ from plenum.test.helper import sdk_gen_request, sdk_sign_request_objects +# FIXME -> RTM: Failing Test def test_validator_info_handler(monkeypatch, sdk_wallet_trustee, txnPoolNodeSet, From 30ffcb04ac5b037b19b3332f8eff372d31df69c9 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 16 Feb 2021 13:27:45 -0700 Subject: [PATCH 045/100] adds failing tests to upgrade Signed-off-by: Ryan Marsh --- .../upgrade/test_node_control_tool_processes_invalid_data.py | 2 +- indy_node/test/validator_info/test_validator_info.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index 9347b20f5..d6d17188e 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -40,7 +40,7 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) -# FIXME -> RTM: Failing test +# FIXME -> RTM: Failing test (I think mark.parametrize) def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/validator_info/test_validator_info.py b/indy_node/test/validator_info/test_validator_info.py index 863524b4c..59e9e0b0b 100644 --- a/indy_node/test/validator_info/test_validator_info.py +++ b/indy_node/test/validator_info/test_validator_info.py @@ -16,16 +16,18 @@ STATUS_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) INFO_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) - +# FIXME -> RTM: Failing test def test_validator_info_file_schema_is_valid(info): assert isinstance(info, dict) assert 'config' in info['Node_info']['Metrics']['transaction-count'] +# FIXME -> RTM: Failing test def test_validator_info_file_metrics_count_ledger_field_valid(info): assert info['Node_info']['Metrics']['transaction-count']['config'] == 0 +# FIXME -> RTM: Failing test def test_validator_info_bls_key_field_valid(node, info): assert info['Node_info']['BLS_key'] From 4bb8043a455ba53a2aed8d5c290459f1d53d3998 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 16 Feb 2021 13:27:45 -0700 Subject: [PATCH 046/100] adds failing tests to upgrade Signed-off-by: Ryan Marsh --- .../upgrade/test_node_control_tool_processes_invalid_data.py | 2 +- indy_node/test/validator_info/test_validator_info.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index 9347b20f5..d6d17188e 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -40,7 +40,7 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) -# FIXME -> RTM: Failing test +# FIXME -> RTM: Failing test (I think mark.parametrize) def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/validator_info/test_validator_info.py b/indy_node/test/validator_info/test_validator_info.py index 863524b4c..59e9e0b0b 100644 --- a/indy_node/test/validator_info/test_validator_info.py +++ b/indy_node/test/validator_info/test_validator_info.py @@ -16,16 +16,18 @@ STATUS_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) INFO_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) - +# FIXME -> RTM: Failing test def test_validator_info_file_schema_is_valid(info): assert isinstance(info, dict) assert 'config' in info['Node_info']['Metrics']['transaction-count'] +# FIXME -> RTM: Failing test def test_validator_info_file_metrics_count_ledger_field_valid(info): assert info['Node_info']['Metrics']['transaction-count']['config'] == 0 +# FIXME -> RTM: Failing test def test_validator_info_bls_key_field_valid(node, info): assert info['Node_info']['BLS_key'] From 294af1d1e92e5c425fb9e4b7ece9f65c9bdb0943 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Wed, 17 Feb 2021 15:50:17 -0700 Subject: [PATCH 047/100] . Signed-off-by: Ryan Marsh --- indy_node/test/catchup/test_requests_post_multiple_new_nodes.py | 2 +- indy_node/test/catchup/test_requests_post_new_node_catchup.py | 2 +- indy_node/test/catchup/test_state_recovering.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py index ccc9c2bd9..191f7c3f1 100644 --- a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py +++ b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py @@ -5,7 +5,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing tests in 'catchup' +#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_requests_post_multiple_new_nodes( looper, nodeSet, diff --git a/indy_node/test/catchup/test_requests_post_new_node_catchup.py b/indy_node/test/catchup/test_requests_post_new_node_catchup.py index 0cdd856a9..4473cf1ec 100644 --- a/indy_node/test/catchup/test_requests_post_new_node_catchup.py +++ b/indy_node/test/catchup/test_requests_post_new_node_catchup.py @@ -11,7 +11,7 @@ from indy_common.config_helper import NodeConfigHelper -#FIXME -> RTM: Failing tests in 'catchup' +#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_new_node_catchup_update_projection(looper, nodeSet, tconf, tdir, sdk_pool_handle, diff --git a/indy_node/test/catchup/test_state_recovering.py b/indy_node/test/catchup/test_state_recovering.py index 83e56cb89..d0216526b 100644 --- a/indy_node/test/catchup/test_state_recovering.py +++ b/indy_node/test/catchup/test_state_recovering.py @@ -87,7 +87,7 @@ def send_auth_rule(looper, sig_count=1).as_dict) -#FIXME -> RTM: Failing tests in 'catchup' +#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_state_recovering_for_auth_rule(nodeSet, looper, sdk_pool_handle, sdk_wallet_steward, sdk_wallet_trustee, tdir, tconf, From 93c89e91c2fce89958268c07d1f41865f729d410 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Wed, 17 Feb 2021 15:50:17 -0700 Subject: [PATCH 048/100] . Signed-off-by: Ryan Marsh --- indy_node/test/catchup/test_requests_post_multiple_new_nodes.py | 2 +- indy_node/test/catchup/test_requests_post_new_node_catchup.py | 2 +- indy_node/test/catchup/test_state_recovering.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py index ccc9c2bd9..191f7c3f1 100644 --- a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py +++ b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py @@ -5,7 +5,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing tests in 'catchup' +#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_requests_post_multiple_new_nodes( looper, nodeSet, diff --git a/indy_node/test/catchup/test_requests_post_new_node_catchup.py b/indy_node/test/catchup/test_requests_post_new_node_catchup.py index 0cdd856a9..4473cf1ec 100644 --- a/indy_node/test/catchup/test_requests_post_new_node_catchup.py +++ b/indy_node/test/catchup/test_requests_post_new_node_catchup.py @@ -11,7 +11,7 @@ from indy_common.config_helper import NodeConfigHelper -#FIXME -> RTM: Failing tests in 'catchup' +#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_new_node_catchup_update_projection(looper, nodeSet, tconf, tdir, sdk_pool_handle, diff --git a/indy_node/test/catchup/test_state_recovering.py b/indy_node/test/catchup/test_state_recovering.py index 83e56cb89..d0216526b 100644 --- a/indy_node/test/catchup/test_state_recovering.py +++ b/indy_node/test/catchup/test_state_recovering.py @@ -87,7 +87,7 @@ def send_auth_rule(looper, sig_count=1).as_dict) -#FIXME -> RTM: Failing tests in 'catchup' +#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_state_recovering_for_auth_rule(nodeSet, looper, sdk_pool_handle, sdk_wallet_steward, sdk_wallet_trustee, tdir, tconf, From 2ade6ea4fb85164bbd305c578379d226ff872a01 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Thu, 18 Feb 2021 12:38:12 +0300 Subject: [PATCH 049/100] Bump libindy version for python wrapper Signed-off-by: anton.denishchenko --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index d16024a3f..76583685d 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ BASE_DIR = os.path.join(os.path.expanduser("~"), ".indy") tests_require = ['attrs==19.1.0', 'pytest==3.3.1', 'pytest-xdist==1.22.1', 'pytest-forked==0.2', - 'python3-indy==1.15.0', 'pytest-asyncio==0.8.0'] + 'python3-indy==1.15.0-dev-1618', 'pytest-asyncio==0.8.0'] setup( name=metadata['__title__'], From dc0d8bb7addf2870a0784f6ac14505e2a7b95dde Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Thu, 18 Feb 2021 12:51:19 +0300 Subject: [PATCH 050/100] Fix pip version for ci Signed-off-by: anton.denishchenko --- Jenkinsfile.ci | 1 + 1 file changed, 1 insertion(+) diff --git a/Jenkinsfile.ci b/Jenkinsfile.ci index bdc2a1b5a..d3d8da420 100644 --- a/Jenkinsfile.ci +++ b/Jenkinsfile.ci @@ -73,6 +73,7 @@ def withTestEnv(body) { buildDocker("hyperledger/indy-node-ci", "ci/ubuntu.dockerfile ci").inside { echo 'Test: Install dependencies' + sh 'pip install pip==10.0.0' install() body.call('python') } From 749ea140c0f7ae10693cd41164ad8b2f46e27a1c Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 18 Feb 2021 07:00:07 -0700 Subject: [PATCH 051/100] changes get_marker() to get_closest_marker() Signed-off-by: Ryan Marsh --- indy_node/test/upgrade/test_upgrader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indy_node/test/upgrade/test_upgrader.py b/indy_node/test/upgrade/test_upgrader.py index 63d1299fb..6828aeaad 100644 --- a/indy_node/test/upgrade/test_upgrader.py +++ b/indy_node/test/upgrade/test_upgrader.py @@ -38,7 +38,7 @@ def wrapped(*x, **y): return pkg_version(pkg_name, version) return wrapped - marker = request.node.get_marker('pkg_info') + marker = request.node.get_closest_marker('pkg_info') if marker: assert len(marker.args) > 1 monkeypatch.setattr( @@ -50,7 +50,7 @@ def wrapped(*x, **y): ) ) - marker = request.node.get_marker('latest_pkg_ver') + marker = request.node.get_closest_marker('latest_pkg_ver') if marker: assert len(marker.args) > 0 monkeypatch.setattr( From 45d2b74a07b8918a88fe5bb5e3bc19d963924d8f Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 18 Feb 2021 07:00:07 -0700 Subject: [PATCH 052/100] changes get_marker() to get_closest_marker() Signed-off-by: Ryan Marsh --- indy_node/test/upgrade/test_upgrader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indy_node/test/upgrade/test_upgrader.py b/indy_node/test/upgrade/test_upgrader.py index 63d1299fb..6828aeaad 100644 --- a/indy_node/test/upgrade/test_upgrader.py +++ b/indy_node/test/upgrade/test_upgrader.py @@ -38,7 +38,7 @@ def wrapped(*x, **y): return pkg_version(pkg_name, version) return wrapped - marker = request.node.get_marker('pkg_info') + marker = request.node.get_closest_marker('pkg_info') if marker: assert len(marker.args) > 1 monkeypatch.setattr( @@ -50,7 +50,7 @@ def wrapped(*x, **y): ) ) - marker = request.node.get_marker('latest_pkg_ver') + marker = request.node.get_closest_marker('latest_pkg_ver') if marker: assert len(marker.args) > 0 monkeypatch.setattr( From 4db3cc075b0bbb1597e501c5c898a18e45c02d06 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 18 Feb 2021 14:19:20 -0700 Subject: [PATCH 053/100] fixes multiple broken tests around newer pytest version Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 2 +- indy_node/test/nym_txn/test_demote_network_monitor.py | 3 +-- indy_node/test/suspension/test_node_suspension.py | 3 +-- .../upgrade/test_node_control_tool_processes_invalid_data.py | 2 -- indy_node/test/upgrade/test_upgrader.py | 2 +- indy_node/test/validator_info/test_validator_info.py | 4 +--- indy_node/test/validator_info/test_validator_info_command.py | 2 +- indy_node/test/validator_info/test_validator_info_handler.py | 2 +- 8 files changed, 7 insertions(+), 13 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 81143e3c1..23c1f1afe 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,7 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: Failing Test +# FIXME -> (needs looking at) RTM: Failing Test def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index f5def97d4..20e0b201b 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,7 +9,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing Test +#FIXME -> (needs looking at) RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, @@ -33,7 +33,6 @@ def test_network_monitor_suspension_by_another_steward(looper, req = sdk_sign_and_submit_op(looper, sdk_pool_handle, (sdk_wallet_handle, new_steward_did), op) sdk_get_and_check_replies(looper, [req]) -#Fixme -> RTM: Go from here """Check that get_validator_info command works for NETWORK_MONITOR role""" sdk_get_validator_info(looper, (sdk_wallet_handle, new_network_monitor_did), sdk_pool_handle) diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index d3201776d..5d1f7002d 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,7 +13,7 @@ nodeCount = 7 -# FIXME -> RTM: Failing test +# FIXME -> RTM: Failing test (passes individually) def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, tdir, tconf, allPluginsPath): """ @@ -52,7 +52,6 @@ def _wait_view_change_finish(looper, nodes, view_no): ensureElectionsDone(looper=looper, nodes=nodes) -# FIXME -> RTM: Failing test def testDemoteNodeWhichWasNeverActive(looper, nodeSet, sdk_pool_handle, sdk_wallet_trustee, tdir, tconf, allPluginsPath): diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index d6d17188e..c90d1d842 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -18,7 +18,6 @@ def tconf(tconf, tdir): yield tconf -# FIXME -> RTM: Failing test def test_node_control_tool_processes_invalid_json( monkeypatch, tdir, tconf ): @@ -40,7 +39,6 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) -# FIXME -> RTM: Failing test (I think mark.parametrize) def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/upgrade/test_upgrader.py b/indy_node/test/upgrade/test_upgrader.py index 6828aeaad..78f5a53fb 100644 --- a/indy_node/test/upgrade/test_upgrader.py +++ b/indy_node/test/upgrade/test_upgrader.py @@ -61,7 +61,7 @@ def wrapped(*x, **y): ) ) -# FIXME -> RTM: Test Failed + @pytest.mark.parametrize( 'lower_version,higher_version', [ diff --git a/indy_node/test/validator_info/test_validator_info.py b/indy_node/test/validator_info/test_validator_info.py index 59e9e0b0b..863524b4c 100644 --- a/indy_node/test/validator_info/test_validator_info.py +++ b/indy_node/test/validator_info/test_validator_info.py @@ -16,18 +16,16 @@ STATUS_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) INFO_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) -# FIXME -> RTM: Failing test + def test_validator_info_file_schema_is_valid(info): assert isinstance(info, dict) assert 'config' in info['Node_info']['Metrics']['transaction-count'] -# FIXME -> RTM: Failing test def test_validator_info_file_metrics_count_ledger_field_valid(info): assert info['Node_info']['Metrics']['transaction-count']['config'] == 0 -# FIXME -> RTM: Failing test def test_validator_info_bls_key_field_valid(node, info): assert info['Node_info']['BLS_key'] diff --git a/indy_node/test/validator_info/test_validator_info_command.py b/indy_node/test/validator_info/test_validator_info_command.py index 597c50ffb..0a6fff05c 100644 --- a/indy_node/test/validator_info/test_validator_info_command.py +++ b/indy_node/test/validator_info/test_validator_info_command.py @@ -11,7 +11,7 @@ sdk_get_reply, sdk_send_signed_requests, sdk_get_and_check_replies -# FIXME -> RTM: Failing test +# FIXME -> RTM: Failing test (needs help) def test_validator_info_command( sdk_pool_handle, sdk_wallet_trustee, looper): req, resp = sdk_get_validator_info(looper, diff --git a/indy_node/test/validator_info/test_validator_info_handler.py b/indy_node/test/validator_info/test_validator_info_handler.py index 1bc3c5a31..a81f880e8 100644 --- a/indy_node/test/validator_info/test_validator_info_handler.py +++ b/indy_node/test/validator_info/test_validator_info_handler.py @@ -6,7 +6,7 @@ from plenum.test.helper import sdk_gen_request, sdk_sign_request_objects -# FIXME -> RTM: Failing Test +# FIXME -> RTM: Failing Test (needs help) def test_validator_info_handler(monkeypatch, sdk_wallet_trustee, txnPoolNodeSet, From 8462ec8fac9384b5d2a99b64b8f854b32aa35b27 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 18 Feb 2021 14:19:20 -0700 Subject: [PATCH 054/100] fixes multiple broken tests around newer pytest version Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 2 +- indy_node/test/nym_txn/test_demote_network_monitor.py | 3 +-- indy_node/test/suspension/test_node_suspension.py | 3 +-- .../upgrade/test_node_control_tool_processes_invalid_data.py | 2 -- indy_node/test/upgrade/test_upgrader.py | 2 +- indy_node/test/validator_info/test_validator_info.py | 4 +--- indy_node/test/validator_info/test_validator_info_command.py | 2 +- indy_node/test/validator_info/test_validator_info_handler.py | 2 +- 8 files changed, 7 insertions(+), 13 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 81143e3c1..23c1f1afe 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,7 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: Failing Test +# FIXME -> (needs looking at) RTM: Failing Test def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index f5def97d4..20e0b201b 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,7 +9,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing Test +#FIXME -> (needs looking at) RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, @@ -33,7 +33,6 @@ def test_network_monitor_suspension_by_another_steward(looper, req = sdk_sign_and_submit_op(looper, sdk_pool_handle, (sdk_wallet_handle, new_steward_did), op) sdk_get_and_check_replies(looper, [req]) -#Fixme -> RTM: Go from here """Check that get_validator_info command works for NETWORK_MONITOR role""" sdk_get_validator_info(looper, (sdk_wallet_handle, new_network_monitor_did), sdk_pool_handle) diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index d3201776d..5d1f7002d 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,7 +13,7 @@ nodeCount = 7 -# FIXME -> RTM: Failing test +# FIXME -> RTM: Failing test (passes individually) def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, tdir, tconf, allPluginsPath): """ @@ -52,7 +52,6 @@ def _wait_view_change_finish(looper, nodes, view_no): ensureElectionsDone(looper=looper, nodes=nodes) -# FIXME -> RTM: Failing test def testDemoteNodeWhichWasNeverActive(looper, nodeSet, sdk_pool_handle, sdk_wallet_trustee, tdir, tconf, allPluginsPath): diff --git a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py index d6d17188e..c90d1d842 100644 --- a/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py +++ b/indy_node/test/upgrade/test_node_control_tool_processes_invalid_data.py @@ -18,7 +18,6 @@ def tconf(tconf, tdir): yield tconf -# FIXME -> RTM: Failing test def test_node_control_tool_processes_invalid_json( monkeypatch, tdir, tconf ): @@ -40,7 +39,6 @@ def patch(tool): (APP_NAME, '1.2.3.4.5'), ] ) -# FIXME -> RTM: Failing test (I think mark.parametrize) def test_node_control_tool_processes_invalid_version( monkeypatch, tdir, tconf, pkg_name, version ): diff --git a/indy_node/test/upgrade/test_upgrader.py b/indy_node/test/upgrade/test_upgrader.py index 6828aeaad..78f5a53fb 100644 --- a/indy_node/test/upgrade/test_upgrader.py +++ b/indy_node/test/upgrade/test_upgrader.py @@ -61,7 +61,7 @@ def wrapped(*x, **y): ) ) -# FIXME -> RTM: Test Failed + @pytest.mark.parametrize( 'lower_version,higher_version', [ diff --git a/indy_node/test/validator_info/test_validator_info.py b/indy_node/test/validator_info/test_validator_info.py index 59e9e0b0b..863524b4c 100644 --- a/indy_node/test/validator_info/test_validator_info.py +++ b/indy_node/test/validator_info/test_validator_info.py @@ -16,18 +16,16 @@ STATUS_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) INFO_FILENAME = '{}_info.json'.format(TEST_NODE_NAME.lower()) -# FIXME -> RTM: Failing test + def test_validator_info_file_schema_is_valid(info): assert isinstance(info, dict) assert 'config' in info['Node_info']['Metrics']['transaction-count'] -# FIXME -> RTM: Failing test def test_validator_info_file_metrics_count_ledger_field_valid(info): assert info['Node_info']['Metrics']['transaction-count']['config'] == 0 -# FIXME -> RTM: Failing test def test_validator_info_bls_key_field_valid(node, info): assert info['Node_info']['BLS_key'] diff --git a/indy_node/test/validator_info/test_validator_info_command.py b/indy_node/test/validator_info/test_validator_info_command.py index 597c50ffb..0a6fff05c 100644 --- a/indy_node/test/validator_info/test_validator_info_command.py +++ b/indy_node/test/validator_info/test_validator_info_command.py @@ -11,7 +11,7 @@ sdk_get_reply, sdk_send_signed_requests, sdk_get_and_check_replies -# FIXME -> RTM: Failing test +# FIXME -> RTM: Failing test (needs help) def test_validator_info_command( sdk_pool_handle, sdk_wallet_trustee, looper): req, resp = sdk_get_validator_info(looper, diff --git a/indy_node/test/validator_info/test_validator_info_handler.py b/indy_node/test/validator_info/test_validator_info_handler.py index 1bc3c5a31..a81f880e8 100644 --- a/indy_node/test/validator_info/test_validator_info_handler.py +++ b/indy_node/test/validator_info/test_validator_info_handler.py @@ -6,7 +6,7 @@ from plenum.test.helper import sdk_gen_request, sdk_sign_request_objects -# FIXME -> RTM: Failing Test +# FIXME -> RTM: Failing Test (needs help) def test_validator_info_handler(monkeypatch, sdk_wallet_trustee, txnPoolNodeSet, From f809114f3c5450109b6b4325c9f326bc75aaaebe Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Fri, 19 Feb 2021 11:30:34 +0300 Subject: [PATCH 055/100] Pin pip version for CD Signed-off-by: anton.denishchenko --- Jenkinsfile.cd | 1 + 1 file changed, 1 insertion(+) diff --git a/Jenkinsfile.cd b/Jenkinsfile.cd index 10db63458..e042665fa 100644 --- a/Jenkinsfile.cd +++ b/Jenkinsfile.cd @@ -17,6 +17,7 @@ def nodeTestUbuntu = { testEnv.inside('--network host') { echo 'Ubuntu Test: Install dependencies' + sh 'pip install pip==10.0.0' testHelpers.install() echo 'Ubuntu Test: Test' From bc995f5c3f048571c9368d9b63a96c1946ad79a2 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Fri, 19 Feb 2021 16:17:21 +0300 Subject: [PATCH 056/100] Fix pin pip for cd Signed-off-by: anton.denishchenko --- Jenkinsfile.cd | 1 - Jenkinsfile.ci | 2 +- ci/pipeline.groovy | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile.cd b/Jenkinsfile.cd index e042665fa..10db63458 100644 --- a/Jenkinsfile.cd +++ b/Jenkinsfile.cd @@ -17,7 +17,6 @@ def nodeTestUbuntu = { testEnv.inside('--network host') { echo 'Ubuntu Test: Install dependencies' - sh 'pip install pip==10.0.0' testHelpers.install() echo 'Ubuntu Test: Test' diff --git a/Jenkinsfile.ci b/Jenkinsfile.ci index d3d8da420..210d74386 100644 --- a/Jenkinsfile.ci +++ b/Jenkinsfile.ci @@ -73,7 +73,7 @@ def withTestEnv(body) { buildDocker("hyperledger/indy-node-ci", "ci/ubuntu.dockerfile ci").inside { echo 'Test: Install dependencies' - sh 'pip install pip==10.0.0' + sh "pip install pip==10.0.0" install() body.call('python') } diff --git a/ci/pipeline.groovy b/ci/pipeline.groovy index 22fe63a74..df9bb3d17 100644 --- a/ci/pipeline.groovy +++ b/ci/pipeline.groovy @@ -148,6 +148,7 @@ def systemTests(Closure body) { def uid = sh(returnStdout: true, script: 'id -u').trim() docker.build("hyperledger/indy-node-ci", "--build-arg uid=$uid -f ci/ubuntu.dockerfile ci").inside { sh """ + pip install pip==10.0.0 pip install .[tests] >$pipLogName """ From 56bb94e9d1c5e14fcd1d9004b4954e74655d2729 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Fri, 19 Feb 2021 07:43:59 -0700 Subject: [PATCH 057/100] updates setup.py with newer python package versions Signed-off-by: Ryan Marsh --- dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt | 105 +++++++++++++++++++ setup.py | 6 +- 2 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt diff --git a/dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt b/dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt new file mode 100644 index 000000000..49e9d2cc2 --- /dev/null +++ b/dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt @@ -0,0 +1,105 @@ +#VM 20.04 Setup + +##Pre-Install + + sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CE7709D068DB5E88 || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CE7709D068DB5E88 + sudo echo "deb https://repo.sovrin.org/deb bionic master" >> /etc/apt/sources.list + sudo echo "deb https://repo.sovrin.org/deb bionic stable" >> /etc/apt/sources.list + sudo echo "deb http://security.ubuntu.com/ubuntu bionic-security main" >> /etc/apt/sources.list + + sudo apt-get update && sudo apt-get install -y \ + git \ + wget \ + unzip \ + python3-pip \ + python3-venv \ + libsodium23 \ + iptables \ + at \ + supervisor \ + python3-nacl \ + rocksdb-tools \ + librocksdb5.17 \ + librocksdb-dev \ + libsnappy-dev \ + liblz4-dev \ + libbz2-dev \ + libssl1.0.0 \ + libindy \ + ursa + + git clone https://github.com/hyperledger/indy-node.git + git clone https://github.com/hyperledger/indy-plenum.git + # in both indy-node and indy-plenum checkout origin/ubuntu-20.04-upgrade + sudo cp /usr/lib/ursa/libursa.* /usr/lib/ + # Should be done in python env + pip install -U \ + Pygments==2.2.0 \ + Pympler==0.8 \ + apipkg==1.5 \ + attrs==20.3.0 \ + base58==2.1.0 \ + distro==1.5.0 \ + execnet==1.8.0 \ + flake8==3.8.4 \ + indy-plenum==1.13.0.dev1032 \ + indy-node==1.13.0.dev1222 \ + iniconfig==1.1.1 \ + intervaltree==2.1.0 \ + ioflo==2.0.2 \ + jsonpickle==2.0.0 \ + leveldb==0.201 \ + libnacl==1.7.2 \ + mccabe==0.6.1 \ + msgpack-python==0.5.6 \ + orderedset==2.0.3 \ + packaging==20.9 \ + pip==9.0.3 \ + pluggy==0.13.1 \ + portalocker==2.2.1 \ + prompt-toolkit==3.0.16 \ + psutil==5.6.6 \ + py==1.10.0 \ + pycodestyle==2.6.0 \ + pyflakes==2.2.0 \ + pyparsing==2.4.7 \ + pytest==6.2.2 \ + pytest-asyncio==0.14.0 \ + pytest-forked==1.3.0 \ + pytest-runner==5.3.0 \ + pytest-xdist==2.2.1 \ + python-dateutil==2.6.1 \ + python-rocksdb==0.7.0 \ + python-ursa==0.1.1 \ + python3-indy==1.13.0 \ + pyzmq==18.1.0 \ + rlp==0.6.0 \ + semver==2.13.0 \ + setuptools==53.0.0 \ + sha3==0.2.1 \ + six==1.15.0 \ + sortedcontainers==1.5.7 \ + timeout-decorator==0.5.0 \ + toml==0.10.2 \ + ujson==1.33 \ + wcwidth==0.2.5 \ + wheel==0.34.2 \ + zipp==1.2.0 + +##IDE Setup + Pycharm: + # Open indy-node + # Open indy-plenum - Link + # Create virtual env in project structure - python interpreter + # Create virtual env in project structure - python interpreter + # All pip3 commands mentioned above must be done in env + +## Base Dependencies Needed to test +### Library Dependencies: + libindy 1.15.0-bionic + libindy-crypto 0.4.5 + ursa 0.3.2-2 + + + diff --git a/setup.py b/setup.py index 3d9a497f9..2ca73c29f 100644 --- a/setup.py +++ b/setup.py @@ -27,8 +27,8 @@ BASE_DIR = os.path.join(os.path.expanduser("~"), ".indy") -tests_require = ['attrs', 'pytest', 'pytest-xdist', 'pytest-forked', - 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio'] +tests_require = ['attrs>=20.3.0', 'pytest>=6.2.2', 'pytest-xdist>=2.2.1', 'pytest-forked>=1.3.0', + 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio>=0.14.0'] setup( name=metadata['__title__'], @@ -54,7 +54,7 @@ data_files=[( (BASE_DIR, ['data/nssm_original.exe']) )], - install_requires=['indy-plenum==1.13.0.dev1032', 'timeout-decorator', 'distro'], + install_requires=['indy-plenum==1.13.0.dev1032', 'timeout-decorator>=0.5.0', 'distro>=1.5.0'], setup_requires=['pytest-runner'], extras_require={ 'tests': tests_require From 58c67a625990ac270abad030b3b4a6509d483eec Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Fri, 19 Feb 2021 07:43:59 -0700 Subject: [PATCH 058/100] updates setup.py with newer python package versions Signed-off-by: Ryan Marsh --- dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt | 105 +++++++++++++++++++ setup.py | 6 +- 2 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt diff --git a/dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt b/dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt new file mode 100644 index 000000000..49e9d2cc2 --- /dev/null +++ b/dev-setup/ubuntu/ubuntu-2004/SetupVMTest.txt @@ -0,0 +1,105 @@ +#VM 20.04 Setup + +##Pre-Install + + sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CE7709D068DB5E88 || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CE7709D068DB5E88 + sudo echo "deb https://repo.sovrin.org/deb bionic master" >> /etc/apt/sources.list + sudo echo "deb https://repo.sovrin.org/deb bionic stable" >> /etc/apt/sources.list + sudo echo "deb http://security.ubuntu.com/ubuntu bionic-security main" >> /etc/apt/sources.list + + sudo apt-get update && sudo apt-get install -y \ + git \ + wget \ + unzip \ + python3-pip \ + python3-venv \ + libsodium23 \ + iptables \ + at \ + supervisor \ + python3-nacl \ + rocksdb-tools \ + librocksdb5.17 \ + librocksdb-dev \ + libsnappy-dev \ + liblz4-dev \ + libbz2-dev \ + libssl1.0.0 \ + libindy \ + ursa + + git clone https://github.com/hyperledger/indy-node.git + git clone https://github.com/hyperledger/indy-plenum.git + # in both indy-node and indy-plenum checkout origin/ubuntu-20.04-upgrade + sudo cp /usr/lib/ursa/libursa.* /usr/lib/ + # Should be done in python env + pip install -U \ + Pygments==2.2.0 \ + Pympler==0.8 \ + apipkg==1.5 \ + attrs==20.3.0 \ + base58==2.1.0 \ + distro==1.5.0 \ + execnet==1.8.0 \ + flake8==3.8.4 \ + indy-plenum==1.13.0.dev1032 \ + indy-node==1.13.0.dev1222 \ + iniconfig==1.1.1 \ + intervaltree==2.1.0 \ + ioflo==2.0.2 \ + jsonpickle==2.0.0 \ + leveldb==0.201 \ + libnacl==1.7.2 \ + mccabe==0.6.1 \ + msgpack-python==0.5.6 \ + orderedset==2.0.3 \ + packaging==20.9 \ + pip==9.0.3 \ + pluggy==0.13.1 \ + portalocker==2.2.1 \ + prompt-toolkit==3.0.16 \ + psutil==5.6.6 \ + py==1.10.0 \ + pycodestyle==2.6.0 \ + pyflakes==2.2.0 \ + pyparsing==2.4.7 \ + pytest==6.2.2 \ + pytest-asyncio==0.14.0 \ + pytest-forked==1.3.0 \ + pytest-runner==5.3.0 \ + pytest-xdist==2.2.1 \ + python-dateutil==2.6.1 \ + python-rocksdb==0.7.0 \ + python-ursa==0.1.1 \ + python3-indy==1.13.0 \ + pyzmq==18.1.0 \ + rlp==0.6.0 \ + semver==2.13.0 \ + setuptools==53.0.0 \ + sha3==0.2.1 \ + six==1.15.0 \ + sortedcontainers==1.5.7 \ + timeout-decorator==0.5.0 \ + toml==0.10.2 \ + ujson==1.33 \ + wcwidth==0.2.5 \ + wheel==0.34.2 \ + zipp==1.2.0 + +##IDE Setup + Pycharm: + # Open indy-node + # Open indy-plenum - Link + # Create virtual env in project structure - python interpreter + # Create virtual env in project structure - python interpreter + # All pip3 commands mentioned above must be done in env + +## Base Dependencies Needed to test +### Library Dependencies: + libindy 1.15.0-bionic + libindy-crypto 0.4.5 + ursa 0.3.2-2 + + + diff --git a/setup.py b/setup.py index 3d9a497f9..2ca73c29f 100644 --- a/setup.py +++ b/setup.py @@ -27,8 +27,8 @@ BASE_DIR = os.path.join(os.path.expanduser("~"), ".indy") -tests_require = ['attrs', 'pytest', 'pytest-xdist', 'pytest-forked', - 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio'] +tests_require = ['attrs>=20.3.0', 'pytest>=6.2.2', 'pytest-xdist>=2.2.1', 'pytest-forked>=1.3.0', + 'python3-indy==1.13.0-dev-1420', 'pytest-asyncio>=0.14.0'] setup( name=metadata['__title__'], @@ -54,7 +54,7 @@ data_files=[( (BASE_DIR, ['data/nssm_original.exe']) )], - install_requires=['indy-plenum==1.13.0.dev1032', 'timeout-decorator', 'distro'], + install_requires=['indy-plenum==1.13.0.dev1032', 'timeout-decorator>=0.5.0', 'distro>=1.5.0'], setup_requires=['pytest-runner'], extras_require={ 'tests': tests_require From 1a65214b0b016d2bbfb1c57ac9d69703eb39cf21 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 23 Feb 2021 14:51:13 -0700 Subject: [PATCH 059/100] fixes broken fixture Signed-off-by: Ryan Marsh --- indy_node/test/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indy_node/test/conftest.py b/indy_node/test/conftest.py index 83e65795c..5a36bf404 100644 --- a/indy_node/test/conftest.py +++ b/indy_node/test/conftest.py @@ -109,7 +109,7 @@ def sdk_node_theta_added_fixture(looper, testNodeClass, name=None, services=[VALIDATOR]): - return sdk_node_theta_added(looper, nodeSet, tdir, tconf, sdk_pool_handle, sdk_wallet_trustee, allPluginsPath, node_config_helper_class, testNodeClass, name) + return sdk_node_theta_added(looper, txnPoolNodeSet, tdir, tconf, sdk_pool_handle, sdk_wallet_trustee, allPluginsPath, node_config_helper_class, testNodeClass, name) def sdk_node_theta_added(looper, From 33a9a21901a7f5f72472593eaafefb7c047de26d Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Tue, 23 Feb 2021 14:51:13 -0700 Subject: [PATCH 060/100] fixes broken fixture Signed-off-by: Ryan Marsh --- indy_node/test/conftest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indy_node/test/conftest.py b/indy_node/test/conftest.py index 83e65795c..5a36bf404 100644 --- a/indy_node/test/conftest.py +++ b/indy_node/test/conftest.py @@ -109,7 +109,7 @@ def sdk_node_theta_added_fixture(looper, testNodeClass, name=None, services=[VALIDATOR]): - return sdk_node_theta_added(looper, nodeSet, tdir, tconf, sdk_pool_handle, sdk_wallet_trustee, allPluginsPath, node_config_helper_class, testNodeClass, name) + return sdk_node_theta_added(looper, txnPoolNodeSet, tdir, tconf, sdk_pool_handle, sdk_wallet_trustee, allPluginsPath, node_config_helper_class, testNodeClass, name) def sdk_node_theta_added(looper, From ec78113f264695f700005c074ca6e279064eacb0 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Wed, 24 Feb 2021 15:18:49 +0300 Subject: [PATCH 061/100] Set xenial version for CD pipeline Signed-off-by: anton.denishchenko --- ci/pipeline.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/pipeline.groovy b/ci/pipeline.groovy index df9bb3d17..d03a2b216 100644 --- a/ci/pipeline.groovy +++ b/ci/pipeline.groovy @@ -161,7 +161,7 @@ def systemTests(Closure body) { indySDKVersions.pypi = sh(returnStdout: true, script: """ grep "^Collecting python3-indy==" $pipLogName | awk '{print \$2}' | awk -F'==' '{print \$2}' """).trim() - indySDKVersions.debian = indySDKVersions.pypi.replaceAll(/-(dev|rc)-(.*)/, "~\$2") + indySDKVersions.debian = indySDKVersions.pypi.replaceAll(/-(dev|rc)-(.*)/, "~\$2-xenial") echo "indy-sdk version: ${indySDKVersions}" } From 5908cba7fdc094c4f1616527b2c18e7cfb3da2bc Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Wed, 24 Feb 2021 11:23:32 -0700 Subject: [PATCH 062/100] updates failing test list Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 2 +- indy_node/test/catchup/test_requests_post_multiple_new_nodes.py | 1 - indy_node/test/catchup/test_requests_post_new_node_catchup.py | 1 - indy_node/test/catchup/test_state_recovering.py | 1 - indy_node/test/nym_txn/test_demote_network_monitor.py | 2 +- indy_node/test/suspension/test_node_suspension.py | 1 - 6 files changed, 2 insertions(+), 6 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 23c1f1afe..81143e3c1 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,7 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> (needs looking at) RTM: Failing Test +# FIXME -> RTM: Failing Test def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py index 191f7c3f1..0816456f8 100644 --- a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py +++ b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py @@ -5,7 +5,6 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_requests_post_multiple_new_nodes( looper, nodeSet, diff --git a/indy_node/test/catchup/test_requests_post_new_node_catchup.py b/indy_node/test/catchup/test_requests_post_new_node_catchup.py index 4473cf1ec..5b499b3b2 100644 --- a/indy_node/test/catchup/test_requests_post_new_node_catchup.py +++ b/indy_node/test/catchup/test_requests_post_new_node_catchup.py @@ -11,7 +11,6 @@ from indy_common.config_helper import NodeConfigHelper -#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_new_node_catchup_update_projection(looper, nodeSet, tconf, tdir, sdk_pool_handle, diff --git a/indy_node/test/catchup/test_state_recovering.py b/indy_node/test/catchup/test_state_recovering.py index d0216526b..95f0ff53e 100644 --- a/indy_node/test/catchup/test_state_recovering.py +++ b/indy_node/test/catchup/test_state_recovering.py @@ -87,7 +87,6 @@ def send_auth_rule(looper, sig_count=1).as_dict) -#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_state_recovering_for_auth_rule(nodeSet, looper, sdk_pool_handle, sdk_wallet_steward, sdk_wallet_trustee, tdir, tconf, diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index 20e0b201b..23420e80a 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,7 +9,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> (needs looking at) RTM: Failing Test +#FIXME -> RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index 5d1f7002d..6c778079b 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,7 +13,6 @@ nodeCount = 7 -# FIXME -> RTM: Failing test (passes individually) def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, tdir, tconf, allPluginsPath): """ From 3087d29d58650f03726403bb38b9ecb2026b1d94 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Wed, 24 Feb 2021 11:23:32 -0700 Subject: [PATCH 063/100] updates failing test list Signed-off-by: Ryan Marsh --- indy_common/test/test_strict_types.py | 2 +- indy_node/test/catchup/test_requests_post_multiple_new_nodes.py | 1 - indy_node/test/catchup/test_requests_post_new_node_catchup.py | 1 - indy_node/test/catchup/test_state_recovering.py | 1 - indy_node/test/nym_txn/test_demote_network_monitor.py | 2 +- indy_node/test/suspension/test_node_suspension.py | 1 - 6 files changed, 2 insertions(+), 6 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 23c1f1afe..81143e3c1 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -34,7 +34,7 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> (needs looking at) RTM: Failing Test +# FIXME -> RTM: Failing Test def testWorksWithComplexTypes(): takesUnion('1') diff --git a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py index 191f7c3f1..0816456f8 100644 --- a/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py +++ b/indy_node/test/catchup/test_requests_post_multiple_new_nodes.py @@ -5,7 +5,6 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_requests_post_multiple_new_nodes( looper, nodeSet, diff --git a/indy_node/test/catchup/test_requests_post_new_node_catchup.py b/indy_node/test/catchup/test_requests_post_new_node_catchup.py index 4473cf1ec..5b499b3b2 100644 --- a/indy_node/test/catchup/test_requests_post_new_node_catchup.py +++ b/indy_node/test/catchup/test_requests_post_new_node_catchup.py @@ -11,7 +11,6 @@ from indy_common.config_helper import NodeConfigHelper -#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_new_node_catchup_update_projection(looper, nodeSet, tconf, tdir, sdk_pool_handle, diff --git a/indy_node/test/catchup/test_state_recovering.py b/indy_node/test/catchup/test_state_recovering.py index d0216526b..95f0ff53e 100644 --- a/indy_node/test/catchup/test_state_recovering.py +++ b/indy_node/test/catchup/test_state_recovering.py @@ -87,7 +87,6 @@ def send_auth_rule(looper, sig_count=1).as_dict) -#FIXME -> RTM: Failing tests in 'catchup' (passes individually) def test_state_recovering_for_auth_rule(nodeSet, looper, sdk_pool_handle, sdk_wallet_steward, sdk_wallet_trustee, tdir, tconf, diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index 20e0b201b..23420e80a 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,7 +9,7 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> (needs looking at) RTM: Failing Test +#FIXME -> RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, diff --git a/indy_node/test/suspension/test_node_suspension.py b/indy_node/test/suspension/test_node_suspension.py index 5d1f7002d..6c778079b 100644 --- a/indy_node/test/suspension/test_node_suspension.py +++ b/indy_node/test/suspension/test_node_suspension.py @@ -13,7 +13,6 @@ nodeCount = 7 -# FIXME -> RTM: Failing test (passes individually) def test_suspend_node(looper, sdk_pool_handle, sdk_wallet_trustee, nodeSet, tdir, tconf, allPluginsPath): """ From b66ade381b44854708e2e89712020f7609e63787 Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 25 Feb 2021 09:10:32 -0700 Subject: [PATCH 064/100] fixes failing tests by looking 4 minutes in the past with journalctl Signed-off-by: Ryan Marsh --- indy_node/test/nym_txn/test_demote_network_monitor.py | 1 - indy_node/test/validator_info/test_validator_info_command.py | 1 - indy_node/test/validator_info/test_validator_info_handler.py | 1 - 3 files changed, 3 deletions(-) diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index 23420e80a..71c635e19 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,7 +9,6 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, diff --git a/indy_node/test/validator_info/test_validator_info_command.py b/indy_node/test/validator_info/test_validator_info_command.py index 0a6fff05c..97785d41e 100644 --- a/indy_node/test/validator_info/test_validator_info_command.py +++ b/indy_node/test/validator_info/test_validator_info_command.py @@ -11,7 +11,6 @@ sdk_get_reply, sdk_send_signed_requests, sdk_get_and_check_replies -# FIXME -> RTM: Failing test (needs help) def test_validator_info_command( sdk_pool_handle, sdk_wallet_trustee, looper): req, resp = sdk_get_validator_info(looper, diff --git a/indy_node/test/validator_info/test_validator_info_handler.py b/indy_node/test/validator_info/test_validator_info_handler.py index a81f880e8..7a02c7b7e 100644 --- a/indy_node/test/validator_info/test_validator_info_handler.py +++ b/indy_node/test/validator_info/test_validator_info_handler.py @@ -6,7 +6,6 @@ from plenum.test.helper import sdk_gen_request, sdk_sign_request_objects -# FIXME -> RTM: Failing Test (needs help) def test_validator_info_handler(monkeypatch, sdk_wallet_trustee, txnPoolNodeSet, From cb3e7906ef42a0075bc13115c5c84f5f9d26046e Mon Sep 17 00:00:00 2001 From: Ryan Marsh Date: Thu, 25 Feb 2021 09:10:32 -0700 Subject: [PATCH 065/100] fixes failing tests by looking 4 minutes in the past with journalctl Signed-off-by: Ryan Marsh --- indy_node/test/nym_txn/test_demote_network_monitor.py | 1 - indy_node/test/validator_info/test_validator_info_command.py | 1 - indy_node/test/validator_info/test_validator_info_handler.py | 1 - 3 files changed, 3 deletions(-) diff --git a/indy_node/test/nym_txn/test_demote_network_monitor.py b/indy_node/test/nym_txn/test_demote_network_monitor.py index 23420e80a..71c635e19 100644 --- a/indy_node/test/nym_txn/test_demote_network_monitor.py +++ b/indy_node/test/nym_txn/test_demote_network_monitor.py @@ -9,7 +9,6 @@ from plenum.test.pool_transactions.helper import sdk_add_new_nym -#FIXME -> RTM: Failing Test def test_network_monitor_suspension_by_another_steward(looper, sdk_pool_handle, sdk_wallet_steward, diff --git a/indy_node/test/validator_info/test_validator_info_command.py b/indy_node/test/validator_info/test_validator_info_command.py index 0a6fff05c..97785d41e 100644 --- a/indy_node/test/validator_info/test_validator_info_command.py +++ b/indy_node/test/validator_info/test_validator_info_command.py @@ -11,7 +11,6 @@ sdk_get_reply, sdk_send_signed_requests, sdk_get_and_check_replies -# FIXME -> RTM: Failing test (needs help) def test_validator_info_command( sdk_pool_handle, sdk_wallet_trustee, looper): req, resp = sdk_get_validator_info(looper, diff --git a/indy_node/test/validator_info/test_validator_info_handler.py b/indy_node/test/validator_info/test_validator_info_handler.py index a81f880e8..7a02c7b7e 100644 --- a/indy_node/test/validator_info/test_validator_info_handler.py +++ b/indy_node/test/validator_info/test_validator_info_handler.py @@ -6,7 +6,6 @@ from plenum.test.helper import sdk_gen_request, sdk_sign_request_objects -# FIXME -> RTM: Failing Test (needs help) def test_validator_info_handler(monkeypatch, sdk_wallet_trustee, txnPoolNodeSet, From 460e509a1bd35a517649741c0699bd5c7efb836d Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 5 Mar 2021 20:58:12 +0300 Subject: [PATCH 066/100] Delete useless test Signed-off-by: Anton Denishchenko --- indy_common/test/test_strict_types.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 81143e3c1..9ada510d7 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -12,14 +12,6 @@ def takesStr(s: str) -> int: pass -@strict_types() -def takesUnion(s: typing.Union[str, None]) -> int: - try: - return int(s) - except ValueError: - pass - - def testInvalidArgumentType(): with pytest.raises(TypeError): takesStr(1) @@ -34,11 +26,6 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: Failing Test -def testWorksWithComplexTypes(): - takesUnion('1') - - @decClassMethods(strict_types()) class TestClass: From 1cd98b580972f9e0252ae5dabaf1b420655db40a Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 5 Mar 2021 20:58:12 +0300 Subject: [PATCH 067/100] Delete useless test Signed-off-by: Anton Denishchenko --- indy_common/test/test_strict_types.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/indy_common/test/test_strict_types.py b/indy_common/test/test_strict_types.py index 81143e3c1..9ada510d7 100644 --- a/indy_common/test/test_strict_types.py +++ b/indy_common/test/test_strict_types.py @@ -12,14 +12,6 @@ def takesStr(s: str) -> int: pass -@strict_types() -def takesUnion(s: typing.Union[str, None]) -> int: - try: - return int(s) - except ValueError: - pass - - def testInvalidArgumentType(): with pytest.raises(TypeError): takesStr(1) @@ -34,11 +26,6 @@ def testValidInputAndReturn(): takesStr('1') -# FIXME -> RTM: Failing Test -def testWorksWithComplexTypes(): - takesUnion('1') - - @decClassMethods(strict_types()) class TestClass: From 103945660f8aa2b1f9d141455a7428c21d49f896 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 00:40:01 +0300 Subject: [PATCH 068/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 118 ++++++++++++++++++++--------- 1 file changed, 83 insertions(+), 35 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 335999c18..e8051a1fe 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -1,49 +1,97 @@ -name: indy-node-build-u1804 +name: indy-node-build-u2004 on: [ push, pull_request ] jobs: - indy-common: - name: Build Indy Common - runs-on: ubuntu-18.04 - #TODO: move this to hyperledger? - container: udosson/indy-node-ci-u1804:latest + setup-workflow: + runs-on: ubuntu-20.04 + outputs: + CACHE_KEY_CI_IMAGE: ${{ steps.init.outputs.CACHE_KEY_CI_IMAGE }} + GITHUB_REPOSITORY_NAME: ${{ steps.init.outputs.GITHUB_REPOSITORY_NAME }} steps: - - name: Check out code + - name: Checkout uses: actions/checkout@v2 - - - name: Install dependencies - run: pip install .[tests] - continue-on-error: true - - name: Run Indy Common test - run: python3 -m pytest -l -vv --junitxml=test-result-indy-common.xml --dir indy_common --output "test-result-indy-common.txt" - - indy-node: - name: Build Indy Node - runs-on: ubuntu-18.04 - #TODO: move this to hyperledger? - container: udosson/indy-node-ci-u1804:latest + - name: Set outputs + id: init + run: | + echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('devops') }}-cache-v1" + # Convert the GitHub repository name to lowercase + echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" + + + test-image: + # Reference to workflow-setup job is required to access its various outputs. + needs: setup-workflow + runs-on: ubuntu-latest + env: + DOCKER_BUILDKIT: 1 + CACHE_KEY_BUILD: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD }} + GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} + DOCKER_FILE_POSTFIX: ${{ needs.workflow-setup.outputs.DOCKER_FILE_POSTFIX }} steps: - - name: Check out code + - name: Git checkout uses: actions/checkout@v2 - - name: Install dependencies - run: pip install .[tests] - continue-on-error: true + - name: Try load from cache. + id: cache-image + uses: actions/cache@v2 + with: + path: ${GITHUB_WORKSPACE}/cache + key: ${{ env.CACHE_KEY_BUILD}} + + - name: If NOT found in cache, build and push image. + if: steps.cache-image.outputs.cache-hit != 'true' + run: | + echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin + docker build -f .github/workflows/test/Dockerfile.${{ env.DOCKER_FILE_POSTFIX }} --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + mkdir -p ${GITHUB_WORKSPACE}/cache + touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD }} + + +# indy-common: +# name: Build Indy Common +# runs-on: ubuntu-latest +# #TODO: move this to hyperledger? +# container: udosson/indy-node-ci-u1804:latest +# steps: +# - name: Check out code +# uses: actions/checkout@v2 + +# - name: Install dependencies +# run: pip install .[tests] +# continue-on-error: true + +# - name: Run Indy Common test +# run: python3 -m pytest -l -vv --junitxml=test-result-indy-common.xml --dir indy_common --output "test-result-indy-common.txt" + +# indy-node: +# name: Build Indy Node +# runs-on: ubuntu-18.04 +# #TODO: move this to hyperledger? +# container: udosson/indy-node-ci-u1804:latest +# steps: +# - name: Check out code +# uses: actions/checkout@v2 + +# - name: Install dependencies +# run: pip install .[tests] +# continue-on-error: true - - name: Run Indy Node test - run: python3 -m pytest -l -vv --junitxml=test-result-indy-node.xml --dir indy_node --output "test-result-indy-node.txt" +# - name: Run Indy Node test +# run: python3 -m pytest -l -vv --junitxml=test-result-indy-node.xml --dir indy_node --output "test-result-indy-node.txt" - lint: - name: Lint - runs-on: ubuntu-18.04 - #TODO: move this to hyperledger? - container: udosson/indy-node-ci-u1804:latest - steps: - - name: Check out code - uses: actions/checkout@v2 +# lint: +# name: Lint +# runs-on: ubuntu-18.04 +# #TODO: move this to hyperledger? +# container: udosson/indy-node-ci-u1804:latest +# steps: +# - name: Check out code +# uses: actions/checkout@v2 - - name: flake8 - run: python3 -m flake8 +# - name: flake8 +# run: python3 -m flake8 From fe4902893275cb578cbf69babe19848ad96c19ba Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 01:01:25 +0300 Subject: [PATCH 069/100] Add files via upload Add Dockerfile --- .github/workflows/Dockerfile | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/Dockerfile diff --git a/.github/workflows/Dockerfile b/.github/workflows/Dockerfile new file mode 100644 index 000000000..46ea2eda4 --- /dev/null +++ b/.github/workflows/Dockerfile @@ -0,0 +1,24 @@ +FROM hyperledger/indy-core-baseci:0.0.3-master +LABEL maintainer="Hyperledger " + +ARG uid=1000 +ARG user=indy +ARG venv=venv + +RUN apt-get update -y && apt-get install -y \ + python3-nacl \ + ursa=0.3.2-2 \ + libindy=1.13.0~1420 \ +# rocksdb python wrapper + libbz2-dev \ + zlib1g-dev \ + liblz4-dev \ + libsnappy-dev \ + rocksdb=5.8.8 + +RUN indy_ci_add_user $uid $user $venv + +RUN indy_image_clean + +USER $user +WORKDIR /home/$user From 8656445f6e81b6bbe8bbab847d6246fcb199b6da Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 01:02:59 +0300 Subject: [PATCH 070/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index e8051a1fe..07c711119 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -43,7 +43,7 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/test/Dockerfile.${{ env.DOCKER_FILE_POSTFIX }} --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD }} . + docker build -f .github/workflows/Dockerfile.${{ env.DOCKER_FILE_POSTFIX }} --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD }} . docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} mkdir -p ${GITHUB_WORKSPACE}/cache From 48cfd8233f388b299dc26a909f24b3360e367e37 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 01:16:23 +0300 Subject: [PATCH 071/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 07c711119..79ab33926 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -6,7 +6,9 @@ jobs: runs-on: ubuntu-20.04 outputs: CACHE_KEY_CI_IMAGE: ${{ steps.init.outputs.CACHE_KEY_CI_IMAGE }} + CACHE_KEY_BUILD_IMAGE: ${{ steps.init.outputs.CACHE_KEY_BUILD_IMAGE }} GITHUB_REPOSITORY_NAME: ${{ steps.init.outputs.GITHUB_REPOSITORY_NAME }} + DOCKER_FILE_POSTFIX: ${{ steps.cache.outputs.DOCKER_FILE_POSTFIX }} steps: - name: Checkout uses: actions/checkout@v2 @@ -14,9 +16,11 @@ jobs: - name: Set outputs id: init run: | - echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('devops') }}-cache-v1" + echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" + echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" # Convert the GitHub repository name to lowercase echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" + echo "::set-output name=DOCKER_FILE_POSTFIX::ubuntu-20-04" test-image: @@ -25,7 +29,7 @@ jobs: runs-on: ubuntu-latest env: DOCKER_BUILDKIT: 1 - CACHE_KEY_BUILD: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD }} + CACHE_KEY_CI_IMAGE: ${{ needs.workflow-setup.outputs.CACHE_KEY_CI_IMAGE }} GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} DOCKER_FILE_POSTFIX: ${{ needs.workflow-setup.outputs.DOCKER_FILE_POSTFIX }} steps: @@ -43,11 +47,11 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile.${{ env.DOCKER_FILE_POSTFIX }} --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker build -f .github/workflows/Dockerfile.${{ env.DOCKER_FILE_POSTFIX }} --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} mkdir -p ${GITHUB_WORKSPACE}/cache - touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD }} + touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} # indy-common: From 446e2d82f218c1b61bc589ab342abf176487708d Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 01:19:46 +0300 Subject: [PATCH 072/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 79ab33926..7ad0b0175 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -41,7 +41,7 @@ jobs: uses: actions/cache@v2 with: path: ${GITHUB_WORKSPACE}/cache - key: ${{ env.CACHE_KEY_BUILD}} + key: ${{ env.CACHE_KEY_CI_IMAGE}} - name: If NOT found in cache, build and push image. if: steps.cache-image.outputs.cache-hit != 'true' From 1579a918e8b302251dddfbd8c9bf0d1074397bae Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 01:33:07 +0300 Subject: [PATCH 073/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 7ad0b0175..e00af3730 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -14,7 +14,7 @@ jobs: uses: actions/checkout@v2 - name: Set outputs - id: init + id: cache run: | echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" From e26134ab3a949a69e41e6cf4dfd31e66b64c77ff Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 01:51:00 +0300 Subject: [PATCH 074/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index e00af3730..564d856c8 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -16,8 +16,8 @@ jobs: - name: Set outputs id: cache run: | - echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" - echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" + echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}" + echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}" # Convert the GitHub repository name to lowercase echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" echo "::set-output name=DOCKER_FILE_POSTFIX::ubuntu-20-04" From b86bfd82ee80c7964aad15070cd81ff4237c8dde Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 01:53:14 +0300 Subject: [PATCH 075/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 564d856c8..600dc5da4 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -5,9 +5,9 @@ jobs: setup-workflow: runs-on: ubuntu-20.04 outputs: - CACHE_KEY_CI_IMAGE: ${{ steps.init.outputs.CACHE_KEY_CI_IMAGE }} - CACHE_KEY_BUILD_IMAGE: ${{ steps.init.outputs.CACHE_KEY_BUILD_IMAGE }} - GITHUB_REPOSITORY_NAME: ${{ steps.init.outputs.GITHUB_REPOSITORY_NAME }} + CACHE_KEY_CI_IMAGE: ${{ steps.cache.outputs.CACHE_KEY_CI_IMAGE }} + CACHE_KEY_BUILD_IMAGE: ${{ steps.cache.outputs.CACHE_KEY_BUILD_IMAGE }} + GITHUB_REPOSITORY_NAME: ${{ steps.cache.outputs.GITHUB_REPOSITORY_NAME }} DOCKER_FILE_POSTFIX: ${{ steps.cache.outputs.DOCKER_FILE_POSTFIX }} steps: - name: Checkout From 50c66fdb8f7f6ce292751a3351219e7e94f2a7a7 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 02:15:07 +0300 Subject: [PATCH 076/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 600dc5da4..502200c46 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -2,7 +2,7 @@ name: indy-node-build-u2004 on: [ push, pull_request ] jobs: - setup-workflow: + workflow-setup: runs-on: ubuntu-20.04 outputs: CACHE_KEY_CI_IMAGE: ${{ steps.cache.outputs.CACHE_KEY_CI_IMAGE }} @@ -25,7 +25,7 @@ jobs: test-image: # Reference to workflow-setup job is required to access its various outputs. - needs: setup-workflow + needs: workflow-setup runs-on: ubuntu-latest env: DOCKER_BUILDKIT: 1 From 1037307aac7647fea51f69a485e8034ee44db3a1 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 02:29:57 +0300 Subject: [PATCH 077/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 502200c46..3c3b03a9b 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -46,7 +46,7 @@ jobs: - name: If NOT found in cache, build and push image. if: steps.cache-image.outputs.cache-hit != 'true' run: | - echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin + echo ${{ secrets.GH_PAT }} | docker login ghcr.io --username ${{ secrets.GH_USER }} --password-stdin docker build -f .github/workflows/Dockerfile.${{ env.DOCKER_FILE_POSTFIX }} --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} From a36482c66c7b19646aefc34ed33a90ab4bf784ba Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 02:47:04 +0300 Subject: [PATCH 078/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 3c3b03a9b..50168327c 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -16,8 +16,8 @@ jobs: - name: Set outputs id: cache run: | - echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}" - echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}" + echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" + echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" # Convert the GitHub repository name to lowercase echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" echo "::set-output name=DOCKER_FILE_POSTFIX::ubuntu-20-04" @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.GH_PAT }} | docker login ghcr.io --username ${{ secrets.GH_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile.${{ env.DOCKER_FILE_POSTFIX }} --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From a570fb7a5e8528aa7a0c96375b09ff59487d47b3 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 14:12:35 +0300 Subject: [PATCH 079/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 50168327c..a1866e19e 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -46,7 +46,7 @@ jobs: - name: If NOT found in cache, build and push image. if: steps.cache-image.outputs.cache-hit != 'true' run: | - echo ${{ secrets.GH_PAT }} | docker login ghcr.io --username ${{ secrets.GH_USER }} --password-stdin + echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build From 92c051a002e071aff298d18c6dfa9669d7603d8c Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 14:46:39 +0300 Subject: [PATCH 080/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index a1866e19e..4634989f8 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -48,7 +48,7 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 8ed1e5cbcddfc7b1f798800eccf9dd25bc6a50cb Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 16:47:38 +0300 Subject: [PATCH 081/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 4634989f8..eeb11c86f 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -48,8 +48,8 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 3948771ceda5cac099976ebf1e5d3fee7f54b7df Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Thu, 1 Apr 2021 17:28:14 +0300 Subject: [PATCH 082/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index eeb11c86f..d66dccc2d 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenko/indy-node/node-build:latest + docker push ghcr.io/adenishchenko/indy-node/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 04b3baef43b4a00199fb421ba1c8eaebc67a2400 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 00:17:06 +0300 Subject: [PATCH 083/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index d66dccc2d..22a26e594 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenko/indy-node/node-build:latest - docker push ghcr.io/adenishchenko/indy-node/node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenkoq/indy-node/node-build:latest + docker push ghcr.io/adenishchenkoq/indy-node/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From b0d0a296ee7fa0e36e62580210c769b7de8e8835 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 00:36:54 +0300 Subject: [PATCH 084/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 22a26e594..d66dccc2d 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenkoq/indy-node/node-build:latest - docker push ghcr.io/adenishchenkoq/indy-node/node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenko/indy-node/node-build:latest + docker push ghcr.io/adenishchenko/indy-node/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 572b2cb92b1eebdea47fc82c16bc309d09489d4e Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 01:36:33 +0300 Subject: [PATCH 085/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index d66dccc2d..22a26e594 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag adenishchenko/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenko/indy-node/node-build:latest - docker push ghcr.io/adenishchenko/indy-node/node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenkoq/indy-node/node-build:latest + docker push ghcr.io/adenishchenkoq/indy-node/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 289a46d730ed7cb423c2b6370a89daaea741bd8e Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 01:52:59 +0300 Subject: [PATCH 086/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 22a26e594..752fdd8cf 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag adenishchenkoq/indy-node/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenkoq/indy-node/node-build:latest - docker push ghcr.io/adenishchenkoq/indy-node/node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenko/indy-nodeq/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag adenishchenko/indy-nodeq/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenko/indy-nodeq/node-build:latest + docker push ghcr.io/adenishchenko/indy-nodeq/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 0e718923976d1e7e942fc71d11b159e3f0ed979d Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 02:04:02 +0300 Subject: [PATCH 087/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 752fdd8cf..bf39304d2 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t adenishchenko/indy-nodeq/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag adenishchenko/indy-nodeq/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/adenishchenko/indy-nodeq/node-build:latest - docker push ghcr.io/adenishchenko/indy-nodeq/node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t {{ env.GITHUB_REPOSITORY_NAME }}//node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag {{ env.GITHUB_REPOSITORY_NAME }}//node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}//node-build:latest + docker push ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}//node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 091ec5cbebe1d493ad14c2c9f139e715fa6f5d69 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 02:06:03 +0300 Subject: [PATCH 088/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index bf39304d2..6de725508 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t {{ env.GITHUB_REPOSITORY_NAME }}//node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag {{ env.GITHUB_REPOSITORY_NAME }}//node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}//node-build:latest - docker push ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}//node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t {{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag {{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest + docker push ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 4a2fa47397da2b0f2e46d9d52e1948e0969eda87 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 02:10:37 +0300 Subject: [PATCH 089/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 6de725508..eeb11c86f 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t {{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag {{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest - docker push ghcr.io/{{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest + docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From 06cf1b5228630a108d392af708caab0aa3d49434 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 02:19:01 +0300 Subject: [PATCH 090/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index eeb11c86f..5b4bb3b53 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -48,8 +48,8 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:latest + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From f5d9fed176a849c48a667ab94be2632f4864331e Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 13:48:53 +0300 Subject: [PATCH 091/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 5b4bb3b53..242b1dadc 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -48,12 +48,40 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} + build-image: + # Reference to workflow-setup job is required to access its various outputs. + needs: workflow-setup + runs-on: ubuntu-latest + env: + DOCKER_BUILDKIT: 1 + CACHE_KEY_BUILD_IMAGE: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD_IMAGE }} + GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} + DOCKER_FILE_POSTFIX: ${{ needs.workflow-setup.outputs.DOCKER_FILE_POSTFIX }} + steps: + - name: Git checkout + uses: actions/checkout@v2 + + - name: Try load from cache. + id: cache-image + uses: actions/cache@v2 + with: + path: ${GITHUB_WORKSPACE}/cache + key: ${{ env.CACHE_KEY_BUILD_IMAGE }} + - name: If NOT found in cache, build and push image. + if: steps.cache-image.outputs.cache-hit != 'true' + run: | + echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin + docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + mkdir -p ${GITHUB_WORKSPACE}/cache + touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD_IMAGE }} # indy-common: # name: Build Indy Common # runs-on: ubuntu-latest From 41d4c29a30c6687eeb86922775b11ddde1d48660 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 13:49:56 +0300 Subject: [PATCH 092/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 242b1dadc..43b4766ac 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,9 +47,9 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_CI_IMAGE }} . + docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} . docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} From bd21d3a30f20cfdd467f86c5425ce06cb0219c06 Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Fri, 2 Apr 2021 14:14:08 +0300 Subject: [PATCH 093/100] Add Dockerfiles Signed-off-by: anton.denishchenko --- .github/workflows/build/Dockerfile | 30 +++++++++++++++++++++++++ .github/workflows/{ => test}/Dockerfile | 0 2 files changed, 30 insertions(+) create mode 100644 .github/workflows/build/Dockerfile rename .github/workflows/{ => test}/Dockerfile (100%) diff --git a/.github/workflows/build/Dockerfile b/.github/workflows/build/Dockerfile new file mode 100644 index 000000000..1c9f348eb --- /dev/null +++ b/.github/workflows/build/Dockerfile @@ -0,0 +1,30 @@ +FROM ubuntu:16.04 + +RUN apt-get update -y && apt-get install -y \ + # common stuff + git \ + wget \ + unzip \ + python3.5 \ + python3-pip \ + python3-venv \ + # fmp + ruby \ + ruby-dev \ + rubygems \ + gcc \ + make \ + && rm -rf /var/lib/apt/lists/* + +# issues with pip>=10: +# https://github.com/pypa/pip/issues/5240 +# https://github.com/pypa/pip/issues/5221 +RUN python3 -m pip install -U pip setuptools \ + && pip3 list + +# install fpm +RUN gem install --no-ri --no-rdoc rake fpm + +WORKDIR /root + +ADD . /root diff --git a/.github/workflows/Dockerfile b/.github/workflows/test/Dockerfile similarity index 100% rename from .github/workflows/Dockerfile rename to .github/workflows/test/Dockerfile From 60d4fd61c4fb033bfaced345a37d8fa306061088 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 14:16:48 +0300 Subject: [PATCH 094/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 43b4766ac..8bd56eab2 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -16,8 +16,8 @@ jobs: - name: Set outputs id: cache run: | - echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" - echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/Dockerfile') }}-rc1" + echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/test/Dockerfile') }}-rc1" + echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/build/Dockerfile') }}-rc1" # Convert the GitHub repository name to lowercase echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" echo "::set-output name=DOCKER_FILE_POSTFIX::ubuntu-20-04" From 7ea48839a1a66b9e9154ba6eee737c633e441093 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 14:17:18 +0300 Subject: [PATCH 095/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 8bd56eab2..b97867754 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -47,7 +47,7 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} . + docker build -f .github/workflows/test/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} . docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} mkdir -p ${GITHUB_WORKSPACE}/cache @@ -77,7 +77,7 @@ jobs: if: steps.cache-image.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} . + docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} . docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} mkdir -p ${GITHUB_WORKSPACE}/cache From 091aeed9021d9ebcfb35e06bae8159a129ed8524 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 14:44:07 +0300 Subject: [PATCH 096/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 207 +++++++++++++++++++++++------ 1 file changed, 166 insertions(+), 41 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index b97867754..d36ca7774 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -1,87 +1,212 @@ -name: indy-node-build-u2004 -on: [ push, pull_request ] +name: indy-node-build +on: [ push, pull_request, workflow_dispatch ] jobs: workflow-setup: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest outputs: - CACHE_KEY_CI_IMAGE: ${{ steps.cache.outputs.CACHE_KEY_CI_IMAGE }} - CACHE_KEY_BUILD_IMAGE: ${{ steps.cache.outputs.CACHE_KEY_BUILD_IMAGE }} + CACHE_KEY_LINT: ${{ steps.cache.outputs.CACHE_KEY_LINT }} + CACHE_KEY_BUILD: ${{ steps.cache.outputs.CACHE_KEY_BUILD }} + # Expose the lowercase version of the GitHub repository name + # to all subsequent jobs that reference image repositories + # as the push and pull operations require the URL of the repository + # to be in lowercase. GITHUB_REPOSITORY_NAME: ${{ steps.cache.outputs.GITHUB_REPOSITORY_NAME }} - DOCKER_FILE_POSTFIX: ${{ steps.cache.outputs.DOCKER_FILE_POSTFIX }} steps: - - name: Checkout + - name: Git checkout uses: actions/checkout@v2 - - name: Set outputs id: cache run: | - echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/test/Dockerfile') }}-rc1" - echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/build/Dockerfile') }}-rc1" - # Convert the GitHub repository name to lowercase + echo "::set-output name=CACHE_KEY_LINT::${{ hashFiles('.github/workflows/lint/Dockerfile') }}" + echo "::set-output name=CACHE_KEY_BUILD::${{ hashFiles('.github/workflows/build/Dockerfile') }}" echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" - echo "::set-output name=DOCKER_FILE_POSTFIX::ubuntu-20-04" - - - test-image: - # Reference to workflow-setup job is required to access its various outputs. + + build-lint-image: needs: workflow-setup runs-on: ubuntu-latest env: DOCKER_BUILDKIT: 1 - CACHE_KEY_CI_IMAGE: ${{ needs.workflow-setup.outputs.CACHE_KEY_CI_IMAGE }} + CACHE_KEY_LINT: ${{ needs.workflow-setup.outputs.CACHE_KEY_LINT }} GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} - DOCKER_FILE_POSTFIX: ${{ needs.workflow-setup.outputs.DOCKER_FILE_POSTFIX }} steps: - name: Git checkout uses: actions/checkout@v2 - - name: Try load from cache. - id: cache-image + id: cache-image-lint uses: actions/cache@v2 with: path: ${GITHUB_WORKSPACE}/cache - key: ${{ env.CACHE_KEY_CI_IMAGE}} - + key: ${{ env.CACHE_KEY_LINT }} - name: If NOT found in cache, build and push image. - if: steps.cache-image.outputs.cache-hit != 'true' + if: steps.cache-image-lint.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/test/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} + docker build -f .github/workflows/lint/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest mkdir -p ${GITHUB_WORKSPACE}/cache - touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} - - build-image: - # Reference to workflow-setup job is required to access its various outputs. + touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_LINT }} + build-test-image: needs: workflow-setup runs-on: ubuntu-latest env: DOCKER_BUILDKIT: 1 - CACHE_KEY_BUILD_IMAGE: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD_IMAGE }} + CACHE_KEY_BUILD: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD }} GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} - DOCKER_FILE_POSTFIX: ${{ needs.workflow-setup.outputs.DOCKER_FILE_POSTFIX }} steps: - name: Git checkout uses: actions/checkout@v2 - - name: Try load from cache. - id: cache-image + id: cache-image-build uses: actions/cache@v2 with: path: ${GITHUB_WORKSPACE}/cache - key: ${{ env.CACHE_KEY_BUILD_IMAGE }} - + key: ${{ env.CACHE_KEY_BUILD }} - name: If NOT found in cache, build and push image. - if: steps.cache-image.outputs.cache-hit != 'true' + if: steps.cache-image-build.outputs.cache-hit != 'true' run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin - docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} + docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} . + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache - touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD_IMAGE }} + touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD }} + indy_node: + name: Build Indy Node + needs: build-test-image + runs-on: ubuntu-20.04 + container: + image: ghcr.io/${{ github.repository }}/indy-node-build + strategy: + matrix: + module: [indy_node, indy_common] + slice: [1, 2, 3, 4 ,5, 6, 7,8, 9, 10, 11] + fail-fast: false + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: Install dependencies + run: pip install .[tests] + continue-on-error: true + + - name: Run Indy Node ${{ matrix.module }} test slice ${{ matrix.slice }}/${{ strategy.job-total }} + run: RUSTPYTHONASYNCIODEBUG=0 python3 runner.py --pytest "python3 -m pytest -l -vv --junitxml=test-result-indy-node-${{ matrix.module }}-${{ matrix.slice }}.xml" --dir "${{ matrix.module }}" --output "test-result-indy-node-${{ matrix.slice }}.txt" --test-only-slice "${{ matrix.slice }}/${{ strategy.job-total }}" + + - name: Publish Test Report + uses: scacap/action-surefire-report@v1 + continue-on-error: true + with: + check_name: Indy Node ${{ matrix.module }} ${{ matrix.slice }}/${{ strategy.job-total }} Test Report + github_token: ${{ secrets.GITHUB_TOKEN }} + report_paths: test-result-indy-node-${{ matrix.module }}-${{ matrix.slice }}.xml + + lint: + name: Lint + runs-on: ubuntu-latest + container: + image: ghcr.io/${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }}/indy-node-lint + needs: [workflow-setup, build-lint-image] + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: flake8 + run: python3 -m flake8 + +# name: indy-node-build-u2004 +# on: [ push, pull_request ] + +# jobs: +# workflow-setup: +# runs-on: ubuntu-20.04 +# outputs: +# CACHE_KEY_CI_IMAGE: ${{ steps.cache.outputs.CACHE_KEY_CI_IMAGE }} +# CACHE_KEY_BUILD_IMAGE: ${{ steps.cache.outputs.CACHE_KEY_BUILD_IMAGE }} +# GITHUB_REPOSITORY_NAME: ${{ steps.cache.outputs.GITHUB_REPOSITORY_NAME }} +# DOCKER_FILE_POSTFIX: ${{ steps.cache.outputs.DOCKER_FILE_POSTFIX }} +# steps: +# - name: Checkout +# uses: actions/checkout@v2 + +# - name: Set outputs +# id: cache +# run: | +# echo "::set-output name=CACHE_KEY_CI_IMAGE::${{ hashFiles('.github/workflows/test/Dockerfile') }}-rc1" +# echo "::set-output name=CACHE_KEY_BUILD_IMAGE::${{ hashFiles('.github/workflows/build/Dockerfile') }}-rc1" +# # Convert the GitHub repository name to lowercase +# echo "::set-output name=GITHUB_REPOSITORY_NAME::$(echo ${GITHUB_REPOSITORY,,})" +# echo "::set-output name=DOCKER_FILE_POSTFIX::ubuntu-20-04" + + +# test-image: +# # Reference to workflow-setup job is required to access its various outputs. +# needs: workflow-setup +# runs-on: ubuntu-latest +# env: +# DOCKER_BUILDKIT: 1 +# CACHE_KEY_CI_IMAGE: ${{ needs.workflow-setup.outputs.CACHE_KEY_CI_IMAGE }} +# GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} +# DOCKER_FILE_POSTFIX: ${{ needs.workflow-setup.outputs.DOCKER_FILE_POSTFIX }} +# steps: +# - name: Git checkout +# uses: actions/checkout@v2 + +# - name: Try load from cache. +# id: cache-image +# uses: actions/cache@v2 +# with: +# path: ${GITHUB_WORKSPACE}/cache +# key: ${{ env.CACHE_KEY_CI_IMAGE}} + +# - name: If NOT found in cache, build and push image. +# if: steps.cache-image.outputs.cache-hit != 'true' +# run: | +# echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin +# docker build -f .github/workflows/test/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} . +# docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.CACHE_KEY_CI_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} +# docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-test:${{ env.DOCKER_FILE_POSTFIX }} +# mkdir -p ${GITHUB_WORKSPACE}/cache +# touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_CI_IMAGE }} + +# build-image: +# # Reference to workflow-setup job is required to access its various outputs. +# needs: workflow-setup +# runs-on: ubuntu-latest +# env: +# DOCKER_BUILDKIT: 1 +# CACHE_KEY_BUILD_IMAGE: ${{ needs.workflow-setup.outputs.CACHE_KEY_BUILD_IMAGE }} +# GITHUB_REPOSITORY_NAME: ${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }} +# DOCKER_FILE_POSTFIX: ${{ needs.workflow-setup.outputs.DOCKER_FILE_POSTFIX }} +# steps: +# - name: Git checkout +# uses: actions/checkout@v2 + +# - name: Try load from cache. +# id: cache-image +# uses: actions/cache@v2 +# with: +# path: ${GITHUB_WORKSPACE}/cache +# key: ${{ env.CACHE_KEY_BUILD_IMAGE }} + +# - name: If NOT found in cache, build and push image. +# if: steps.cache-image.outputs.cache-hit != 'true' +# run: | +# echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin +# docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} . +# docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.CACHE_KEY_BUILD_IMAGE }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} +# docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/node-build:${{ env.DOCKER_FILE_POSTFIX }} +# mkdir -p ${GITHUB_WORKSPACE}/cache +# touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD_IMAGE }} + + + + + + + + # indy-common: # name: Build Indy Common # runs-on: ubuntu-latest From 8856629b764f0827ffee1c110630aa64f2f37c2c Mon Sep 17 00:00:00 2001 From: "anton.denishchenko" Date: Fri, 2 Apr 2021 14:53:01 +0300 Subject: [PATCH 097/100] Change Dockerfiles Signed-off-by: anton.denishchenko --- .github/workflows/build/Dockerfile | 41 ++++++++++-------------------- .github/workflows/lint/Dockerfile | 21 +++++++++++++++ .github/workflows/test/Dockerfile | 24 ----------------- 3 files changed, 35 insertions(+), 51 deletions(-) create mode 100644 .github/workflows/lint/Dockerfile delete mode 100644 .github/workflows/test/Dockerfile diff --git a/.github/workflows/build/Dockerfile b/.github/workflows/build/Dockerfile index 1c9f348eb..82d8d571a 100644 --- a/.github/workflows/build/Dockerfile +++ b/.github/workflows/build/Dockerfile @@ -1,30 +1,17 @@ -FROM ubuntu:16.04 +FROM hyperledger/indy-core-baseci:0.0.3-master +LABEL maintainer="Hyperledger " RUN apt-get update -y && apt-get install -y \ - # common stuff - git \ - wget \ - unzip \ - python3.5 \ - python3-pip \ - python3-venv \ - # fmp - ruby \ - ruby-dev \ - rubygems \ - gcc \ - make \ - && rm -rf /var/lib/apt/lists/* + python3-nacl \ + libindy-crypto=0.4.5 \ + libindy=1.15.0~1618-xenial \ +# rocksdb python wrapper + libbz2-dev \ + zlib1g-dev \ + liblz4-dev \ + libsnappy-dev \ + rocksdb=5.8.8 \ + ursa=0.3.2-2 \ + jq -# issues with pip>=10: -# https://github.com/pypa/pip/issues/5240 -# https://github.com/pypa/pip/issues/5221 -RUN python3 -m pip install -U pip setuptools \ - && pip3 list - -# install fpm -RUN gem install --no-ri --no-rdoc rake fpm - -WORKDIR /root - -ADD . /root +RUN indy_image_clean \ No newline at end of file diff --git a/.github/workflows/lint/Dockerfile b/.github/workflows/lint/Dockerfile new file mode 100644 index 000000000..9d47fc036 --- /dev/null +++ b/.github/workflows/lint/Dockerfile @@ -0,0 +1,21 @@ +# Development +FROM ubuntu:20.04 +LABEL maintainer="Hyperledger " + +RUN apt-get update && apt-get dist-upgrade -y + +# Install environment +RUN apt-get install -y \ + git \ + wget \ + python3.5 \ + python3-pip \ + python-setuptools \ + python3-nacl + +RUN pip3 install -U \ + 'pip<10.0.0' \ + setuptools \ + pep8==1.7.1 \ + pep8-naming==0.6.1 \ + flake8==3.5.0 \ No newline at end of file diff --git a/.github/workflows/test/Dockerfile b/.github/workflows/test/Dockerfile deleted file mode 100644 index 46ea2eda4..000000000 --- a/.github/workflows/test/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM hyperledger/indy-core-baseci:0.0.3-master -LABEL maintainer="Hyperledger " - -ARG uid=1000 -ARG user=indy -ARG venv=venv - -RUN apt-get update -y && apt-get install -y \ - python3-nacl \ - ursa=0.3.2-2 \ - libindy=1.13.0~1420 \ -# rocksdb python wrapper - libbz2-dev \ - zlib1g-dev \ - liblz4-dev \ - libsnappy-dev \ - rocksdb=5.8.8 - -RUN indy_ci_add_user $uid $user $venv - -RUN indy_image_clean - -USER $user -WORKDIR /home/$user From 9955c4e99df71d43a6e1d071022d0794b528bab9 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 15:39:17 +0300 Subject: [PATCH 098/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index d36ca7774..20203f2da 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -43,8 +43,8 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/lint/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_LINT }} build-test-image: @@ -68,8 +68,8 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD }} indy_node: From ebcbb4848b1b3af74eb54eb4472a08ceaf1783b7 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 15:53:32 +0300 Subject: [PATCH 099/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index 20203f2da..d36ca7774 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -43,8 +43,8 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/lint/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:${{ env.CACHE_KEY_LINT }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-lint:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_LINT }} build-test-image: @@ -68,8 +68,8 @@ jobs: run: | echo ${{ secrets.CR_PAT }} | docker login ghcr.io --username ${{ secrets.CR_USER }} --password-stdin docker build -f .github/workflows/build/Dockerfile --no-cache -t ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} . - docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build - docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build + docker tag ${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:${{ env.CACHE_KEY_BUILD }} ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest + docker push ghcr.io/${{ env.GITHUB_REPOSITORY_NAME }}/indy-node-build:latest mkdir -p ${GITHUB_WORKSPACE}/cache touch ${GITHUB_WORKSPACE}/cache/${{ env.CACHE_KEY_BUILD }} indy_node: From 9109ed4952cd30b7a1c315d1b9b72dee1043f9d7 Mon Sep 17 00:00:00 2001 From: Anton Denishchenko Date: Fri, 2 Apr 2021 15:59:41 +0300 Subject: [PATCH 100/100] Update build-u18004.yml --- .github/workflows/build-u18004.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-u18004.yml b/.github/workflows/build-u18004.yml index d36ca7774..26030a4f9 100644 --- a/.github/workflows/build-u18004.yml +++ b/.github/workflows/build-u18004.yml @@ -106,7 +106,7 @@ jobs: name: Lint runs-on: ubuntu-latest container: - image: ghcr.io/${{ needs.workflow-setup.outputs.GITHUB_REPOSITORY_NAME }}/indy-node-lint + image: ghcr.io/adenishchenko/indy-node/indy-node-lint needs: [workflow-setup, build-lint-image] steps: - name: Check out code