Esempio n. 1
0
class TestBlobService(TestCase):

    # expecting a JSON file with credentials ("account_name" and "account_key") in test directory
    CREDENTIALS_PATH = os.path.dirname(
        os.path.abspath(__file__)) + '/azurecredentials.json'

    CONTAINER_PREFIX = 'azurepython3-test'

    def setUp(self):
        # find azure credentials for testing. expects them in cwd
        if not os.path.exists(self.CREDENTIALS_PATH):
            raise Exception('Azure Credentials file at "%s" does not exist' %
                            os.path.abspath(self.CREDENTIALS_PATH))

        # read json formatted credentials ("account_name" and "account_key")
        with open(self.CREDENTIALS_PATH, "r") as file:
            self.credentials = json.load(file)

        # create the blob service
        self.service = BlobService(self.credentials['account_name'],
                                   self.credentials['account_key'])

        # generate names for the test containers
        self.container_names = [
            "%s-%d" % (self.CONTAINER_PREFIX, i) for i in range(5)
        ]

    def create_container(self, name):
        # create a test container
        try:
            self.service.create_container(name)
        except HTTPError as e:
            if e.response.status_code != 409:
                raise e

    def tearDown(self):
        # delete the test containers
        for name in self.container_names:
            self.service.delete_container(name)

    def list_containers(self):
        containers = self.service.list_containers()
        for name in self.container_names:
            self.assertIn(name, [x.name for x in containers])

    def test_create_and_list_containers(self):
        for name in self.container_names:
            self.assertTrue(self.service.create_container(name, 'container'))

        self.list_containers()

    def test_create_blob(self):
        container = '%s-test1' % self.CONTAINER_PREFIX

        try:
            self.assertTrue(
                self.service.create_container(container, 'container'))
        except HTTPError as e:
            # there will be a HTTP 409 error if the container already exists
            if e.response.status_code != 409:
                self.fail("Failed to create test container")

        # attempt to upload the file
        data = bytearray(b'test byte string 11.5.2.7.3.14.59.2013.08.12')
        self.assertTrue(
            self.service.create_blob(container, 'somefile.ext', data))

        # delete the container
        self.service.delete_container(container)

    def test_delete_blob(self):
        container = '%s-test2' % self.CONTAINER_PREFIX

        # create a test container
        self.create_container(container)

        # create a file
        self.service.create_blob(container, 'file-to-delete.ext',
                                 bytearray(b'THIS FILE SHOULD BE DELETED'))

        # delete the file
        self.assertTrue(
            self.service.delete_blob(container, 'file-to-delete.ext'))

        # delete the container again
        self.service.delete_container(container)

    def test_list_blobs(self):
        container = '%s-test3' % self.CONTAINER_PREFIX
        self.create_container(container)

        self.service.create_blob(container, 'folder1/file1.ext',
                                 bytearray(b'THIS FILE SHOULD BE LISTED'))
        self.service.create_blob(container, 'folder1/file2.ext',
                                 bytearray(b'THIS FILE SHOULD BE LISTED'))
        self.service.create_blob(container, 'folder2/file3.ext',
                                 bytearray(b'THIS FILE SHOULD BE LISTED'))
        self.service.create_blob(container, 'file4.ext',
                                 bytearray(b'THIS FILE SHOULD BE LISTED'))

        blobs1 = self.service.list_blobs(container)
        self.assertSetEqual(
            {
                'folder1/file1.ext', 'folder1/file2.ext', 'folder2/file3.ext',
                'file4.ext'
            }, set([blob.name for blob in blobs1]))

        blobs2 = self.service.list_blobs(container, prefix='folder1')
        self.assertSetEqual({'folder1/file1.ext', 'folder1/file2.ext'},
                            set([blob.name for blob in blobs2]))

        blobs3 = self.service.list_blobs(container, prefix='folder2')
        self.assertSetEqual({'folder2/file3.ext'},
                            set([blob.name for blob in blobs3]))

        self.service.delete_container(container)
class TestBlobService(TestCase):

    # expecting a JSON file with credentials ("account_name" and "account_key") in test directory
    CREDENTIALS_PATH =  os.path.dirname(os.path.abspath(__file__)) + '/azurecredentials.json'

    CONTAINER_PREFIX = 'azurepython3-test'

    def setUp(self):
        # find azure credentials for testing. expects them in cwd
        if not os.path.exists(self.CREDENTIALS_PATH):
            raise Exception('Azure Credentials file at "%s" does not exist' % os.path.abspath(self.CREDENTIALS_PATH))

        # read json formatted credentials ("account_name" and "account_key")
        with open(self.CREDENTIALS_PATH, "r") as file:
            self.credentials = json.load(file)

        # create the blob service
        self.service = BlobService(self.credentials['account_name'], self.credentials['account_key'])

        # generate names for the test containers
        self.container_names = ["%s-%d" % (self.CONTAINER_PREFIX, i) for i in range(5)]

    def create_container(self, name):
        # create a test container
        try:
            self.service.create_container(name)
        except HTTPError as e:
            if e.response.status_code != 409:
                raise e

    def tearDown(self):
        # delete the test containers
        for name in self.container_names:
            self.service.delete_container(name)

    def list_containers(self):
        containers = self.service.list_containers()
        for name in self.container_names:
            self.assertIn(name, [x.name for x in containers])

    def test_create_and_list_containers(self):
        for name in self.container_names:
            self.assertTrue(self.service.create_container(name, 'container'))

        self.list_containers()

    def test_create_blob(self):
        container = '%s-test1' % self.CONTAINER_PREFIX

        try:
            self.assertTrue(self.service.create_container(container, 'container'))
        except HTTPError as e:
            # there will be a HTTP 409 error if the container already exists
            if e.response.status_code != 409:
                self.fail("Failed to create test container")

        # attempt to upload the file
        data = bytearray(b'test byte string 11.5.2.7.3.14.59.2013.08.12')
        self.assertTrue(self.service.create_blob(container, 'somefile.ext', data))

        # delete the container
        self.service.delete_container(container)

    def test_delete_blob(self):
        container = '%s-test2' % self.CONTAINER_PREFIX

        # create a test container
        self.create_container(container)

        # create a file
        self.service.create_blob(container, 'file-to-delete.ext', bytearray(b'THIS FILE SHOULD BE DELETED'))

        # delete the file
        self.assertTrue(self.service.delete_blob(container, 'file-to-delete.ext'))

        # delete the container again
        self.service.delete_container(container)

    def test_list_blobs(self):
        container = '%s-test3' % self.CONTAINER_PREFIX
        self.create_container(container)

        self.service.create_blob(container, 'folder1/file1.ext', bytearray(b'THIS FILE SHOULD BE LISTED'))
        self.service.create_blob(container, 'folder1/file2.ext', bytearray(b'THIS FILE SHOULD BE LISTED'))
        self.service.create_blob(container, 'folder2/file3.ext', bytearray(b'THIS FILE SHOULD BE LISTED'))
        self.service.create_blob(container, 'file4.ext', bytearray(b'THIS FILE SHOULD BE LISTED'))

        blobs1 = self.service.list_blobs(container)
        self.assertSetEqual({'folder1/file1.ext', 'folder1/file2.ext', 'folder2/file3.ext', 'file4.ext'},
                             set([blob.name for blob in blobs1]))

        blobs2 = self.service.list_blobs(container, prefix = 'folder1')
        self.assertSetEqual({'folder1/file1.ext', 'folder1/file2.ext'}, set([blob.name for blob in blobs2]))

        blobs3 = self.service.list_blobs(container, prefix = 'folder2')
        self.assertSetEqual({'folder2/file3.ext'}, set([blob.name for blob in blobs3]))

        self.service.delete_container(container)