def test_store_data(self): test_data = io.StringIO("Some test data to be sent to server") md5 = hashlib.md5() md5.update(test_data.read()) test_data.seek(0) test_data.get_content_hash = lambda: "aabbccddeeff1122" headers = {} headers['X-ELFCLOUD-STORE-MODE'] = "new" headers['X-ELFCLOUD-KEY'] = base64.b64encode(self.keyname) headers['X-ELFCLOUD-PARENT'] = self.parent_id headers['X-ELFCLOUD-META'] = 'v1:TGS:tag1,tag2:DSC:NewDescription:ENC:NONE::' headers['Content-Type'] = 'application/octet-stream' headers['X-ELFCLOUD-HASH'] = md5.hexdigest() headers['Content-Length'] = len(test_data.read()) test_data.seek(0) conn = self._mock_client_make_request(name=self.keyname, parent_id=self.parent_id, meta='v1:TGS:tag1,tag2:DSC:NewDescription:ENC:NONE::', checksum=md5.hexdigest()) conn.make_transaction.return_value = None self.client.connection = conn dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname) response = dataitem.store_data(test_data, "new", offset=None, description="NewDescription", tags=['tag1', 'tag2']) self.assertEquals(response, None) conn.make_transaction.assert_called_with(headers, '/store', 'Some test data to be sent to server') conn.reset_mock() test_data.seek(0) self.client.set_encryption_key("12345678901234561234567890123456") self.client.encryption_mode = ENC_AES256 headers['X-ELFCLOUD-META'] = 'v1:KHA:abcdef123456789:ENC:AES256::' response = dataitem.store_data(test_data, method="new", offset=None, key_hash="abcdef123456789") self.assertEquals(response, None) conn.make_transaction.assert_called_with(headers, '/store', 'Some test data to be sent to server') self.assertRaises(ECDataItemException, dataitem.store_data, test_data, "new", offset=None, key_hash="abcdef123456789") conn.reset_mock() test_data.seek(0) file_iter = FileIterator(test_data, 4) self.client.set_encryption_key("") self.client.encryption_mode = ENC_NONE headers['X-ELFCLOUD-META'] = 'v1:ENC:NONE::' headers['X-ELFCLOUD-HASH'] = hashlib.md5("Some").hexdigest() headers['Content-Length'] = 3 headers['X-ELFCLOUD-STORE-MODE'] = "append" response = dataitem.store_data(file_iter, "new", offset=None) self.assertEquals(response, None) self.assertEquals(conn.make_transaction.mock_calls[8], mock.call(headers, '/store', 'ver'))
def test_store_with_patch(self): test_data = io.StringIO("Some test data to be sent to server") md5 = hashlib.md5() md5.update(test_data.read()) test_data.seek(0) headers = {} headers['X-ELFCLOUD-STORE-MODE'] = "patch" headers['X-ELFCLOUD-KEY'] = base64.b64encode(self.keyname) headers['X-ELFCLOUD-PARENT'] = self.parent_id headers['X-ELFCLOUD-META'] = 'v1:A:B:C:D:ENC:NONE::' headers['Content-Type'] = 'application/octet-stream' headers['X-ELFCLOUD-HASH'] = md5.hexdigest() headers['X-ELFCLOUD-OFFSET'] = 13 headers['Content-Length'] = len(test_data.read()) test_data.seek(0) response_headers = {'X-ELFCLOUD-META': 'v1:A:B:C:D::'} conn = self._mock_client_make_request(name=self.keyname, parent_id=self.parent_id, meta='v1:A:B:C:D:ENC:NONE::', checksum=md5.hexdigest()) conn.make_transaction.return_value = "OK" conn.make_query.return_value = response_headers # Old headers self.client.connection = conn dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname) response = dataitem.store_data(test_data, "patch", offset=13) self.assertEquals(response, None) conn.make_transaction.assert_called_with( headers, '/store', 'Some test data to be sent to server') conn.reset_mock() test_data.seek(0) headers['X-ELFCLOUD-HASH'] = hashlib.md5("Some").hexdigest() headers['X-ELFCLOUD-OFFSET'] = 13 + len(test_data.read( )) - 3 # start offset + len(content) - last chunk size headers['Content-Length'] = 3 test_data.seek(0) file_iter = FileIterator(test_data, 4) response = dataitem.store_data(file_iter, "patch", offset=13) self.assertEquals(response, None) self.assertEquals(conn.make_transaction.mock_calls[8], mock.call(headers, '/store', 'ver'))
def test_store_with_patch(self): test_data = io.StringIO("Some test data to be sent to server") md5 = hashlib.md5() md5.update(test_data.read()) test_data.seek(0) headers = {} headers['X-ELFCLOUD-STORE-MODE'] = "patch" headers['X-ELFCLOUD-KEY'] = base64.b64encode(self.keyname) headers['X-ELFCLOUD-PARENT'] = self.parent_id headers['X-ELFCLOUD-META'] = 'v1:A:B:C:D:ENC:NONE::' headers['Content-Type'] = 'application/octet-stream' headers['X-ELFCLOUD-HASH'] = md5.hexdigest() headers['X-ELFCLOUD-OFFSET'] = 13 headers['Content-Length'] = len(test_data.read()) test_data.seek(0) response_headers = {'X-ELFCLOUD-META': 'v1:A:B:C:D::'} conn = self._mock_client_make_request(name=self.keyname, parent_id=self.parent_id, meta='v1:A:B:C:D:ENC:NONE::', checksum=md5.hexdigest()) conn.make_transaction.return_value = "OK" conn.make_query.return_value = response_headers # Old headers self.client.connection = conn dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname) response = dataitem.store_data(test_data, "patch", offset=13) self.assertEquals(response, None) conn.make_transaction.assert_called_with(headers, '/store', 'Some test data to be sent to server') conn.reset_mock() test_data.seek(0) headers['X-ELFCLOUD-HASH'] = hashlib.md5("Some").hexdigest() headers['X-ELFCLOUD-OFFSET'] = 13 + len(test_data.read()) - 3 # start offset + len(content) - last chunk size headers['Content-Length'] = 3 test_data.seek(0) file_iter = FileIterator(test_data, 4) response = dataitem.store_data(file_iter, "patch", offset=13) self.assertEquals(response, None) self.assertEquals(conn.make_transaction.mock_calls[8], mock.call(headers, '/store', 'ver'))
def test_store_data_del_kha_del_cha(self): test_data = io.StringIO("Some test data to be sent to server") md5 = hashlib.md5() data = test_data.read() md5.update(data) test_data.seek(0) test_data.get_content_hash = lambda: "aabbccddeeff1122" headers = {} headers['X-ELFCLOUD-STORE-MODE'] = "replace" headers['X-ELFCLOUD-KEY'] = base64.b64encode(self.keyname) headers['X-ELFCLOUD-PARENT'] = self.parent_id headers[ 'X-ELFCLOUD-META'] = 'v1:TGS:tag1,tag2:ENC:NONE:DSC:NewDescription::' headers['Content-Type'] = 'application/octet-stream' headers['X-ELFCLOUD-HASH'] = md5.hexdigest() headers['Content-Length'] = len(test_data.read()) test_data.seek(0) conn = mock.Mock() conn.make_request.return_value = [{ 'modified_date': None, 'name': self.keyname, 'md5sum': "aabbccddeeff1122", 'parent_id': self.parent_id, 'last_accessed_date': None, 'meta': 'v1:TGS:tag1,tag2:ENC:AES128:DSC:NewDescription:KHA:ajsidoasj:CHA:ajsdoijas::', 'size': 999 }] self.client.connection = conn self.client.set_encryption_key("") self.client.encryption_mode = ENC_NONE dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname) response = dataitem.store_data(test_data, "replace", offset=None, description="NewDescription", tags=['tag1', 'tag2']) self.assertEquals(response, None) conn.make_transaction.assert_called_once_with( headers, '/store', 'Some test data to be sent to server')
def test_store_data_del_kha_del_cha(self): test_data = io.StringIO("Some test data to be sent to server") md5 = hashlib.md5() data = test_data.read() md5.update(data) test_data.seek(0) test_data.get_content_hash = lambda: "aabbccddeeff1122" headers = {} headers['X-ELFCLOUD-STORE-MODE'] = "replace" headers['X-ELFCLOUD-KEY'] = base64.b64encode(self.keyname) headers['X-ELFCLOUD-PARENT'] = self.parent_id headers['X-ELFCLOUD-META'] = 'v1:TGS:tag1,tag2:ENC:NONE:DSC:NewDescription::' headers['Content-Type'] = 'application/octet-stream' headers['X-ELFCLOUD-HASH'] = md5.hexdigest() headers['Content-Length'] = len(test_data.read()) test_data.seek(0) conn = mock.Mock() conn.make_request.return_value = [{ 'modified_date': None, 'name': self.keyname, 'md5sum': "aabbccddeeff1122", 'parent_id': self.parent_id, 'last_accessed_date': None, 'meta': 'v1:TGS:tag1,tag2:ENC:AES128:DSC:NewDescription:KHA:ajsidoasj:CHA:ajsdoijas::', 'size': 999 }] self.client.connection = conn self.client.set_encryption_key("") self.client.encryption_mode = ENC_NONE dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname) response = dataitem.store_data(test_data, "replace", offset=None, description="NewDescription", tags=['tag1', 'tag2']) self.assertEquals(response, None) conn.make_transaction.assert_called_once_with(headers, '/store', 'Some test data to be sent to server')
def test_store_data(self): test_data = io.StringIO("Some test data to be sent to server") md5 = hashlib.md5() md5.update(test_data.read()) test_data.seek(0) test_data.get_content_hash = lambda: "aabbccddeeff1122" headers = {} headers['X-ELFCLOUD-STORE-MODE'] = "new" headers['X-ELFCLOUD-KEY'] = base64.b64encode(self.keyname) headers['X-ELFCLOUD-PARENT'] = self.parent_id headers[ 'X-ELFCLOUD-META'] = 'v1:TGS:tag1,tag2:DSC:NewDescription:ENC:NONE::' headers['Content-Type'] = 'application/octet-stream' headers['X-ELFCLOUD-HASH'] = md5.hexdigest() headers['Content-Length'] = len(test_data.read()) test_data.seek(0) conn = self._mock_client_make_request( name=self.keyname, parent_id=self.parent_id, meta='v1:TGS:tag1,tag2:DSC:NewDescription:ENC:NONE::', checksum=md5.hexdigest()) conn.make_transaction.return_value = None self.client.connection = conn dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname) response = dataitem.store_data(test_data, "new", offset=None, description="NewDescription", tags=['tag1', 'tag2']) self.assertEquals(response, None) conn.make_transaction.assert_called_with( headers, '/store', 'Some test data to be sent to server') conn.reset_mock() test_data.seek(0) self.client.set_encryption_key("12345678901234561234567890123456") self.client.encryption_mode = ENC_AES256 headers['X-ELFCLOUD-META'] = 'v1:KHA:abcdef123456789:ENC:AES256::' response = dataitem.store_data(test_data, method="new", offset=None, key_hash="abcdef123456789") self.assertEquals(response, None) conn.make_transaction.assert_called_with( headers, '/store', 'Some test data to be sent to server') self.assertRaises(ECDataItemException, dataitem.store_data, test_data, "new", offset=None, key_hash="abcdef123456789") conn.reset_mock() test_data.seek(0) file_iter = FileIterator(test_data, 4) self.client.set_encryption_key("") self.client.encryption_mode = ENC_NONE headers['X-ELFCLOUD-META'] = 'v1:ENC:NONE::' headers['X-ELFCLOUD-HASH'] = hashlib.md5("Some").hexdigest() headers['Content-Length'] = 3 headers['X-ELFCLOUD-STORE-MODE'] = "append" response = dataitem.store_data(file_iter, "new", offset=None) self.assertEquals(response, None) self.assertEquals(conn.make_transaction.mock_calls[8], mock.call(headers, '/store', 'ver'))