def test_update_state(txn_author_agreement_handler, taa_request): seq_no = 1 txn_time = 1560241033 txn_id = "id" txn = reqToTxn(taa_request) payload = get_payload_data(txn) text = payload[TXN_AUTHOR_AGREEMENT_TEXT] version = payload[TXN_AUTHOR_AGREEMENT_VERSION] digest = StaticTAAHelper.taa_digest(text, version) append_txn_metadata(txn, seq_no, txn_time, txn_id) state_value = { TXN_AUTHOR_AGREEMENT_TEXT: text, TXN_AUTHOR_AGREEMENT_VERSION: version } txn_author_agreement_handler.update_state(txn, None, taa_request) assert txn_author_agreement_handler.get_from_state( StaticTAAHelper.state_path_taa_digest(digest)) == (state_value, seq_no, txn_time) assert txn_author_agreement_handler.state.get( StaticTAAHelper.state_path_taa_latest()) == digest assert txn_author_agreement_handler.state.get( StaticTAAHelper.state_path_taa_version(version)) == digest
def _add_taa_to_state(self, digest, seq_no, txn_time, text, version, ratification_ts): self._set_taa_to_state(digest, seq_no, txn_time, text, version, ratification_ts) self.state.set(StaticTAAHelper.state_path_taa_version(version), digest) self.state.set(StaticTAAHelper.state_path_taa_latest(), digest)
def get_result(self, request: Request): version = request.operation.get(GET_TXN_AUTHOR_AGREEMENT_VERSION) digest = request.operation.get(GET_TXN_AUTHOR_AGREEMENT_DIGEST) timestamp = request.operation.get(GET_TXN_AUTHOR_AGREEMENT_TIMESTAMP) if version is not None: path = StaticTAAHelper.state_path_taa_version(version) digest, proof = self._get_value_from_state(path, with_proof=True) return self._return_txn_author_agreement(request, proof, digest=digest) if digest is not None: path = StaticTAAHelper.state_path_taa_digest(digest) data, proof = self._get_value_from_state(path, with_proof=True) return self._return_txn_author_agreement(request, proof, data=data) if timestamp is not None: head_hash = self.database_manager.ts_store.get_equal_or_prev( timestamp, CONFIG_LEDGER_ID) if head_hash is None: return self._return_txn_author_agreement(request, None) path = StaticTAAHelper.state_path_taa_latest() digest, proof = self._get_value_from_state(path, head_hash, with_proof=True) return self._return_txn_author_agreement(request, proof, head_hash=head_hash, digest=digest) path = StaticTAAHelper.state_path_taa_latest() digest, proof = self._get_value_from_state(path, with_proof=True) return self._return_txn_author_agreement(request, proof, digest=digest)
def test_dynamic_validation_with_not_unique_version( txn_author_agreement_handler, taa_request, set_aml): version = taa_request.operation[TXN_AUTHOR_AGREEMENT_VERSION] txn_author_agreement_handler.state.set( StaticTAAHelper.state_path_taa_version(version), "{}".encode()) with pytest.raises( InvalidClientRequest, match= "Changing existing version of transaction author agreement is forbidden" ): txn_author_agreement_handler.dynamic_validation(taa_request)
def _update_txn_author_agreement(self, seq_no, txn_time, text, version): digest = StaticTAAHelper.taa_digest(text, version) data = encode_state_value( { TXN_AUTHOR_AGREEMENT_TEXT: text, TXN_AUTHOR_AGREEMENT_VERSION: version }, seq_no, txn_time, serializer=config_state_serializer) self.state.set(StaticTAAHelper.state_path_taa_digest(digest), data) self.state.set(StaticTAAHelper.state_path_taa_latest(), digest) self.state.set(StaticTAAHelper.state_path_taa_version(version), digest)
def update_state(self, txn, prev_result, request, is_committed=False): self._validate_txn_type(txn) payload = get_payload_data(txn) text = payload[TXN_AUTHOR_AGREEMENT_TEXT] version = payload[TXN_AUTHOR_AGREEMENT_VERSION] seq_no = get_seq_no(txn) txn_time = get_txn_time(txn) digest = StaticTAAHelper.taa_digest(text, version) data = encode_state_value({ TXN_AUTHOR_AGREEMENT_TEXT: text, TXN_AUTHOR_AGREEMENT_VERSION: version }, seq_no, txn_time, serializer=config_state_serializer) self.state.set(StaticTAAHelper.state_path_taa_digest(digest), data) self.state.set(StaticTAAHelper.state_path_taa_latest(), digest) self.state.set(StaticTAAHelper.state_path_taa_version(version), digest)
def check_taa_in_state(handler, digest, version, state_data): assert handler.get_from_state( StaticTAAHelper.state_path_taa_digest(digest)) == state_data assert handler.state.get(StaticTAAHelper.state_path_taa_version(version), isCommitted=False) == digest.encode()