class BatchCommitted(MessageBase): """ Purpose: pass to Observable after each batch is committed (so that Observable can propagate the data to Observers using ObservedData msg) """ typename = BATCH_COMMITTED schema = ( (f.REQUESTS.nm, IterableField( ClientMessageValidator( operation_schema_is_strict=OPERATION_SCHEMA_IS_STRICT))), (f.LEDGER_ID.nm, LedgerIdField()), (f.INST_ID.nm, NonNegativeNumberField()), (f.VIEW_NO.nm, NonNegativeNumberField()), (f.PP_SEQ_NO.nm, NonNegativeNumberField()), (f.PP_TIME.nm, TimestampField()), (f.STATE_ROOT.nm, MerkleRootField()), (f.TXN_ROOT.nm, MerkleRootField()), (f.SEQ_NO_START.nm, NonNegativeNumberField()), (f.SEQ_NO_END.nm, NonNegativeNumberField()), (f.AUDIT_TXN_ROOT_HASH.nm, MerkleRootField(nullable=True)), (f.PRIMARIES.nm, IterableField(LimitedLengthStringField(max_length=NAME_FIELD_LIMIT))), (f.ORIGINAL_VIEW_NO.nm, NonNegativeNumberField()), )
class ThreePCState(MessageBase): typename = THREE_PC_STATE schema = ( (f.INST_ID.nm, NonNegativeNumberField()), (f.MSGS.nm, IterableField(ClientMessageValidator( operation_schema_is_strict=True))), )
class Propagate(MessageBase): typename = PROPAGATE schema = ( (f.REQUEST.nm, ClientMessageValidator( operation_schema_is_strict=OPERATION_SCHEMA_IS_STRICT)), (f.SENDER_CLIENT.nm, LimitedLengthStringField(max_length=SENDER_CLIENT_FIELD_LIMIT, nullable=True)), )
class Propagate(MessageBase): typename = PROPAGATE schema = ( (f.REQUEST.nm, ClientMessageValidator(operation_schema_is_strict=True)), (f.SENDER_CLIENT.nm, NonEmptyStringField(nullable=True)), )
def test_client_req_not_strict_by_default(): validator = ClientMessageValidator(operation_schema_is_strict=False) operation = { TXN_TYPE: NYM, TARGET_NYM: TEST_TARGET_NYM, VERKEY: TEST_VERKEY_ABBREVIATED, "some_new_field_op1": "some_new_value_op1", "some_new_field_op2": "some_new_value_op2" } req_dict = {f.IDENTIFIER.nm: "1" * 16, f.REQ_ID.nm: 1, OPERATION: operation, f.SIG.nm: "signature", f.PROTOCOL_VERSION.nm: CURRENT_PROTOCOL_VERSION, "some_new_field1": "some_new_value1", "some_new_field2": "some_new_value2"} validator.validate(req_dict)
def test_client_req_strict(): validator = ClientMessageValidator(operation_schema_is_strict=True, schema_is_strict=True) operation = { TXN_TYPE: NYM, TARGET_NYM: TEST_TARGET_NYM, VERKEY: TEST_VERKEY_ABBREVIATED, } req_dict = {f.IDENTIFIER.nm: "1" * 16, f.REQ_ID.nm: 1, OPERATION: operation, f.SIG.nm: "signature", f.PROTOCOL_VERSION.nm: CURRENT_PROTOCOL_VERSION, "some_new_field": "some_new_value"} with pytest.raises(TypeError) as excinfo: validator.validate(req_dict) assert ("unknown field - some_new_field=some_new_value" in str(excinfo.value))
def test_client_req_not_strict_by_default(): validator = ClientMessageValidator(operation_schema_is_strict=False) operation = { TXN_TYPE: NYM, TARGET_NYM: TEST_TARGET_NYM, VERKEY: TEST_VERKEY_ABBREVIATED, "some_new_field_op1": "some_new_value_op1", "some_new_field_op2": "some_new_value_op2" } req_dict = { f.IDENTIFIER.nm: "1" * 16, f.REQ_ID.nm: 1, OPERATION: operation, f.SIG.nm: "signature", f.PROTOCOL_VERSION.nm: CURRENT_PROTOCOL_VERSION, "some_new_field1": "some_new_value1", "some_new_field2": "some_new_value2" } validator.validate(req_dict)
def test_client_req_strict_operation(): validator = ClientMessageValidator(operation_schema_is_strict=True) operation = { TXN_TYPE: NYM, TARGET_NYM: TEST_TARGET_NYM, VERKEY: TEST_VERKEY_ABBREVIATED, "some_new_field_op": "some_new_value_op" } req_dict = { f.IDENTIFIER.nm: "1" * 16, f.REQ_ID.nm: 1, OPERATION: operation, f.SIG.nm: "signature", f.PROTOCOL_VERSION.nm: CURRENT_PROTOCOL_VERSION, "some_new_field": "some_new_value" } with pytest.raises(TypeError) as excinfo: validator.validate(req_dict) assert ("unknown field - some_new_field_op=some_new_value_op" in str(excinfo.value))
class BatchCommitted(MessageBase): """ Purpose: pass to Observable after each batch is committed (so that Observable can propagate the data to Observers using ObservedData msg) """ typename = BATCH_COMMITTED schema = ((f.REQUESTS.nm, IterableField( ClientMessageValidator(operation_schema_is_strict=True))), (f.LEDGER_ID.nm, LedgerIdField()), (f.PP_TIME.nm, TimestampField()), (f.STATE_ROOT.nm, MerkleRootField()), (f.TXN_ROOT.nm, MerkleRootField()), (f.SEQ_NO_START.nm, NonNegativeNumberField()), (f.SEQ_NO_END.nm, NonNegativeNumberField()))
def __init__(self, **kwargs): ClientMessageValidator.__init__(self, operation_schema_is_strict=OPERATION_SCHEMA_IS_STRICT) self.validate(kwargs) Request.__init__(self, **kwargs)
def validator(): return ClientMessageValidator(operation_schema_is_strict=True)
def validator(request): operation_schema_is_strict = request.param == 'operation_schema_is_strict' schema_is_strict = request.param == 'schema_is_strict' return ClientMessageValidator( operation_schema_is_strict=operation_schema_is_strict, schema_is_strict=schema_is_strict)
def __init__(self, **kwargs): ClientMessageValidator.__init__(self, operation_schema_is_strict=False, schema_is_strict=False) self.validate(kwargs) Request.__init__(self, **kwargs)