Exemplo n.º 1
0
    def test_dataitem_remove(self):
        conn = mock.Mock()
        self.client.connection = conn

        dataitem = DataItem(self.client,
                            parent_id=self.parent_id,
                            name=self.keyname)
        dataitem.remove()
        params = {'parent_id': dataitem.parent_id, 'name': dataitem.name}
        conn.make_request.assert_called_once_with('remove_dataitem', params)
Exemplo n.º 2
0
    def test_dataitem_remove(self):
        conn = mock.Mock()
        self.client.connection = conn

        dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname)
        dataitem.remove()
        params = {
                'parent_id': dataitem.parent_id,
                'name': dataitem.name
            }
        conn.make_request.assert_called_once_with('remove_dataitem', params)
Exemplo n.º 3
0
    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'))
Exemplo n.º 4
0
    def test_dataitem_rename(self):
        conn = mock.Mock()
        self.client.connection = conn

        dataitem = DataItem(self.client, parent_id=self.parent_id, name=self.keyname)
        dataitem.rename('new_name2')
        params = {
                'parent_id': dataitem.parent_id,
                'name': self.keyname,
                'new_name': 'new_name2'
            }
        conn.make_request.assert_called_once_with('rename_dataitem', params)
        self.assertNotEquals(self.keyname, dataitem.name)
Exemplo n.º 5
0
    def test_dataitem_rename(self):
        conn = mock.Mock()
        self.client.connection = conn

        dataitem = DataItem(self.client,
                            parent_id=self.parent_id,
                            name=self.keyname)
        dataitem.rename('new_name2')
        params = {
            'parent_id': dataitem.parent_id,
            'name': self.keyname,
            'new_name': 'new_name2'
        }
        conn.make_request.assert_called_once_with('rename_dataitem', params)
        self.assertNotEquals(self.keyname, dataitem.name)
Exemplo n.º 6
0
    def test_dataitem_init(self):
        dataitem = DataItem(self.client,
                            parent_id=self.parent_id,
                            name=self.keyname)

        self.assertEquals(dataitem.name, self.keyname)
        self.assertEquals(dataitem.parent_id, self.parent_id)
Exemplo n.º 7
0
 def test_dataitem_init_meta(self):
     self._mock_client_make_request(meta=None)
     meta = "v1:TEST:DATA::"
     dataitem = DataItem(self.client,
                         parent_id=self.parent_id,
                         name=self.keyname,
                         meta=meta)
     self.assertEquals(dataitem.meta, {'TEST': 'DATA', '__version__': 1})
Exemplo n.º 8
0
 def test_dataitem_meta(self):
     self._mock_client_make_request(meta="v1:META:DATA::")
     dataitem = DataItem(self.client,
                         parent_id=self.parent_id,
                         name=self.keyname)
     response = dataitem.meta
     self.assertEquals(response, {'META': 'DATA', '__version__': 1})
     self.assertNotEquals(dataitem.meta, None)
Exemplo n.º 9
0
 def test_dataitem_modified_date(self):
     self._mock_client_make_request(modified_date="1234")
     dataitem = DataItem(self.client,
                         parent_id=self.parent_id,
                         name=self.keyname)
     response = dataitem.modified_date
     self.assertEquals(response, "1234")
     self.assertNotEquals(dataitem.modified_date, None)
Exemplo n.º 10
0
    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')
Exemplo n.º 11
0
    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'))
Exemplo n.º 12
0
    def test_dataitem_checksum(self):
        self._mock_client_make_request(checksum=4321)
        dataitem = DataItem(self.client,
                            parent_id=self.parent_id,
                            name=self.keyname)
        response = dataitem.md5sum

        self.assertEquals(response, "4321")
        self.assertNotEquals(dataitem.md5sum, None)
Exemplo n.º 13
0
    def test_dataitem_size(self):
        self._mock_client_make_request(length=4321)
        dataitem = DataItem(self.client,
                            parent_id=self.parent_id,
                            name=self.keyname)
        response = dataitem.size

        self.assertEquals(response, 4321)
        self.assertNotEquals(dataitem.size, None)
Exemplo n.º 14
0
    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'))
Exemplo n.º 15
0
    def dataitems(self):
        """Lists DataItems (dataitems) directly under the cluster.

        Queries the elfcloud.fi server with cluster's own ID and returns a list of DataItems.

        """
        method = "list_dataitems"
        params = {"parent_id": self.id}
        response = self._client.connection.make_request(method, params)

        data_items = []
        for item in response:
            data_items.append(DataItem(self._client, **item))
        return data_items
Exemplo n.º 16
0
    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')
Exemplo n.º 17
0
    def test_store_data_no_key_hash_exception(self):
        conn = self._mock_client_make_request(name=self.keyname,
                                              parent_id=self.parent_id,
                                              meta='v1:A:B:C:D:ENC:NONE::')
        conn.make_query.return_value = {}
        conn.make_transaction.return_value = None
        self.client.connection = conn
        self.client.encryption_mode = ENC_AES256

        test_data = io.StringIO("Some test data to be sent to server")
        dataitem = DataItem(self.client,
                            parent_id=self.parent_id,
                            name=self.keyname)
        self.assertRaises(ClientException, dataitem.store_data, test_data,
                          "append", 0)
Exemplo n.º 18
0
    def test_fetch_data(self):
        headers = {}
        headers['X-ELFCLOUD-KEY'] = base64.b64encode(self.keyname)
        headers['X-ELFCLOUD-PARENT'] = self.parent_id

        conn = mock.Mock()
        conn.make_transaction.return_value = mock.Mock(
            headers={'X-ELFCLOUD-HASH': "4321"})
        self.client.connection = conn

        dataitem = DataItem(self.client,
                            parent_id=self.parent_id,
                            name=self.keyname)
        response = dataitem.data

        self.assertEquals(response['checksum'], "4321")
        self.assertEquals(type(response['data']), FileIterator)
        conn.make_transaction.assert_called_once_with(headers, "/fetch")

        self.client.set_encryption_key("12345678901234561234567890123456")
        self.client.encryption_mode = ENC_AES256
        response = dataitem.data
        self.assertEquals(type(response['data']), CryptIterator)
Exemplo n.º 19
0
    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'))