예제 #1
0
    def setUp(self):
        """Run before each test."""
        super(ShellTest, self).setUp()
        for var in self.FAKE_ENV:
            self.useFixture(
                fixtures.EnvironmentVariable(var, self.FAKE_ENV[var]))

        self.shell = shell.OpenStackCinderShell()

        # HACK(bcwaldon): replace this when we start using stubs
        self.old_get_client_class = client.get_client_class
        client.get_client_class = lambda *_: fakes.FakeClient

        self.requests = self.useFixture(requests_mock_fixture.Fixture())
        self.requests.register_uri(
            'GET',
            keystone_client.BASE_URL,
            text=keystone_client.keystone_request_callback)
        token = keystone_client_fixture.V2Token()
        s = token.add_service('volume', 'cinder')
        s.add_endpoint(public='http://127.0.0.1:8776')

        self.requests.post(keystone_client.BASE_URL + 'v2.0/tokens',
                           json=token)
        self.requests.get('http://127.0.0.1:8776',
                          json=fixture_base.generate_version_output())
예제 #2
0
    def setUp(self):
        """Run before each test."""
        super(ShellTest, self).setUp()
        for var in self.FAKE_ENV:
            self.useFixture(fixtures.EnvironmentVariable(var,
                                                         self.FAKE_ENV[var]))

        self.shell = shell.OpenStackCinderShell()

        # HACK(bcwaldon): replace this when we start using stubs
        self.old_get_client_class = client.get_client_class
        client.get_client_class = lambda *_: fakes.FakeClient

        self.requests = self.useFixture(requests_mock_fixture.Fixture())
        self.requests.register_uri(
            'GET', keystone_client.BASE_URL,
            text=keystone_client.keystone_request_callback
        )
        token = keystone_client_fixture.V2Token()
        s = token.add_service('volume', 'cinder')
        s.add_endpoint(public='http://127.0.0.1:8776')

        self.requests.post(keystone_client.BASE_URL + 'v2.0/tokens',
                           json=token)
        self.requests.get(
            'http://127.0.0.1:8776',
            json=fixture_base.generate_version_output()
        )
예제 #3
0
    def test_cinder_version_discovery(self, mocker):
        """Verify client works two endpoints enabled under one service."""
        token = keystone_client_fixture.V2Token()

        volume_service = token.add_service('volume', 'Cinder')
        volume_service.add_endpoint(public='http://127.0.0.1:8776',
                                    region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens',
                    json=token)
        mocker.get(
            'http://127.0.0.1:8776/',
            json=fixture_base.generate_version_output(v1=True, v2=True)
        )

        v1_request = mocker.get('http://127.0.0.1:8776/v1/volumes/detail',
                                json={'volumes': {}})
        v2_request = mocker.get('http://127.0.0.1:8776/v2/volumes/detail',
                                json={'volumes': {}})

        self.shell('list')
        self.assertTrue(v1_request.called)

        self.shell('--os-volume-api-version 2 list')
        self.assertTrue(v2_request.called)
예제 #4
0
    def test_cinder_version_legacy_endpoint_only_v2(self, mocker):
        """Verify that v2 legacy endpoint settings still work.

        Legacy endpoints that are not using version discovery is
        <hostname>:<port>/<version>/(tenant_id)s. For this unit test, we fill
        in the tenant_id for mocking purposes.
        """
        token = keystone_client_fixture.V2Token()
        cinder_url = 'http://127.0.0.1:8776/'

        volumev2_service = token.add_service('volumev2', 'Cinder v2')
        volumev2_service.add_endpoint(
            public=cinder_url,
            region='RegionOne'
        )

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens',
                    json=token)

        mocker.get(
            cinder_url,
            json=fixture_base.generate_version_output(v1=False, v2=True)
        )
        volume_request = mocker.get('http://127.0.0.1:8776/v2/volumes/detail',
                                    json={'volumes': {}})

        self.shell('list')
        self.assertTrue(volume_request.called)
예제 #5
0
    def test_cinder_version_discovery_unsupported_version(self, mocker):
        """Try a version from the client that's not enabled in Cinder."""
        token = keystone_client_fixture.V2Token()

        volume_service = token.add_service('volume', 'Cinder')
        volume_service.add_endpoint(public='http://127.0.0.1:8776',
                                    region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens', json=token)

        mocker.get('http://127.0.0.1:8776/',
                   json=fixture_base.generate_version_output(v1=False,
                                                             v2=True))

        self.assertRaises(exceptions.InvalidAPIVersion, self.shell,
                          '--os-volume-api-version 1 list')
예제 #6
0
    def test_cinder_version_discovery_only_v1(self, mocker):
        """Verify when v1 is only enabled, the client discovers it."""
        token = keystone_client_fixture.V2Token()

        volume_service = token.add_service('volume', 'Cinder')
        volume_service.add_endpoint(public='http://127.0.0.1:8776',
                                    region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens', json=token)
        mocker.get('http://127.0.0.1:8776/',
                   json=fixture_base.generate_version_output(v1=True, v2=True))
        volume_request = mocker.get('http://127.0.0.1:8776/v1/volumes/detail',
                                    json={'volumes': {}})

        self.shell('list')
        self.assertTrue(volume_request.called)
예제 #7
0
    def test_cinder_version_discovery_fallback(self, mocker):
        """Client defaults to v1, but v2 is only available, fallback to v2."""
        token = keystone_client_fixture.V2Token()

        volumev2_service = token.add_service('volumev2', 'Cinder v2')
        volumev2_service.add_endpoint(public='http://127.0.0.1:8776',
                                      region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens', json=token)

        mocker.get('http://127.0.0.1:8776/',
                   json=fixture_base.generate_version_output(v1=False,
                                                             v2=True))
        volume_request = mocker.get('http://127.0.0.1:8776/v2/volumes/detail',
                                    json={'volumes': {}})

        self.shell('list')
        self.assertTrue(volume_request.called)
예제 #8
0
    def test_cinder_version_discovery_unsupported_version(self, mocker):
        """Try a version from the client that's not enabled in Cinder."""
        token = keystone_client_fixture.V2Token()

        volume_service = token.add_service('volume', 'Cinder')
        volume_service.add_endpoint(public='http://127.0.0.1:8776',
                                    region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens',
                    json=token)

        mocker.get(
            'http://127.0.0.1:8776/',
            json=fixture_base.generate_version_output(v1=False, v2=True)
        )

        self.assertRaises(exceptions.InvalidAPIVersion,
                          self.shell, '--os-volume-api-version 1 list')
예제 #9
0
    def test_cinder_version_discovery_only_v1(self, mocker):
        """Verify when v1 is only enabled, the client discovers it."""
        token = keystone_client_fixture.V2Token()

        volume_service = token.add_service('volume', 'Cinder')
        volume_service.add_endpoint(public='http://127.0.0.1:8776',
                                    region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens',
                    json=token)
        mocker.get(
            'http://127.0.0.1:8776/',
            json=fixture_base.generate_version_output(v1=True, v2=True)
        )
        volume_request = mocker.get('http://127.0.0.1:8776/v1/volumes/detail',
                                    json={'volumes': {}})

        self.shell('list')
        self.assertTrue(volume_request.called)
예제 #10
0
    def test_cinder_version_discovery_fallback(self, mocker):
        """Client defaults to v1, but v2 is only available, fallback to v2."""
        token = keystone_client_fixture.V2Token()

        volumev2_service = token.add_service('volumev2', 'Cinder v2')
        volumev2_service.add_endpoint(public='http://127.0.0.1:8776',
                                      region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens',
                    json=token)

        mocker.get(
            'http://127.0.0.1:8776/',
            json=fixture_base.generate_version_output(v1=False, v2=True)
        )
        volume_request = mocker.get('http://127.0.0.1:8776/v2/volumes/detail',
                                    json={'volumes': {}})

        self.shell('list')
        self.assertTrue(volume_request.called)
예제 #11
0
    def test_cinder_version_discovery(self, mocker):
        """Verify client works two endpoints enabled under one service."""
        token = keystone_client_fixture.V2Token()

        volume_service = token.add_service('volume', 'Cinder')
        volume_service.add_endpoint(public='http://127.0.0.1:8776',
                                    region='RegionOne')

        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens', json=token)
        mocker.get('http://127.0.0.1:8776/',
                   json=fixture_base.generate_version_output(v1=True, v2=True))

        v1_request = mocker.get('http://127.0.0.1:8776/v1/volumes/detail',
                                json={'volumes': {}})
        v2_request = mocker.get('http://127.0.0.1:8776/v2/volumes/detail',
                                json={'volumes': {}})

        self.shell('list')
        self.assertTrue(v1_request.called)

        self.shell('--os-volume-api-version 2 list')
        self.assertTrue(v2_request.called)
예제 #12
0
    def test_cinder_version_legacy_endpoint_only_v1(self, mocker):
        """Verify that v1 legacy endpoint settings still work.

        Legacy endpoints that are not using version discovery is
        <hostname>:<port>/<version>/(tenant_id)s. For this unit test, we fill
        in the tenant_id for mocking purposes.
        """
        token = keystone_client_fixture.V2Token()
        cinder_url = 'http://127.0.0.1:8776/'

        volume_service = token.add_service('volume', 'Cinder v1')
        volume_service.add_endpoint(public=cinder_url, region='RegionOne')

        mocker.get(cinder_url,
                   json=fixture_base.generate_version_output(v1=True,
                                                             v2=False))
        mocker.post(keystone_client.BASE_HOST + '/v2.0/tokens', json=token)
        volume_request = mocker.get('http://127.0.0.1:8776/v1/volumes/detail',
                                    json={'volumes': {}})

        self.shell('list')
        self.assertTrue(volume_request.called)