Пример #1
0
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"
Пример #2
0
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')