예제 #1
0
    def test_http_get_redirect(self):
        # Add two layers of redirects to the response stack, which will
        # return the default 200 OK with the expected data after resolving
        # both redirects.
        self._mock_requests()
        redirect1 = {"location": "http://example.com/teapot.img"}
        redirect2 = {"location": "http://example.com/teapot_real.img"}
        responses = [utils.fake_response(),
                     utils.fake_response(status_code=301, headers=redirect2),
                     utils.fake_response(status_code=302, headers=redirect1)]

        def getresponse(*args, **kwargs):
            return responses.pop()
        self.request.side_effect = getresponse

        uri = "http://netloc/path/to/file.tar.gz"
        expected_returns = ['I ', 'am', ' a', ' t', 'ea', 'po', 't,', ' s',
                            'ho', 'rt', ' a', 'nd', ' s', 'to', 'ut', '\n']

        loc = location.get_location_from_uri(uri, conf=self.conf)
        (image_file, image_size) = self.store.get(loc)
        self.assertEqual(0, len(responses))
        self.assertEqual(image_size, 31)

        chunks = [c for c in image_file]
        self.assertEqual(chunks, expected_returns)
예제 #2
0
    def test_http_get_redirect(self, mock_api_session):
        # Add two layers of redirects to the response stack, which will
        # return the default 200 OK with the expected data after resolving
        # both redirects.
        redirect1 = {"location": "https://example.com?dsName=ds1&dcPath=dc1"}
        redirect2 = {"location": "https://example.com?dsName=ds2&dcPath=dc2"}
        responses = [
            utils.fake_response(),
            utils.fake_response(status_code=302, headers=redirect1),
            utils.fake_response(status_code=301, headers=redirect2)
        ]

        def getresponse(*args, **kwargs):
            return responses.pop()

        expected_image_size = 31
        expected_returns = ['I am a teapot, short and stout\n']
        loc = location.get_location_from_uri(
            "vsphere://127.0.0.1/folder/openstack_glance/%s"
            "?dsName=ds1&dcPath=dc1" % FAKE_UUID,
            conf=self.conf)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.side_effect = getresponse
            (image_file, image_size) = self.store.get(loc)
        self.assertEqual(image_size, expected_image_size)
        chunks = [c for c in image_file]
        self.assertEqual(expected_returns, chunks)
예제 #3
0
    def test_http_get_redirect(self):
        # Add two layers of redirects to the response stack, which will
        # return the default 200 OK with the expected data after resolving
        # both redirects.
        self._mock_requests()
        redirect1 = {"location": "http://example.com/teapot.img"}
        redirect2 = {"location": "http://example.com/teapot_real.img"}
        responses = [
            utils.fake_response(),
            utils.fake_response(status_code=301, headers=redirect2),
            utils.fake_response(status_code=302, headers=redirect1)
        ]

        def getresponse(*args, **kwargs):
            return responses.pop()

        self.request.side_effect = getresponse

        uri = "http://netloc/path/to/file.tar.gz"
        expected_returns = [
            'I ', 'am', ' a', ' t', 'ea', 'po', 't,', ' s', 'ho', 'rt', ' a',
            'nd', ' s', 'to', 'ut', '\n'
        ]

        loc = location.get_location_from_uri(uri, conf=self.conf)
        (image_file, image_size) = self.store.get(loc)
        self.assertEqual(0, len(responses))
        self.assertEqual(31, image_size)

        chunks = [c for c in image_file]
        self.assertEqual(expected_returns, chunks)
 def test_delete(self, mock_api_session):
     """Test we can delete an existing image in the VMware store."""
     loc = location.get_location_from_uri_and_backend(
         "vsphere://127.0.0.1/folder/openstack_glance/%s?"
         "dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response()
         vm_store.Store._service_content = mock.Mock()
         self.store.delete(loc)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response(status_code=404)
         self.assertRaises(exceptions.NotFound, self.store.get, loc)
예제 #5
0
 def test_delete(self, mock_api_session):
     """Test we can delete an existing image in the VMware store."""
     loc = location.get_location_from_uri_and_backend(
         "vsphere://127.0.0.1/folder/openstack_glance/%s?"
         "dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response()
         vm_store.Store._service_content = mock.Mock()
         self.store.delete(loc)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response(status_code=404)
         self.assertRaises(exceptions.NotFound, self.store.get, loc)
예제 #6
0
 def test_add(self, fake_api_session, fake_size, fake_select_datastore):
     """Test that we can add an image via the VMware backend."""
     fake_select_datastore.return_value = self.store.datastores[0][0]
     expected_image_id = str(uuid.uuid4())
     expected_size = FIVE_KB
     expected_contents = b"*" * expected_size
     hash_code = hashlib.md5(expected_contents)
     expected_checksum = hash_code.hexdigest()
     fake_size.__get__ = mock.Mock(return_value=expected_size)
     with mock.patch('hashlib.md5') as md5:
         md5.return_value = hash_code
         expected_location = format_location(
             VMWARE_DS['vmware_server_host'],
             VMWARE_DS['vmware_store_image_dir'],
             expected_image_id,
             VMWARE_DS['vmware_datastores'])
         image = six.BytesIO(expected_contents)
         with mock.patch('requests.Session.request') as HttpConn:
             HttpConn.return_value = utils.fake_response()
             location, size, checksum, _ = self.store.add(expected_image_id,
                                                          image,
                                                          expected_size)
     self.assertEqual(utils.sort_url_by_qs_keys(expected_location),
                      utils.sort_url_by_qs_keys(location))
     self.assertEqual(expected_size, size)
     self.assertEqual(expected_checksum, checksum)
    def test_add(self, fake_api_session, fake_size, fake_select_datastore,
                 fake_cookie):
        """Test that we can add an image via the VMware backend."""
        fake_select_datastore.return_value = self.store.datastores[0][0]
        expected_image_id = str(uuid.uuid4())
        expected_size = FIVE_KB
        expected_contents = b"*" * expected_size
        hash_code = secretutils.md5(expected_contents, usedforsecurity=False)
        expected_checksum = hash_code.hexdigest()
        fake_size.__get__ = mock.Mock(return_value=expected_size)
        expected_cookie = 'vmware_soap_session=fake-uuid'
        fake_cookie.return_value = expected_cookie
        expected_headers = {
            'Content-Length': six.text_type(expected_size),
            'Cookie': expected_cookie
        }
        with mock.patch('hashlib.md5') as md5:
            md5.return_value = hash_code
            expected_location = format_location(
                VMWARE_DS['vmware_server_host'],
                VMWARE_DS['vmware_store_image_dir'], expected_image_id,
                VMWARE_DS['vmware_datastores'])
            image = six.BytesIO(expected_contents)
            with mock.patch('requests.Session.request') as HttpConn:
                HttpConn.return_value = utils.fake_response()
                location, size, checksum, metadata = self.store.add(
                    expected_image_id, image, expected_size)
                _, kwargs = HttpConn.call_args
                self.assertEqual(expected_headers, kwargs['headers'])
                self.assertEqual("vmware1", metadata["store"])

        self.assertEqual(utils.sort_url_by_qs_keys(expected_location),
                         utils.sort_url_by_qs_keys(location))
        self.assertEqual(expected_size, size)
        self.assertEqual(expected_checksum, checksum)
예제 #8
0
 def test_add_size_zero(self, mock_api_session, fake_size,
                        fake_select_datastore):
     """
     Test that when specifying size zero for the image to add,
     the actual size of the image is returned.
     """
     fake_select_datastore.return_value = self.store.datastores[0][0]
     expected_image_id = str(uuid.uuid4())
     expected_size = FIVE_KB
     expected_contents = b"*" * expected_size
     hash_code = hashlib.md5(expected_contents)
     expected_checksum = hash_code.hexdigest()
     fake_size.__get__ = mock.Mock(return_value=expected_size)
     with mock.patch('hashlib.md5') as md5:
         md5.return_value = hash_code
         expected_location = format_location(
             VMWARE_DS['vmware_server_host'],
             VMWARE_DS['vmware_store_image_dir'], expected_image_id,
             VMWARE_DS['vmware_datastores'])
         image = six.BytesIO(expected_contents)
         with mock.patch('requests.Session.request') as HttpConn:
             HttpConn.return_value = utils.fake_response()
             location, size, checksum, _ = self.store.add(
                 expected_image_id, image, 0)
     self.assertEqual(utils.sort_url_by_qs_keys(expected_location),
                      utils.sort_url_by_qs_keys(location))
     self.assertEqual(expected_size, size)
     self.assertEqual(expected_checksum, checksum)
    def test_add(self, fake_api_session, fake_size, fake_select_datastore,
                 fake_cookie):
        """Test that we can add an image via the VMware backend."""
        fake_select_datastore.return_value = self.store.datastores[0][0]
        expected_image_id = str(uuid.uuid4())
        expected_size = FIVE_KB
        expected_contents = b"*" * expected_size
        hash_code = hashlib.md5(expected_contents)
        expected_checksum = hash_code.hexdigest()
        fake_size.__get__ = mock.Mock(return_value=expected_size)
        expected_cookie = 'vmware_soap_session=fake-uuid'
        fake_cookie.return_value = expected_cookie
        expected_headers = {'Content-Length': six.text_type(expected_size),
                            'Cookie': expected_cookie}
        with mock.patch('hashlib.md5') as md5:
            md5.return_value = hash_code
            expected_location = format_location(
                VMWARE_DS['vmware_server_host'],
                VMWARE_DS['vmware_store_image_dir'],
                expected_image_id,
                VMWARE_DS['vmware_datastores'])
            image = six.BytesIO(expected_contents)
            with mock.patch('requests.Session.request') as HttpConn:
                HttpConn.return_value = utils.fake_response()
                location, size, checksum, metadata = self.store.add(
                    expected_image_id, image, expected_size)
                _, kwargs = HttpConn.call_args
                self.assertEqual(expected_headers, kwargs['headers'])
                self.assertEqual("vmware1", metadata["backend"])

        self.assertEqual(utils.sort_url_by_qs_keys(expected_location),
                         utils.sort_url_by_qs_keys(location))
        self.assertEqual(expected_size, size)
        self.assertEqual(expected_checksum, checksum)
    def test_add_size_zero(self, mock_api_session, fake_size,
                           fake_select_datastore):
        """
        Test that when specifying size zero for the image to add,
        the actual size of the image is returned.
        """
        fake_select_datastore.return_value = self.store.datastores[0][0]
        expected_image_id = str(uuid.uuid4())
        expected_size = FIVE_KB
        expected_contents = b"*" * expected_size
        hash_code = hashlib.md5(expected_contents)
        expected_checksum = hash_code.hexdigest()
        fake_size.__get__ = mock.Mock(return_value=expected_size)
        with mock.patch('hashlib.md5') as md5:
            md5.return_value = hash_code
            expected_location = format_location(
                VMWARE_DS['vmware_server_host'],
                VMWARE_DS['vmware_store_image_dir'],
                expected_image_id,
                VMWARE_DS['vmware_datastores'])
            image = six.BytesIO(expected_contents)
            with mock.patch('requests.Session.request') as HttpConn:
                HttpConn.return_value = utils.fake_response()
                location, size, checksum, metadata = self.store.add(
                    expected_image_id, image, 0)
                self.assertEqual("vmware1", metadata["backend"])

        self.assertEqual(utils.sort_url_by_qs_keys(expected_location),
                         utils.sort_url_by_qs_keys(location))
        self.assertEqual(expected_size, size)
        self.assertEqual(expected_checksum, checksum)
예제 #11
0
    def test_http_get_not_found(self):
        self._mock_requests()
        fake = utils.fake_response(status_code=404, content="404 Not Found")
        self.request.return_value = fake

        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.NotFound, self.store.get, loc)
예제 #12
0
    def test_http_get_not_found(self):
        self._mock_requests()
        fake = utils.fake_response(status_code=404, content="404 Not Found")
        self.request.return_value = fake

        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.NotFound, self.store.get, loc)
예제 #13
0
    def test_http_get_redirect_invalid(self):
        self._mock_requests()
        redirect = {"location": "http://example.com/teapot.img"}
        redirect_resp = utils.fake_response(status_code=307, headers=redirect)
        self.request.return_value = redirect_resp

        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.BadStoreUri, self.store.get, loc)
예제 #14
0
    def test_http_get_redirect_invalid(self):
        self._mock_requests()
        redirect = {"location": "http://example.com/teapot.img"}
        redirect_resp = utils.fake_response(status_code=307, headers=redirect)
        self.request.return_value = redirect_resp

        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.BadStoreUri, self.store.get, loc)
예제 #15
0
    def test_http_delete_raise_error(self):
        self._mock_requests()
        self.request.return_value = utils.fake_response()

        uri = "https://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.StoreDeleteNotSupported,
                          self.store.delete, loc)
        self.assertRaises(exceptions.StoreDeleteNotSupported,
                          glance_store.delete_from_backend, uri, {})
    def test_http_get_redirect_invalid(self, mock_api_session):
        redirect = {"location": "https://example.com?dsName=ds1&dcPath=dc1"}

        loc = location.get_location_from_uri_and_backend(
            "vsphere://127.0.0.1/folder/openstack_glance/%s"
            "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.return_value = utils.fake_response(status_code=307,
                                                        headers=redirect)
            self.assertRaises(exceptions.BadStoreUri, self.store.get, loc)
예제 #17
0
    def test_http_get_size_with_non_existent_image_raises_Not_Found(self):
        self._mock_requests()
        self.request.return_value = utils.fake_response(
            status_code=404, content='404 Not Found')

        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.NotFound, self.store.get_size, loc)
        self.request.assert_called_once_with('HEAD', uri, stream=True,
                                             allow_redirects=False)
예제 #18
0
    def test_http_delete_raise_error(self):
        self._mock_requests()
        self.request.return_value = utils.fake_response()

        uri = "https://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.StoreDeleteNotSupported,
                          self.store.delete, loc)
        self.assertRaises(exceptions.StoreDeleteNotSupported,
                          glance_store.delete_from_backend, uri, {})
예제 #19
0
    def test_http_get_redirect_invalid(self, mock_api_session):
        redirect = {"location": "https://example.com?dsName=ds1&dcPath=dc1"}

        loc = location.get_location_from_uri_and_backend(
            "vsphere://127.0.0.1/folder/openstack_glance/%s"
            "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.return_value = utils.fake_response(status_code=307,
                                                        headers=redirect)
            self.assertRaises(exceptions.BadStoreUri, self.store.get, loc)
예제 #20
0
 def test_unexpected_status(self, mock_api_session, mock_select_datastore):
     expected_image_id = str(uuid.uuid4())
     expected_size = FIVE_KB
     expected_contents = b"*" * expected_size
     image = six.BytesIO(expected_contents)
     self.session = mock.Mock()
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response(status_code=401)
         self.assertRaises(exceptions.BackendException, self.store.add,
                           expected_image_id, image, expected_size)
예제 #21
0
 def test_get_size_non_existing(self, mock_api_session):
     """
     Test that trying to retrieve an image size that doesn't exist
     raises an error
     """
     loc = location.get_location_from_uri(
         "vsphere://127.0.0.1/folder/openstack_glan"
         "ce/%s?dsName=ds1&dcPath=dc1" % FAKE_UUID, conf=self.conf)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response(status_code=404)
         self.assertRaises(exceptions.NotFound, self.store.get_size, loc)
 def test_get_size(self, mock_api_session):
     """
     Test we can get the size of an existing image in the VMware store
     """
     loc = location.get_location_from_uri_and_backend(
         "vsphere://127.0.0.1/folder/openstack_glance/%s"
         "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response()
         image_size = self.store.get_size(loc)
     self.assertEqual(image_size, 31)
 def test_unexpected_status(self, mock_api_session, mock_select_datastore):
     expected_image_id = str(uuid.uuid4())
     expected_size = FIVE_KB
     expected_contents = b"*" * expected_size
     image = six.BytesIO(expected_contents)
     self.session = mock.Mock()
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response(status_code=401)
         self.assertRaises(exceptions.BackendException,
                           self.store.add,
                           expected_image_id, image, expected_size)
예제 #24
0
 def test_get_size(self, mock_api_session):
     """
     Test we can get the size of an existing image in the VMware store
     """
     loc = location.get_location_from_uri_and_backend(
         "vsphere://127.0.0.1/folder/openstack_glance/%s"
         "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response()
         image_size = self.store.get_size(loc)
     self.assertEqual(image_size, 31)
예제 #25
0
    def test_add_with_verifier_size_zero(self, fake_reader, fake_select_ds):
        """Test that the verifier is passed to the _ChunkReader during add."""
        verifier = mock.MagicMock(name='mock_verifier')
        image_id = str(uuid.uuid4())
        size = FIVE_KB
        contents = b"*" * size
        image = six.BytesIO(contents)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.return_value = utils.fake_response()
            self.store.add(image_id, image, 0, verifier=verifier)

        fake_reader.assert_called_with(image, verifier)
예제 #26
0
 def test_unexpected_status_no_response_body(self, mock_api_session,
                                             mock_select_datastore):
     expected_image_id = str(uuid.uuid4())
     expected_size = FIVE_KB
     expected_contents = b"*" * expected_size
     image = six.BytesIO(expected_contents)
     self.session = mock.Mock()
     with self._mock_http_connection() as HttpConn:
         HttpConn.return_value = utils.fake_response(status_code=500,
                                                     no_response_body=True)
         self.assertRaises(exceptions.BackendException, self.store.add,
                           expected_image_id, image, expected_size)
예제 #27
0
    def test_http_get(self):
        self._mock_requests()
        self.request.return_value = utils.fake_response()

        uri = "http://netloc/path/to/file.tar.gz"
        expected_returns = ['I ', 'am', ' a', ' t', 'ea', 'po', 't,', ' s',
                            'ho', 'rt', ' a', 'nd', ' s', 'to', 'ut', '\n']
        loc = location.get_location_from_uri(uri, conf=self.conf)
        (image_file, image_size) = self.store.get(loc)
        self.assertEqual(image_size, 31)
        chunks = [c for c in image_file]
        self.assertEqual(expected_returns, chunks)
예제 #28
0
    def test_add_with_verifier_size_zero(self, fake_reader, fake_select_ds):
        """Test that the verifier is passed to the _ChunkReader during add."""
        verifier = mock.MagicMock(name='mock_verifier')
        image_id = str(uuid.uuid4())
        size = FIVE_KB
        contents = b"*" * size
        image = six.BytesIO(contents)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.return_value = utils.fake_response()
            self.store.add(image_id, image, 0, verifier=verifier)

        fake_reader.assert_called_with(image, verifier)
예제 #29
0
    def test_http_get_size_with_non_existent_image_raises_Not_Found(self):
        self._mock_requests()
        self.request.return_value = utils.fake_response(
            status_code=404, content='404 Not Found')

        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.NotFound, self.store.get_size, loc)
        self.request.assert_called_once_with('HEAD',
                                             uri,
                                             stream=True,
                                             allow_redirects=False)
예제 #30
0
 def test_get(self, mock_api_session):
     """Test a "normal" retrieval of an image in chunks."""
     expected_image_size = 31
     expected_returns = ['I am a teapot, short and stout\n']
     loc = location.get_location_from_uri_and_backend(
         "vsphere://127.0.0.1/folder/openstack_glance/%s"
         "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response()
         (image_file, image_size) = self.store.get(loc)
     self.assertEqual(expected_image_size, image_size)
     chunks = [c for c in image_file]
     self.assertEqual(expected_returns, chunks)
 def test_unexpected_status_no_response_body(self, mock_api_session,
                                             mock_select_datastore):
     expected_image_id = str(uuid.uuid4())
     expected_size = FIVE_KB
     expected_contents = b"*" * expected_size
     image = six.BytesIO(expected_contents)
     self.session = mock.Mock()
     with self._mock_http_connection() as HttpConn:
         HttpConn.return_value = utils.fake_response(status_code=500,
                                                     no_response_body=True)
         self.assertRaises(exceptions.BackendException,
                           self.store.add,
                           expected_image_id, image, expected_size)
예제 #32
0
    def test_http_get_max_redirects(self):
        self._mock_requests()
        redirect = {"location": "http://example.com/teapot.img"}
        responses = ([utils.fake_response(status_code=302, headers=redirect)]
                     * (http.MAX_REDIRECTS + 2))

        def getresponse(*args, **kwargs):
            return responses.pop()

        self.request.side_effect = getresponse
        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.MaxRedirectsExceeded, self.store.get, loc)
 def test_get(self, mock_api_session):
     """Test a "normal" retrieval of an image in chunks."""
     expected_image_size = 31
     expected_returns = ['I am a teapot, short and stout\n']
     loc = location.get_location_from_uri_and_backend(
         "vsphere://127.0.0.1/folder/openstack_glance/%s"
         "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
     with mock.patch('requests.Session.request') as HttpConn:
         HttpConn.return_value = utils.fake_response()
         (image_file, image_size) = self.store.get(loc)
     self.assertEqual(expected_image_size, image_size)
     chunks = [c for c in image_file]
     self.assertEqual(expected_returns, chunks)
예제 #34
0
    def test_http_get_max_redirects(self):
        self._mock_requests()
        redirect = {"location": "http://example.com/teapot.img"}
        responses = ([utils.fake_response(status_code=302, headers=redirect)] *
                     (http.MAX_REDIRECTS + 2))

        def getresponse(*args, **kwargs):
            return responses.pop()

        self.request.side_effect = getresponse
        uri = "http://netloc/path/to/file.tar.gz"
        loc = location.get_location_from_uri(uri, conf=self.conf)
        self.assertRaises(exceptions.MaxRedirectsExceeded, self.store.get, loc)
    def test_add_with_verifier_size_zero(self, fake_reader, fake_select_ds):
        """Test that the verifier is passed to the _ChunkReader during add."""
        verifier = mock.MagicMock(name='mock_verifier')
        image_id = str(uuid.uuid4())
        size = FIVE_KB
        contents = b"*" * size
        image = six.BytesIO(contents)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.return_value = utils.fake_response()
            location, size, checksum, multihash, metadata = self.store.add(
                image_id, image, 0, self.hash_algo, verifier=verifier)
            self.assertEqual("vmware1", metadata["backend"])

        fake_reader.assert_called_with(image, self.hash_algo, verifier)
예제 #36
0
    def test_http_get(self):
        self._mock_requests()
        self.request.return_value = utils.fake_response()

        uri = "http://netloc/path/to/file.tar.gz"
        expected_returns = [
            'I ', 'am', ' a', ' t', 'ea', 'po', 't,', ' s', 'ho', 'rt', ' a',
            'nd', ' s', 'to', 'ut', '\n'
        ]
        loc = location.get_location_from_uri(uri, conf=self.conf)
        (image_file, image_size) = self.store.get(loc)
        self.assertEqual(31, image_size)
        chunks = [c for c in image_file]
        self.assertEqual(expected_returns, chunks)
    def test_add_with_verifier_size_zero(self, fake_reader, fake_select_ds):
        """Test that the verifier is passed to the _ChunkReader during add."""
        verifier = mock.MagicMock(name='mock_verifier')
        image_id = str(uuid.uuid4())
        size = FIVE_KB
        contents = b"*" * size
        image = six.BytesIO(contents)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.return_value = utils.fake_response()
            location, size, checksum, multihash, metadata = self.store.add(
                image_id, image, 0, self.hash_algo, verifier=verifier)
            self.assertEqual("vmware1", metadata["store"])

        fake_reader.assert_called_with(image, self.hash_algo, verifier)
    def test_http_get_max_redirects(self, mock_api_session):
        redirect = {"location": "https://example.com?dsName=ds1&dcPath=dc1"}
        responses = ([utils.fake_response(status_code=302, headers=redirect)]
                     * (vm_store.MAX_REDIRECTS + 1))

        def getresponse(*args, **kwargs):
            return responses.pop()

        loc = location.get_location_from_uri_and_backend(
            "vsphere://127.0.0.1/folder/openstack_glance/%s"
            "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.side_effect = getresponse
            self.assertRaises(exceptions.MaxRedirectsExceeded, self.store.get,
                              loc)
예제 #39
0
    def test_http_get_max_redirects(self, mock_api_session):
        redirect = {"location": "https://example.com?dsName=ds1&dcPath=dc1"}
        responses = ([utils.fake_response(status_code=302, headers=redirect)]
                     * (vm_store.MAX_REDIRECTS + 1))

        def getresponse(*args, **kwargs):
            return responses.pop()

        loc = location.get_location_from_uri_and_backend(
            "vsphere://127.0.0.1/folder/openstack_glance/%s"
            "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.side_effect = getresponse
            self.assertRaises(exceptions.MaxRedirectsExceeded, self.store.get,
                              loc)
    def test_http_get_redirect(self, mock_api_session):
        # Add two layers of redirects to the response stack, which will
        # return the default 200 OK with the expected data after resolving
        # both redirects.
        redirect1 = {"location": "https://example.com?dsName=ds1&dcPath=dc1"}
        redirect2 = {"location": "https://example.com?dsName=ds2&dcPath=dc2"}
        responses = [utils.fake_response(),
                     utils.fake_response(status_code=302, headers=redirect1),
                     utils.fake_response(status_code=301, headers=redirect2)]

        def getresponse(*args, **kwargs):
            return responses.pop()

        expected_image_size = 31
        expected_returns = ['I am a teapot, short and stout\n']
        loc = location.get_location_from_uri_and_backend(
            "vsphere://127.0.0.1/folder/openstack_glance/%s"
            "?dsName=ds1&dcPath=dc1" % FAKE_UUID, "vmware1", conf=self.conf)
        with mock.patch('requests.Session.request') as HttpConn:
            HttpConn.side_effect = getresponse
            (image_file, image_size) = self.store.get(loc)
        self.assertEqual(expected_image_size, image_size)
        chunks = [c for c in image_file]
        self.assertEqual(expected_returns, chunks)