def __init__(self, operation=None, unique_batch_item_id=None, request_payload=None, message_extension=None): super(RequestBatchItem, self).__init__(tag=Tags.REQUEST_BATCH_ITEM) self.payload_factory = RequestPayloadFactory() self.operation = operation self.unique_batch_item_id = unique_batch_item_id self.request_payload = request_payload self.message_extension = message_extension
class RequestBatchItem(Struct): def __init__(self, operation=None, unique_batch_item_id=None, request_payload=None, message_extension=None): super(self.__class__, self).__init__(tag=Tags.REQUEST_BATCH_ITEM) self.payload_factory = RequestPayloadFactory() self.operation = operation self.unique_batch_item_id = unique_batch_item_id self.request_payload = request_payload self.message_extension = message_extension def read(self, istream): super(self.__class__, self).read(istream) tstream = BytearrayStream(istream.read(self.length)) # Read the batch item operation self.operation = contents.Operation() self.operation.read(tstream) # Read the unique batch item ID if it is present if self.is_tag_next(Tags.UNIQUE_BATCH_ITEM_ID, tstream): self.unique_batch_item_id = contents.UniqueBatchItemID() self.unique_batch_item_id.read(tstream) # Dynamically create the response payload class that belongs to the # operation self.request_payload = self.payload_factory.create( self.operation.enum) self.request_payload.read(tstream) # Read the message extension if it is present if self.is_tag_next(Tags.MESSAGE_EXTENSION, tstream): self.message_extension = contents.MessageExtension() self.message_extension.read(tstream) self.is_oversized(tstream) def write(self, ostream): tstream = BytearrayStream() # Write the contents of the batch item to the stream self.operation.write(tstream) if self.unique_batch_item_id is not None: self.unique_batch_item_id.write(tstream) self.request_payload.write(tstream) if self.message_extension is not None: self.message_extension.write(tstream) # Write the length and value of the batch item self.length = tstream.length() super(self.__class__, self).write(ostream) ostream.write(tstream.buffer)
class RequestBatchItem(Struct): def __init__(self, operation=None, unique_batch_item_id=None, request_payload=None, message_extension=None): super(RequestBatchItem, self).__init__(tag=Tags.REQUEST_BATCH_ITEM) self.payload_factory = RequestPayloadFactory() self.operation = operation self.unique_batch_item_id = unique_batch_item_id self.request_payload = request_payload self.message_extension = message_extension def read(self, istream): super(RequestBatchItem, self).read(istream) tstream = BytearrayStream(istream.read(self.length)) # Read the batch item operation self.operation = contents.Operation() self.operation.read(tstream) # Read the unique batch item ID if it is present if self.is_tag_next(Tags.UNIQUE_BATCH_ITEM_ID, tstream): self.unique_batch_item_id = contents.UniqueBatchItemID() self.unique_batch_item_id.read(tstream) # Dynamically create the response payload class that belongs to the # operation self.request_payload = self.payload_factory.create( self.operation.value) self.request_payload.read(tstream) # Read the message extension if it is present if self.is_tag_next(Tags.MESSAGE_EXTENSION, tstream): self.message_extension = contents.MessageExtension() self.message_extension.read(tstream) self.is_oversized(tstream) def write(self, ostream): tstream = BytearrayStream() # Write the contents of the batch item to the stream self.operation.write(tstream) if self.unique_batch_item_id is not None: self.unique_batch_item_id.write(tstream) self.request_payload.write(tstream) if self.message_extension is not None: self.message_extension.write(tstream) # Write the length and value of the batch item self.length = tstream.length() super(RequestBatchItem, self).write(ostream) ostream.write(tstream.buffer)
class RequestBatchItem(Struct): def __init__(self, operation=None, unique_batch_item_id=None, request_payload=None, message_extension=None, ephemeral=None): super(RequestBatchItem, self).__init__(tag=Tags.REQUEST_BATCH_ITEM) self.payload_factory = RequestPayloadFactory() self.operation = operation self.unique_batch_item_id = unique_batch_item_id self.request_payload = request_payload self.message_extension = message_extension self.ephemeral = ephemeral @property def ephemeral(self): if self._ephemeral: return self._ephemeral.value return None @ephemeral.setter def ephemeral(self, value): if value is None: self._ephemeral = None elif isinstance(value, bool): ephemeral = primitives.Boolean( value=value, tag=enums.Tags.EPHEMERAL ) self._ephemeral = ephemeral else: raise TypeError("The ephemeral value must be a boolean.") def read(self, istream, kmip_version=enums.KMIPVersion.KMIP_1_0): super(RequestBatchItem, self).read( istream, kmip_version=kmip_version ) tstream = BytearrayStream(istream.read(self.length)) # Read the batch item operation self.operation = contents.Operation() self.operation.read(tstream, kmip_version=kmip_version) if kmip_version >= enums.KMIPVersion.KMIP_2_0: if self.is_tag_next(enums.Tags.EPHEMERAL, tstream): ephemeral = primitives.Boolean(tag=enums.Tags.EPHEMERAL) ephemeral.read(tstream, kmip_version=kmip_version) self._ephemeral = ephemeral # Read the unique batch item ID if it is present if self.is_tag_next(Tags.UNIQUE_BATCH_ITEM_ID, tstream): self.unique_batch_item_id = contents.UniqueBatchItemID() self.unique_batch_item_id.read(tstream, kmip_version=kmip_version) # Dynamically create the response payload class that belongs to the # operation self.request_payload = self.payload_factory.create( self.operation.value) self.request_payload.read(tstream, kmip_version=kmip_version) # Read the message extension if it is present if self.is_tag_next(Tags.MESSAGE_EXTENSION, tstream): self.message_extension = contents.MessageExtension() self.message_extension.read(tstream, kmip_version=kmip_version) self.is_oversized(tstream) def write(self, ostream, kmip_version=enums.KMIPVersion.KMIP_1_0): tstream = BytearrayStream() # Write the contents of the batch item to the stream self.operation.write(tstream, kmip_version=kmip_version) if kmip_version >= enums.KMIPVersion.KMIP_2_0: if self._ephemeral: self._ephemeral.write(tstream, kmip_version=kmip_version) if self.unique_batch_item_id is not None: self.unique_batch_item_id.write(tstream, kmip_version=kmip_version) self.request_payload.write(tstream, kmip_version=kmip_version) if self.message_extension is not None: self.message_extension.write(tstream, kmip_version=kmip_version) # Write the length and value of the batch item self.length = tstream.length() super(RequestBatchItem, self).write( ostream, kmip_version=kmip_version ) ostream.write(tstream.buffer)
def setUp(self): super(TestRequestPayloadFactory, self).setUp() self.factory = RequestPayloadFactory()
class TestRequestPayloadFactory(testtools.TestCase): def setUp(self): super(TestRequestPayloadFactory, self).setUp() self.factory = RequestPayloadFactory() def tearDown(self): super(TestRequestPayloadFactory, self).tearDown() def _test_not_implemented(self, func, args): self.assertRaises(NotImplementedError, func, args) def _test_payload_type(self, payload, payload_type): msg = "expected {0}, received {1}".format(payload_type, payload) self.assertIsInstance(payload, payload_type, msg) def test_create_create_payload(self): payload = self.factory.create(Operation.CREATE) self._test_payload_type(payload, create.CreateRequestPayload) def test_create_create_key_pair_payload(self): payload = self.factory.create(Operation.CREATE_KEY_PAIR) self._test_payload_type( payload, create_key_pair.CreateKeyPairRequestPayload) def test_create_register_payload(self): payload = self.factory.create(Operation.REGISTER) self._test_payload_type(payload, register.RegisterRequestPayload) def test_create_rekey_payload(self): self._test_not_implemented( self.factory.create, Operation.REKEY) def test_create_derive_key_payload(self): self._test_not_implemented( self.factory.create, Operation.DERIVE_KEY) def test_create_certify_payload(self): self._test_not_implemented( self.factory.create, Operation.CERTIFY) def test_create_recertify_payload(self): self._test_not_implemented( self.factory.create, Operation.RECERTIFY) def test_create_locate_payload(self): payload = self.factory.create(Operation.LOCATE) self._test_payload_type(payload, locate.LocateRequestPayload) def test_create_check_payload(self): self._test_not_implemented( self.factory.create, Operation.CHECK) def test_create_get_payload(self): payload = self.factory.create(Operation.GET) self._test_payload_type(payload, get.GetRequestPayload) def test_create_get_attributes_payload(self): self._test_not_implemented( self.factory.create, Operation.GET_ATTRIBUTES) def test_create_get_attributes_list_payload(self): self._test_not_implemented( self.factory.create, Operation.GET_ATTRIBUTE_LIST) def test_create_add_attribute_payload(self): self._test_not_implemented( self.factory.create, Operation.ADD_ATTRIBUTE) def test_create_modify_attribute_payload(self): self._test_not_implemented( self.factory.create, Operation.MODIFY_ATTRIBUTE) def test_create_delete_attribute_payload(self): self._test_not_implemented( self.factory.create, Operation.DELETE_ATTRIBUTE) def test_create_obtain_lease_payload(self): self._test_not_implemented( self.factory.create, Operation.OBTAIN_LEASE) def test_create_get_usage_allocation_payload(self): self._test_not_implemented( self.factory.create, Operation.GET_USAGE_ALLOCATION) def test_create_activate_payload(self): self._test_not_implemented( self.factory.create, Operation.ACTIVATE) def test_create_revoke_payload(self): self._test_not_implemented( self.factory.create, Operation.REVOKE) def test_create_destroy_payload(self): payload = self.factory.create(Operation.DESTROY) self._test_payload_type(payload, destroy.DestroyRequestPayload) def test_create_archive_payload(self): self._test_not_implemented( self.factory.create, Operation.ARCHIVE) def test_create_recover_payload(self): self._test_not_implemented( self.factory.create, Operation.RECOVER) def test_create_validate_payload(self): self._test_not_implemented( self.factory.create, Operation.VALIDATE) def test_create_query_payload(self): payload = self.factory.create(Operation.QUERY) self._test_payload_type(payload, query.QueryRequestPayload) def test_create_cancel_payload(self): self._test_not_implemented( self.factory.create, Operation.CANCEL) def test_create_poll_payload(self): self._test_not_implemented( self.factory.create, Operation.POLL) def test_create_notify_payload(self): self._test_not_implemented( self.factory.create, Operation.NOTIFY) def test_create_put_payload(self): self._test_not_implemented( self.factory.create, Operation.PUT) def test_create_rekey_key_pair_payload(self): payload = self.factory.create(Operation.REKEY_KEY_PAIR) self._test_payload_type( payload, rekey_key_pair.RekeyKeyPairRequestPayload) def test_create_discover_versions_payload(self): payload = self.factory.create(Operation.DISCOVER_VERSIONS) self._test_payload_type( payload, discover_versions.DiscoverVersionsRequestPayload)
class TestRequestPayloadFactory(testtools.TestCase): def setUp(self): super(TestRequestPayloadFactory, self).setUp() self.factory = RequestPayloadFactory() def tearDown(self): super(TestRequestPayloadFactory, self).tearDown() def _test_not_implemented(self, func, args): self.assertRaises(NotImplementedError, func, args) def _test_payload_type(self, payload, payload_type): msg = "expected {0}, received {1}".format(payload_type, payload) self.assertIsInstance(payload, payload_type, msg) def test_create_create_payload(self): payload = self.factory.create(enums.Operation.CREATE) self._test_payload_type(payload, payloads.CreateRequestPayload) def test_create_create_key_pair_payload(self): payload = self.factory.create(enums.Operation.CREATE_KEY_PAIR) self._test_payload_type( payload, payloads.CreateKeyPairRequestPayload ) def test_create_register_payload(self): payload = self.factory.create(enums.Operation.REGISTER) self._test_payload_type(payload, payloads.RegisterRequestPayload) def test_create_rekey_payload(self): self._test_not_implemented(self.factory.create, enums.Operation.REKEY) def test_create_derive_key_payload(self): payload = self.factory.create(enums.Operation.DERIVE_KEY) self._test_payload_type(payload, payloads.DeriveKeyRequestPayload) def test_create_certify_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.CERTIFY ) def test_create_recertify_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.RECERTIFY ) def test_create_locate_payload(self): payload = self.factory.create(enums.Operation.LOCATE) self._test_payload_type(payload, payloads.LocateRequestPayload) def test_create_check_payload(self): self._test_not_implemented(self.factory.create, enums.Operation.CHECK) def test_create_get_payload(self): payload = self.factory.create(enums.Operation.GET) self._test_payload_type(payload, payloads.GetRequestPayload) def test_create_get_attributes_payload(self): payload = self.factory.create(enums.Operation.GET_ATTRIBUTES) self._test_payload_type( payload, payloads.GetAttributesRequestPayload ) def test_create_get_attributes_list_payload(self): payload = self.factory.create(enums.Operation.GET_ATTRIBUTE_LIST) self._test_payload_type( payload, payloads.GetAttributeListRequestPayload ) def test_create_add_attribute_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.ADD_ATTRIBUTE ) def test_create_modify_attribute_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.MODIFY_ATTRIBUTE ) def test_create_delete_attribute_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.DELETE_ATTRIBUTE ) def test_create_obtain_lease_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.OBTAIN_LEASE ) def test_create_get_usage_allocation_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.GET_USAGE_ALLOCATION ) def test_create_activate_payload(self): payload = self.factory.create(enums.Operation.ACTIVATE) self._test_payload_type(payload, payloads.ActivateRequestPayload) def test_create_revoke_payload(self): payload = self.factory.create(enums.Operation.REVOKE) self._test_payload_type(payload, payloads.RevokeRequestPayload) def test_create_destroy_payload(self): payload = self.factory.create(enums.Operation.DESTROY) self._test_payload_type(payload, payloads.DestroyRequestPayload) def test_create_archive_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.ARCHIVE ) def test_create_recover_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.RECOVER ) def test_create_validate_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.VALIDATE ) def test_create_query_payload(self): payload = self.factory.create(enums.Operation.QUERY) self._test_payload_type(payload, payloads.QueryRequestPayload) def test_create_cancel_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.CANCEL ) def test_create_poll_payload(self): self._test_not_implemented(self.factory.create, enums.Operation.POLL) def test_create_notify_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.NOTIFY ) def test_create_put_payload(self): self._test_not_implemented(self.factory.create, enums.Operation.PUT) def test_create_rekey_key_pair_payload(self): payload = self.factory.create(enums.Operation.REKEY_KEY_PAIR) self._test_payload_type( payload, payloads.RekeyKeyPairRequestPayload ) def test_create_discover_versions_payload(self): payload = self.factory.create(enums.Operation.DISCOVER_VERSIONS) self._test_payload_type( payload, payloads.DiscoverVersionsRequestPayload ) def test_create_encrypt_payload(self): payload = self.factory.create(enums.Operation.ENCRYPT) self._test_payload_type(payload, payloads.EncryptRequestPayload) def test_create_decrypt_payload(self): payload = self.factory.create(enums.Operation.DECRYPT) self._test_payload_type(payload, payloads.DecryptRequestPayload) def test_create_sign_payload(self): payload = self.factory.create(enums.Operation.SIGN) self._test_payload_type(payload, payloads.SignRequestPayload) def test_create_signature_verify_payload(self): payload = self.factory.create(enums.Operation.SIGNATURE_VERIFY) self._test_payload_type( payload, payloads.SignatureVerifyRequestPayload ) def test_create_mac_payload(self): payload = self.factory.create(enums.Operation.MAC) self._test_payload_type(payload, payloads.MACRequestPayload) def test_create_mac_verify_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.MAC_VERIFY ) def test_create_rng_retrieve_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.RNG_RETRIEVE ) def test_create_rng_seed_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.RNG_SEED ) def test_create_hash_payload(self): self._test_not_implemented(self.factory.create, enums.Operation.HASH) def test_create_create_split_key_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.CREATE_SPLIT_KEY ) def test_create_join_split_key_payload(self): self._test_not_implemented( self.factory.create, enums.Operation.JOIN_SPLIT_KEY )
class TestRequestPayloadFactory(testtools.TestCase): def setUp(self): super(TestRequestPayloadFactory, self).setUp() self.factory = RequestPayloadFactory() def tearDown(self): super(TestRequestPayloadFactory, self).tearDown() def _test_not_implemented(self, func, args): self.assertRaises(NotImplementedError, func, args) def _test_payload_type(self, payload, payload_type): msg = "expected {0}, received {1}".format(payload_type, payload) self.assertIsInstance(payload, payload_type, msg) def test_create_create_payload(self): payload = self.factory.create(Operation.CREATE) self._test_payload_type(payload, create.CreateRequestPayload) def test_create_create_key_pair_payload(self): payload = self.factory.create(Operation.CREATE_KEY_PAIR) self._test_payload_type(payload, create_key_pair.CreateKeyPairRequestPayload) def test_create_register_payload(self): payload = self.factory.create(Operation.REGISTER) self._test_payload_type(payload, register.RegisterRequestPayload) def test_create_rekey_payload(self): self._test_not_implemented(self.factory.create, Operation.REKEY) def test_create_derive_key_payload(self): self._test_not_implemented(self.factory.create, Operation.DERIVE_KEY) def test_create_certify_payload(self): self._test_not_implemented(self.factory.create, Operation.CERTIFY) def test_create_recertify_payload(self): self._test_not_implemented(self.factory.create, Operation.RECERTIFY) def test_create_locate_payload(self): payload = self.factory.create(Operation.LOCATE) self._test_payload_type(payload, locate.LocateRequestPayload) def test_create_check_payload(self): self._test_not_implemented(self.factory.create, Operation.CHECK) def test_create_get_payload(self): payload = self.factory.create(Operation.GET) self._test_payload_type(payload, get.GetRequestPayload) def test_create_get_attributes_payload(self): self._test_not_implemented(self.factory.create, Operation.GET_ATTRIBUTES) def test_create_get_attributes_list_payload(self): payload = self.factory.create(Operation.GET_ATTRIBUTE_LIST) self._test_payload_type( payload, get_attribute_list.GetAttributeListRequestPayload) def test_create_add_attribute_payload(self): self._test_not_implemented(self.factory.create, Operation.ADD_ATTRIBUTE) def test_create_modify_attribute_payload(self): self._test_not_implemented(self.factory.create, Operation.MODIFY_ATTRIBUTE) def test_create_delete_attribute_payload(self): self._test_not_implemented(self.factory.create, Operation.DELETE_ATTRIBUTE) def test_create_obtain_lease_payload(self): self._test_not_implemented(self.factory.create, Operation.OBTAIN_LEASE) def test_create_get_usage_allocation_payload(self): self._test_not_implemented(self.factory.create, Operation.GET_USAGE_ALLOCATION) def test_create_activate_payload(self): payload = self.factory.create(Operation.ACTIVATE) self._test_payload_type(payload, activate.ActivateRequestPayload) def test_create_revoke_payload(self): payload = self.factory.create(Operation.REVOKE) self._test_payload_type(payload, revoke.RevokeRequestPayload) def test_create_destroy_payload(self): payload = self.factory.create(Operation.DESTROY) self._test_payload_type(payload, destroy.DestroyRequestPayload) def test_create_archive_payload(self): self._test_not_implemented(self.factory.create, Operation.ARCHIVE) def test_create_recover_payload(self): self._test_not_implemented(self.factory.create, Operation.RECOVER) def test_create_validate_payload(self): self._test_not_implemented(self.factory.create, Operation.VALIDATE) def test_create_query_payload(self): payload = self.factory.create(Operation.QUERY) self._test_payload_type(payload, query.QueryRequestPayload) def test_create_cancel_payload(self): self._test_not_implemented(self.factory.create, Operation.CANCEL) def test_create_poll_payload(self): self._test_not_implemented(self.factory.create, Operation.POLL) def test_create_notify_payload(self): self._test_not_implemented(self.factory.create, Operation.NOTIFY) def test_create_put_payload(self): self._test_not_implemented(self.factory.create, Operation.PUT) def test_create_rekey_key_pair_payload(self): payload = self.factory.create(Operation.REKEY_KEY_PAIR) self._test_payload_type(payload, rekey_key_pair.RekeyKeyPairRequestPayload) def test_create_discover_versions_payload(self): payload = self.factory.create(Operation.DISCOVER_VERSIONS) self._test_payload_type( payload, discover_versions.DiscoverVersionsRequestPayload)