def test_wsgi_middleware(self, mock_profiler_init, mock_profiler_trace): hmac_key = "secret" request = mock.MagicMock() request.get_response.return_value = "yeah!" request.url = "someurl" request.host_url = "someurl" request.path = "path" request.query_string = "query" request.method = "method" request.scheme = "scheme" pack = utils.signed_pack({"base_id": "1", "parent_id": "2"}, hmac_key) request.headers = { "a": "1", "b": "2", "X-Trace-Info": pack[0], "X-Trace-HMAC": pack[1] } middleware = web.WsgiMiddleware("app", hmac_key, enabled=True) self.assertEqual("yeah!", middleware(request)) mock_profiler_init.assert_called_once_with(hmac_key=hmac_key, base_id="1", parent_id="2") expected_info = { "request": { "path": request.path, "query": request.query_string, "method": request.method, "scheme": request.scheme } } mock_profiler_trace.assert_called_once_with("wsgi", info=expected_info)
def test_wsgi_middleware_enable_via_python(self, mock_profiler_init): request = mock.MagicMock() request.get_response.return_value = "yeah!" request.url = "someurl" request.host_url = "someurl" request.path = "path" request.query_string = "query" request.method = "method" request.scheme = "scheme" hmac_key = "super_secret_key2" pack = utils.signed_pack({"base_id": "1", "parent_id": "2"}, hmac_key) request.headers = { "a": "1", "b": "2", "X-Trace-Info": pack[0], "X-Trace-HMAC": pack[1] } web.enable("super_secret_key1,super_secret_key2") middleware = web.WsgiMiddleware("app", enabled=True) self.assertEqual("yeah!", middleware(request)) mock_profiler_init.assert_called_once_with(hmac_key=hmac_key, base_id="1", parent_id="2")
def test_signed_pack_unpack_many_wrong_keys(self): keys = ["secret", "secret2", "secret3"] data = {"some": "data"} packed_data, hmac_data = utils.signed_pack(data, "password") process_data = utils.signed_unpack(packed_data, hmac_data, keys) self.assertIsNone(process_data)
def test_signed_pack_unpack_many_keys(self): keys = ["secret", "secret2", "secret3"] data = {"some": "data"} packed_data, hmac_data = utils.signed_pack(data, keys[-1]) process_data = utils.signed_unpack(packed_data, hmac_data, keys) self.assertEqual(keys[-1], process_data["hmac_key"])
def test_wsgi_middleware(self, mock_profiler_init, mock_profiler_trace): hmac_key = "secret" request = mock.MagicMock() request.get_response.return_value = "yeah!" request.url = "someurl" request.host_url = "someurl" request.path = "path" request.query_string = "query" request.method = "method" request.scheme = "scheme" pack = utils.signed_pack({"base_id": "1", "parent_id": "2"}, hmac_key) request.headers = {"a": "1", "b": "2", "X-Trace-Info": pack[0], "X-Trace-HMAC": pack[1]} middleware = web.WsgiMiddleware("app", hmac_key, enabled=True) self.assertEqual("yeah!", middleware(request)) mock_profiler_init.assert_called_once_with(hmac_key=hmac_key, base_id="1", parent_id="2") expected_info = { "request": { "path": request.path, "query": request.query_string, "method": request.method, "scheme": request.scheme, } } mock_profiler_trace.assert_called_once_with("wsgi", info=expected_info)
def test_signed_pack_unpack_many_wrong_keys(self): keys = ['secret', 'secret2', 'secret3'] data = {"some": "data"} packed_data, hmac_data = utils.signed_pack(data, 'password') process_data = utils.signed_unpack(packed_data, hmac_data, keys) self.assertIsNone(process_data)
def test_signed_pack_unpack_many_keys(self): keys = ['secret', 'secret2', 'secret3'] data = {"some": "data"} packed_data, hmac_data = utils.signed_pack(data, keys[-1]) process_data = utils.signed_unpack(packed_data, hmac_data, keys) self.assertEqual(keys[-1], process_data['hmac_key'])
def get_trace_id_headers(): """Adds the trace id headers (and any hmac) into provided dictionary.""" p = profiler.get() if p and p.hmac_key: data = {"base_id": p.get_base_id(), "parent_id": p.get_id()} pack = utils.signed_pack(data, p.hmac_key) return {X_TRACE_INFO: pack[0], X_TRACE_HMAC: pack[1]} return {}
def test_wsgi_middleware_no_trace_hmac(self, mock_profiler_init): hmac_key = "secret" pack = utils.signed_pack({"base_id": "1", "parent_id": "2"}, hmac_key) headers = { "a": "1", "b": "2", "X-Trace-Info": pack[0] } self._test_wsgi_middleware_with_invalid_trace(headers, hmac_key, mock_profiler_init)
def test_signed_pack_unpack(self): hmac = "secret" data = {"some": "data"} packed_data, hmac_data = utils.signed_pack(data, hmac) process_data = utils.signed_unpack(packed_data, hmac_data, [hmac]) self.assertIn("hmac_key", process_data) process_data.pop("hmac_key") self.assertEqual(data, process_data)
def update_trace_headers(keys, **kwargs): trace_headers = web.get_trace_id_headers() trace_info = utils.signed_unpack( trace_headers[web.X_TRACE_INFO], trace_headers[web.X_TRACE_HMAC], keys) trace_info.update(kwargs) p = profiler.get() trace_data = utils.signed_pack(trace_info, p.hmac_key) return json.dumps({web.X_TRACE_INFO: trace_data[0], web.X_TRACE_HMAC: trace_data[1]})
def get_trace_id_headers(): """Adds the trace id headers (and any hmac) into provided dictionary.""" p = profiler.get() if p and p.hmac_key: data = {"base_id": p.get_base_id(), "parent_id": p.get_id()} pack = utils.signed_pack(data, p.hmac_key) return { "X-Trace-Info": pack[0], "X-Trace-HMAC": pack[1] } return {}
def update_trace_headers(keys, **kwargs): trace_headers = web.get_trace_id_headers() trace_info = utils.signed_unpack( trace_headers[web.X_TRACE_INFO], trace_headers[web.X_TRACE_HMAC], keys) trace_info.update(kwargs) p = profiler.get() trace_data = utils.signed_pack(trace_info, p.hmac_key) trace_data = [key.decode() if isinstance(key, bytes) else key for key in trace_data] return json.dumps({web.X_TRACE_INFO: trace_data[0], web.X_TRACE_HMAC: trace_data[1]})
def update_trace_headers(keys, **kwargs): trace_headers = web.get_trace_id_headers() trace_info = utils.signed_unpack( trace_headers[web.X_TRACE_INFO], trace_headers[web.X_TRACE_HMAC], keys) trace_info.update(kwargs) p = profiler.get() trace_data = utils.signed_pack(trace_info, p.hmac_key) if six.PY3: trace_data = [key.decode() if isinstance(key, six.binary_type) else key for key in trace_data] return json.dumps({web.X_TRACE_INFO: trace_data[0], web.X_TRACE_HMAC: trace_data[1]})
def test_get_request_options_with_profile_enabled(self): osprofiler.profiler.clean() osprofiler.profiler.init(PROFILER_HMAC_KEY) data = {'base_id': PROFILER_TRACE_ID, 'parent_id': PROFILER_TRACE_ID} signed_data = osprofiler_utils.signed_pack(data, PROFILER_HMAC_KEY) headers = { 'X-Trace-Info': signed_data[0], 'X-Trace-HMAC': signed_data[1] } self.client.get(API_URL) expected_options = copy.deepcopy(EXPECTED_REQ_OPTIONS) expected_options['headers'].update(headers) requests.get.assert_called_with(EXPECTED_URL, **expected_options)
def test_get_request_options_with_profile_enabled(self): m = self.requests_mock.get(EXPECTED_URL, text='text') osprofiler.profiler.init(PROFILER_HMAC_KEY) data = {'base_id': PROFILER_TRACE_ID, 'parent_id': PROFILER_TRACE_ID} signed_data = osprofiler_utils.signed_pack(data, PROFILER_HMAC_KEY) headers = { 'X-Trace-Info': signed_data[0], 'X-Trace-HMAC': signed_data[1] } self.client.get(API_URL) self.assertTrue(m.called_once) headers = self.assertExpectedAuthHeaders() self.assertEqual(signed_data[0], headers['X-Trace-Info']) self.assertEqual(signed_data[1], headers['X-Trace-HMAC'])
def test_get_request_options_with_profile_enabled(self): osprofiler.profiler.init(PROFILER_HMAC_KEY) data = {'base_id': PROFILER_TRACE_ID, 'parent_id': PROFILER_TRACE_ID} signed_data = osprofiler_utils.signed_pack(data, PROFILER_HMAC_KEY) headers = { 'X-Trace-Info': signed_data[0], 'X-Trace-HMAC': signed_data[1] } self.client.get(API_URL) expected_options = copy.deepcopy(EXPECTED_REQ_OPTIONS) expected_options['headers'].update(headers) requests.get.assert_called_with( EXPECTED_URL, **expected_options )
def test_signed_unpack_no_key_or_hmac_data(self): data = {"some": "data"} packed_data, hmac_data = utils.signed_pack(data, "secret") self.assertIsNone(utils.signed_unpack(packed_data, hmac_data, None)) self.assertIsNone(utils.signed_unpack(packed_data, None, "secret")) self.assertIsNone(utils.signed_unpack(packed_data, " ", "secret"))
def test_signed_unpack_wrong_key(self): data = {"some": "data"} packed_data, hmac_data = utils.signed_pack(data, "secret") self.assertIsNone(utils.signed_unpack(packed_data, hmac_data, "wrong"))