def test_metadata_headers(self): app = swift.Swift( FakeApp(), {'metadata_headers': 'X_VAR1, x-var2, x-var3, token'}) req = FakeRequest('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}, headers={ 'X_VAR1': 'value1', 'X_VAR2': 'value2', 'TOKEN': 'token' }) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertEqual('container', metadata['container']) self.assertIsNone(metadata['object']) self.assertEqual('get', data[2]['target']['action']) http_headers = [ k for k in metadata.keys() if k.startswith('http_header_') ] self.assertEqual(3, len(http_headers)) self.assertEqual('value1', metadata['http_header_x_var1']) self.assertEqual('value2', metadata['http_header_x_var2']) self.assertEqual('token', metadata['http_header_token']) self.assertFalse('http_header_x_var3' in metadata)
def test_bogus_path(self): app = swift.Swift(FakeApp(), {}) req = FakeRequest('/5.0//', environ={'REQUEST_METHOD': 'GET'}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(0, len(notify.call_args_list))
def test_get_background(self): notified = threading.Event() app = swift.Swift(FakeApp(), { "nonblocking_notify": "True", "send_queue_size": "1" }) req = FakeRequest('/1.0/account/container/obj', environ={'REQUEST_METHOD': 'GET'}) with mock.patch( 'oslo_messaging.Notifier.info', side_effect=lambda *args, **kwargs: notified.set()) as notify: resp = app(req.environ, self.start_response) self.assertEqual(["This string is 28 bytes long"], list(resp)) notified.wait() self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) self.assertEqual(28, data[2]['measurements'][0]['result']) self.assertEqual('storage.objects.outgoing.bytes', data[2]['measurements'][0]['metric']['name']) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertEqual('container', metadata['container']) self.assertEqual('obj', metadata['object']) self.assertEqual('get', data[2]['target']['action'])
def test_empty_reseller_prefix(self): app = swift.Swift(FakeApp(), {'reseller_prefix': 'CUSTOM'}) req = FakeRequest('/1.0/CUSTOM/container/obj', environ={'REQUEST_METHOD': 'GET'}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) data = notify.call_args_list[0][0] self.assertIsNot(0, len(data[2]['target']['id']))
def test_ignore_projects_without_keystone(self): app = swift.Swift(FakeApp(), { 'ignore_projects': 'cf0356aaac7c42bba5a744339a6169fa,' '18157dd635bb413c9e27686fee93c583', }) self.assertEqual(["cf0356aaac7c42bba5a744339a6169fa", "18157dd635bb413c9e27686fee93c583"], app.ignore_projects)
def test_invalid_reseller_prefix(self): app = swift.Swift(FakeApp(), {'reseller_prefix': 'AUTH_'}) req = FakeRequest('/1.0/admin/bucket', environ={'REQUEST_METHOD': 'GET'}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual("1.0/admin/bucket", data[2]['target']['id'])
def test_emit_event_fail(self, mocked_func): mocked_func.side_effect = Exception("a exception") app = swift.Swift(FakeApp(body=["test"]), {}) req = FakeRequest('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}) with mock.patch('oslo_messaging.Notifier.info') as notify: resp = list(app(req.environ, self.start_response)) self.assertEqual(0, len(notify.call_args_list)) self.assertEqual(["test"], resp)
def test_custom_prefix(self): app = swift.Swift(FakeApp(), {'reseller_prefix': 'CUSTOM_'}) req = FakeRequest('/1.0/CUSTOM_account/container/obj', environ={'REQUEST_METHOD': 'GET'}) with mock.patch('oslo.messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual("account", data[2]['target']['id'])
def test_put_with_swift_source(self): app = swift.Swift(FakeApp(), {}) req = FakeRequest('/1.0/account/container/obj', environ={ 'REQUEST_METHOD': 'PUT', 'wsgi.input': six.moves.cStringIO('some stuff'), 'swift.source': 'RL' }) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertFalse(notify.called)
def test_ignore_requests_from_project(self): app = swift.Swift(FakeApp(), {'ignore_projects': 'skip_proj'}) for proj_attr in ['HTTP_X_SERVICE_PROJECT_ID', 'HTTP_X_PROJECT_ID', 'HTTP_X_TENANT_ID']: for proj, calls in [('good', 1), ('skip_proj', 0)]: req = FakeRequest('/1.0/CUSTOM_account/container/obj', environ={'REQUEST_METHOD': 'GET', proj_attr: proj}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(calls, len(notify.call_args_list))
def test_head_account(self): app = swift.Swift(FakeApp(body=['']), {}) req = FakeRequest('/1.0/account', environ={'REQUEST_METHOD': 'HEAD'}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) self.assertIsNone(data[2].get('measurements')) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertIsNone(metadata['container']) self.assertIsNone(metadata['object']) self.assertEqual('head', data[2]['target']['action'])
def test_bogus_request(self): """Test even for arbitrary request method, this will still work.""" app = swift.Swift(FakeApp(body=['']), {}) req = FakeRequest('/1.0/account/container/obj', environ={'REQUEST_METHOD': 'BOGUS'}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) self.assertIsNone(data[2].get('measurements')) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertEqual('container', metadata['container']) self.assertEqual('obj', metadata['object']) self.assertEqual('bogus', data[2]['target']['action'])
def test_no_metadata_headers(self): app = swift.Swift(FakeApp(), {}) req = self.get_request('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertEqual('container', metadata['container']) self.assertIsNone(metadata['object']) self.assertEqual('get', data[2]['target']['action']) http_headers = [k for k in metadata.keys() if k.startswith('http_header_')] self.assertEqual(0, len(http_headers))
def test_ignore_projects_with_keystone(self, warning): self.useFixture(betamax.BetamaxFixture( cassette_name='list_projects', cassette_library_dir='ceilometermiddleware/tests/data', )) app = swift.Swift(FakeApp(), { 'auth_type': 'v2password', 'auth_url': 'https://[::1]:5000/v2.0', 'username': '******', 'tenant_name': 'admin', 'password': '******', 'ignore_projects': 'service,gnocchi', }) self.assertEqual(["147cc0a9263c4964926f3ee7b6ba3685"], app.ignore_projects) warning.assert_called_once_with( "fail to find project '%s' in keystone", "gnocchi")
def test_get_container(self): app = swift.Swift(FakeApp(), {}) req = FakeRequest('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) self.assertEqual(28, data[2]['measurements'][0]['result']) self.assertEqual('storage.objects.outgoing.bytes', data[2]['measurements'][0]['metric']['name']) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertEqual('container', metadata['container']) self.assertIsNone(metadata['object']) self.assertEqual('get', data[2]['target']['action'])
def test_post(self): app = swift.Swift(FakeApp(body=['']), {}) req = self.get_request( '/1.0/account/container/obj', environ={'REQUEST_METHOD': 'POST', 'wsgi.input': six.moves.cStringIO('some other stuff')}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) self.assertEqual(16, data[2]['measurements'][0]['result']) self.assertEqual('storage.objects.incoming.bytes', data[2]['measurements'][0]['metric']['name']) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertEqual('container', metadata['container']) self.assertEqual('obj', metadata['object']) self.assertEqual('post', data[2]['target']['action'])
def test_metadata_headers_unicode(self): app = swift.Swift(FakeApp(), {'metadata_headers': 'unicode'}) uni = u'\xef\xbd\xa1\xef\xbd\xa5' req = FakeRequest('/1.0/account/container', environ={'REQUEST_METHOD': 'GET'}, headers={'UNICODE': uni}) with mock.patch('oslo_messaging.Notifier.info') as notify: list(app(req.environ, self.start_response)) self.assertEqual(1, len(notify.call_args_list)) data = notify.call_args_list[0][0] self.assertEqual('objectstore.http.request', data[1]) metadata = data[2]['target']['metadata'] self.assertEqual('1.0', metadata['version']) self.assertEqual('container', metadata['container']) self.assertIsNone(metadata['object']) self.assertEqual('get', data[2]['target']['action']) http_headers = [ k for k in metadata.keys() if k.startswith('http_header_') ] self.assertEqual(1, len(http_headers)) self.assertEqual(six.text_type(uni), metadata['http_header_unicode'])