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())
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() )
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)
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)
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')
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)
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)
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')
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)
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)
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)
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)