def test_writer_headers(): t = Tracer() t.writer._put = mock.Mock(wraps=t.writer._put) with t.trace("op"): pass t.shutdown() assert t.writer._put.call_count == 1 _, headers = t.writer._put.call_args[0] assert headers.get("Datadog-Meta-Tracer-Version") == ddtrace.__version__ assert headers.get("Datadog-Meta-Lang") == "python" assert headers.get("Content-Type") == "application/msgpack" assert headers.get("X-Datadog-Trace-Count") == "1" if container.get_container_info(): assert "Datadog-Container-Id" in headers t = Tracer() t.writer._put = mock.Mock(wraps=t.writer._put) for _ in range(100): with t.trace("op"): pass t.shutdown() assert t.writer._put.call_count == 1 _, headers = t.writer._put.call_args[0] assert headers.get("X-Datadog-Trace-Count") == "100" t = Tracer() t.writer._put = mock.Mock(wraps=t.writer._put) for _ in range(10): with t.trace("op"): for _ in range(5): t.trace("child").finish() t.shutdown() assert t.writer._put.call_count == 1 _, headers = t.writer._put.call_args[0] assert headers.get("X-Datadog-Trace-Count") == "10"
def _get_container_id(): # type: () -> str """Get ID from docker container""" container_info = get_container_info() if container_info: return container_info.container_id or "" return ""
def test_get_container_info(file_contents, container_id): with get_mock_open(read_data=file_contents) as mock_open: # simulate the file not being found if file_contents is None: mock_open.side_effect = FileNotFoundError info = get_container_info() if container_id is None: assert info is None else: assert info.container_id == container_id mock_open.assert_called_once_with('/proc/self/cgroup', mode='r')
def test_get_container_info_exception(mock_log, mock_from_line): exception = Exception() mock_from_line.side_effect = exception # DEV: We need at least 1 line for the loop to call `CGroupInfo.from_line` with get_mock_open(read_data='\r\n') as mock_open: # Assert calling `get_container_info()` does not bubble up the exception assert get_container_info() is None # Assert we called everything we expected mock_from_line.assert_called_once_with('\r\n') mock_open.assert_called_once_with('/proc/self/cgroup', mode='r') # Ensure we logged the exception mock_log.debug.assert_called_once_with('Failed to parse cgroup file for pid %r: %s', 'self', exception)
def test_get_container_info_with_pid(pid, file_name): # DEV: We need at least 1 line for the loop to call `CGroupInfo.from_line` with get_mock_open(read_data='\r\n') as mock_open: assert get_container_info(pid=pid) is None mock_open.assert_called_once_with(file_name, mode='r')