Skip to content

Commit

Permalink
add x-ray interop
Browse files Browse the repository at this point in the history
  • Loading branch information
Ben Plotnick committed Jan 11, 2018
1 parent b06d25d commit 9d7a4eb
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
11 changes: 9 additions & 2 deletions py_zipkin/util.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import random
import struct
import time


def generate_random_64bit_string():
Expand All @@ -17,9 +18,15 @@ def generate_random_128bit_string():
"""Returns a 128 bit UTF-8 encoded string. Follows the same conventions
as generate_random_64bit_string().
:returns: random 32-character string
The upper 32 bits are the current time in epoch seconds, and the
lower 96 bits are random. This allows for AWS X-Ray `interop
<https://github.com/openzipkin/zipkin/issues/1754>`_
:returns: 32-character hex string
"""
return '{:032x}'.format(random.getrandbits(128))
t = int(time.time())
lower_96 = random.getrandbits(96)
return '{:032x}'.format((t << 96) | lower_96)


def unsigned_hex_to_signed_int(hex_string):
Expand Down
7 changes: 5 additions & 2 deletions tests/util_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@ def test_generate_random_64bit_string(rand):
assert isinstance(random_string, str)


@mock.patch('py_zipkin.util.time.time', autospec=True)
@mock.patch('py_zipkin.util.random.getrandbits', autospec=True)
def test_generate_random_128bit_string(rand):
rand.return_value = 0x17133d482ba4f60517133d482ba4f605
def test_generate_random_128bit_string(rand, mock_time):
rand.return_value = 0x2ba4f60517133d482ba4f605
mock_time.return_value = float(0x17133d48)
random_string = util.generate_random_128bit_string()
assert random_string == '17133d482ba4f60517133d482ba4f605'
rand.assert_called_once_with(96) # 96 bits
# This acts as a contract test of sorts. This should return a str
# in both py2 and py3. IOW, no unicode objects.
assert isinstance(random_string, str)
Expand Down

0 comments on commit 9d7a4eb

Please sign in to comment.