Пример #1
0
 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)
Пример #2
0
 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))
Пример #3
0
 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'])
Пример #4
0
 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']))
Пример #5
0
 def test_ignore_projects_without_keystone(self):
     app = swift.Swift(FakeApp(), {
         'ignore_projects': 'cf0356aaac7c42bba5a744339a6169fa,'
                            '18157dd635bb413c9e27686fee93c583',
     })
     self.assertEqual(["cf0356aaac7c42bba5a744339a6169fa",
                       "18157dd635bb413c9e27686fee93c583"],
                      app.ignore_projects)
Пример #6
0
 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'])
Пример #7
0
 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)
Пример #8
0
 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'])
Пример #9
0
    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)
Пример #10
0
    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))
Пример #11
0
 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'])
Пример #12
0
 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'])
Пример #13
0
 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))
Пример #14
0
 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")
Пример #15
0
 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'])
Пример #16
0
 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'])
Пример #17
0
 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'])