Skip to content

Commit

Permalink
no span nomenclature (w3c#208)
Browse files Browse the repository at this point in the history
* no span nomenclature

* replaced span->parent in test cases
  • Loading branch information
SergeyKanzhelev authored Nov 30, 2018
1 parent 5bb38d0 commit ea4923d
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 95 deletions.
14 changes: 7 additions & 7 deletions test/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,10 @@ Content-Type: application/json
test_traceparent_header_name (test.TraceContextTest) ... ok
test_traceparent_header_name_valid_casing (test.TraceContextTest) ... ok
test_traceparent_included_tracestate_missing (test.TraceContextTest) ... ok
test_traceparent_span_id_all_zero (test.TraceContextTest) ... ok
test_traceparent_span_id_illegal_characters (test.TraceContextTest) ... ok
test_traceparent_span_id_too_long (test.TraceContextTest) ... ok
test_traceparent_span_id_too_short (test.TraceContextTest) ... ok
test_traceparent_parent_id_all_zero (test.TraceContextTest) ... ok
test_traceparent_parent_id_illegal_characters (test.TraceContextTest) ... ok
test_traceparent_parent_id_too_long (test.TraceContextTest) ... ok
test_traceparent_parent_id_too_short (test.TraceContextTest) ... ok
test_traceparent_trace_flags_illegal_characters (test.TraceContextTest) ... ok
test_traceparent_trace_flags_too_long (test.TraceContextTest) ... ok
test_traceparent_trace_flags_too_short (test.TraceContextTest) ... ok
Expand Down Expand Up @@ -216,9 +216,9 @@ Content-Type: application/json
test_ctor_with_variadic_arguments (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_from_string (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_repr (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_set_span_id (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_set_parent_id (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_set_trace_id (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_span_id_limit (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_parent_id_limit (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_str (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_trace_flags_limit (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
test_trace_id_limit (tracecontext.test_traceparent.BaseTraceparentTest) ... ok
Expand All @@ -227,7 +227,7 @@ Content-Type: application/json
test_ctor_default (tracecontext.test_traceparent.TraceparentTest) ... ok
test_from_string (tracecontext.test_traceparent.TraceparentTest) ... ok
test_repr (tracecontext.test_traceparent.TraceparentTest) ... ok
test_set_span_id (tracecontext.test_traceparent.TraceparentTest) ... ok
test_set_parent_id (tracecontext.test_traceparent.TraceparentTest) ... ok
test_set_trace_id (tracecontext.test_traceparent.TraceparentTest) ... ok
test_set_version (tracecontext.test_traceparent.TraceparentTest) ... ok
test_str (tracecontext.test_traceparent.TraceparentTest) ... ok
Expand Down
2 changes: 1 addition & 1 deletion test/self_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def do_POST(self):
if temp_traceparent.version == 0:
if temp_traceparent._residue:
raise ValueError('illegal traceparent format')
traceparent = Traceparent(0, temp_traceparent.trace_id, temp_traceparent.span_id, temp_traceparent.trace_flags)
traceparent = Traceparent(0, temp_traceparent.trace_id, temp_traceparent.parent_id, temp_traceparent.trace_flags)
test_data[-1]['is_traceparent_valid'] = True
except ValueError:
test_data[-1]['is_traceparent_valid'] = False
Expand Down
34 changes: 17 additions & 17 deletions test/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,13 @@ def test_both_traceparent_and_tracestate_missing(self):
def test_traceparent_included_tracestate_missing(self):
'''
harness sends a request with traceparent but without tracestate
expects a valid traceparent from the output header, with the same trace_id but different span_id
expects a valid traceparent from the output header, with the same trace_id but different parent_id
'''
traceparent, tracestate = self.make_single_request_and_get_tracecontext([
['traceparent', '00-12345678901234567890123456789012-1234567890123456-01'],
])
self.assertEqual(traceparent.trace_id.hex(), '12345678901234567890123456789012')
self.assertNotEqual(traceparent.span_id.hex(), '1234567890123456')
self.assertNotEqual(traceparent.parent_id.hex(), '1234567890123456')

def test_traceparent_duplicated(self):
'''
Expand Down Expand Up @@ -310,19 +310,19 @@ def test_traceparent_trace_id_too_short(self):
])
self.assertNotEqual(traceparent.trace_id.hex(), '1234567890123456789012345678901')

def test_traceparent_span_id_all_zero(self):
def test_traceparent_parent_id_all_zero(self):
'''
harness sends an invalid traceparent with span_id = 0000000000000000
harness sends an invalid traceparent with parent_id = 0000000000000000
expects a valid traceparent from the output header, with a newly generated trace_id
'''
traceparent, tracestate = self.make_single_request_and_get_tracecontext([
['traceparent', '00-12345678901234567890123456789012-0000000000000000-01'],
])
self.assertNotEqual(traceparent.trace_id.hex(), '12345678901234567890123456789012')

def test_traceparent_span_id_illegal_characters(self):
def test_traceparent_parent_id_illegal_characters(self):
'''
harness sends an invalid traceparent with illegal characters in span_id
harness sends an invalid traceparent with illegal characters in parent_id
expects a valid traceparent from the output header, with a newly generated trace_id
'''
traceparent, tracestate = self.make_single_request_and_get_tracecontext([
Expand All @@ -335,19 +335,19 @@ def test_traceparent_span_id_illegal_characters(self):
])
self.assertNotEqual(traceparent.trace_id.hex(), '12345678901234567890123456789012')

def test_traceparent_span_id_too_long(self):
def test_traceparent_parent_id_too_long(self):
'''
harness sends an invalid traceparent with span_id more than 16 HEXDIG
harness sends an invalid traceparent with parent_id more than 16 HEXDIG
expects a valid traceparent from the output header, with a newly generated trace_id
'''
traceparent, tracestate = self.make_single_request_and_get_tracecontext([
['traceparent', '00-12345678901234567890123456789012-12345678901234567-01'],
])
self.assertNotEqual(traceparent.trace_id.hex(), '12345678901234567890123456789012')

def test_traceparent_span_id_too_short(self):
def test_traceparent_parent_id_too_short(self):
'''
harness sends an invalid traceparent with span_id less than 16 HEXDIG
harness sends an invalid traceparent with parent_id less than 16 HEXDIG
expects a valid traceparent from the output header, with a newly generated trace_id
'''
traceparent, tracestate = self.make_single_request_and_get_tracecontext([
Expand Down Expand Up @@ -780,25 +780,25 @@ class AdvancedTest(TestBase):
def test_multiple_requests(self):
'''
harness asks vendor service to callback multiple times
expects a different span_id each time
expects a different parent_id each time
'''
span_ids = set()
parent_ids = set()
for response in self.make_request([
['traceparent', '00-12345678901234567890123456789012-1234567890123456-01'],
], 3):
traceparent = self.get_traceparent(response['headers'])
self.assertEqual(traceparent.trace_id.hex(), '12345678901234567890123456789012')
span_ids.add(traceparent.span_id.hex())
self.assertEqual(len(span_ids), 3)
parent_ids.add(traceparent.parent_id.hex())
self.assertEqual(len(parent_ids), 3)

trace_ids = set()
span_ids = set()
parent_ids = set()
for response in self.make_request([], 3):
traceparent = self.get_traceparent(response['headers'])
trace_ids.add(traceparent.trace_id.hex())
span_ids.add(traceparent.span_id.hex())
parent_ids.add(traceparent.parent_id.hex())
self.assertEqual(len(trace_ids), 1)
self.assertEqual(len(span_ids), 3)
self.assertEqual(len(parent_ids), 3)


if __name__ == '__main__':
Expand Down
32 changes: 16 additions & 16 deletions test/tracecontext/test_traceparent.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def test_ctor_default(self):
traceparent = BaseTraceparent()
self.assertEqual(traceparent.version, 0)
self.assertEqual(traceparent.trace_id, b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0')
self.assertEqual(traceparent.span_id, b'\0\0\0\0\0\0\0\0')
self.assertEqual(traceparent.parent_id, b'\0\0\0\0\0\0\0\0')
self.assertEqual(traceparent.trace_flags, 0)

def test_ctor(self):
Expand All @@ -32,12 +32,12 @@ def test_trace_id_limit(self):
self.assertRaises(ValueError, lambda: BaseTraceparent(trace_id = b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'))
self.assertRaises(ValueError, lambda: BaseTraceparent(trace_id = b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'))

def test_span_id_limit(self):
traceparent = BaseTraceparent(span_id = b'\0\0\0\0\0\0\0\0')
self.assertEqual(traceparent.span_id, b'\0\0\0\0\0\0\0\0')
def test_parent_id_limit(self):
traceparent = BaseTraceparent(parent_id = b'\0\0\0\0\0\0\0\0')
self.assertEqual(traceparent.parent_id, b'\0\0\0\0\0\0\0\0')

self.assertRaises(ValueError, lambda: BaseTraceparent(span_id = b'\0\0\0\0\0\0\0'))
self.assertRaises(ValueError, lambda: BaseTraceparent(span_id = b'\0\0\0\0\0\0\0\0\0'))
self.assertRaises(ValueError, lambda: BaseTraceparent(parent_id = b'\0\0\0\0\0\0\0'))
self.assertRaises(ValueError, lambda: BaseTraceparent(parent_id = b'\0\0\0\0\0\0\0\0\0'))

def test_trace_flags_limit(self):
traceparent = BaseTraceparent(trace_flags = 0)
Expand Down Expand Up @@ -95,27 +95,27 @@ def test_set_trace_id(self):
traceparent.set_trace_id('ffffffffffffffffffffffffffffffff')
self.assertRaises(ValueError, lambda: traceparent.set_trace_id('fffffffffffffffffffffffffffffffff'))

def test_set_span_id(self):
def test_set_parent_id(self):
traceparent = BaseTraceparent()
traceparent.set_span_id(None)
traceparent.set_span_id(b'\xff\xff\xff\xff\xff\xff\xff\xff')
self.assertRaises(ValueError, lambda: traceparent.set_span_id('fffffffffffffff'))
traceparent.set_span_id('ffffffffffffffff')
self.assertRaises(ValueError, lambda: traceparent.set_span_id('fffffffffffffffff'))
traceparent.set_parent_id(None)
traceparent.set_parent_id(b'\xff\xff\xff\xff\xff\xff\xff\xff')
self.assertRaises(ValueError, lambda: traceparent.set_parent_id('fffffffffffffff'))
traceparent.set_parent_id('ffffffffffffffff')
self.assertRaises(ValueError, lambda: traceparent.set_parent_id('fffffffffffffffff'))

class TraceparentTest(unittest.TestCase):
def test_ctor_default(self):
traceparent = Traceparent()
self.assertEqual(traceparent.version, 0)
self.assertNotEqual(traceparent.trace_id, b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0')
self.assertNotEqual(traceparent.span_id, b'\0\0\0\0\0\0\0\0')
self.assertNotEqual(traceparent.parent_id, b'\0\0\0\0\0\0\0\0')
self.assertEqual(traceparent.trace_flags, 0)

def test_ctor(self):
self.assertRaises(ValueError, lambda: Traceparent(version = 1))
self.assertRaises(ValueError, lambda: Traceparent(version = 0xff))
self.assertRaises(ValueError, lambda: Traceparent(trace_id = b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'))
self.assertRaises(ValueError, lambda: Traceparent(span_id = b'\0\0\0\0\0\0\0\0'))
self.assertRaises(ValueError, lambda: Traceparent(parent_id = b'\0\0\0\0\0\0\0\0'))

def test_from_string(self):
traceparent = Traceparent.from_string('00-12345678901234567890123456789012-1234567890123456-00')
Expand Down Expand Up @@ -149,9 +149,9 @@ def test_set_trace_id(self):
traceparent = Traceparent()
self.assertRaises(ValueError, lambda: traceparent.set_trace_id(None))

def test_set_span_id(self):
def test_set_parent_id(self):
traceparent = Traceparent()
self.assertRaises(ValueError, lambda: traceparent.set_span_id(None))
self.assertRaises(ValueError, lambda: traceparent.set_parent_id(None))

if __name__ == '__main__':
unittest.main()
60 changes: 30 additions & 30 deletions test/tracecontext/traceparent.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
class BaseTraceparent(object):
_VERSION_FORMAT_RE = re.compile('^[0-9a-f]{2}$')
_TRACE_ID_FORMAT_RE = re.compile('^[0-9a-f]{32}$')
_SPAN_ID_FORMAT_RE = re.compile('^[0-9a-f]{16}$')
_PARENT_ID_FORMAT_RE = re.compile('^[0-9a-f]{16}$')
_TRACE_FLAGS_FORMAT_RE = re.compile('^[0-9a-f]{2}$')
_ZERO_TRACE_ID = b'\0' * 16
_ZERO_SPAN_ID = b'\0' * 8
_ZERO_PARENT_ID = b'\0' * 8

def __init__(self, version = 0, trace_id = None, span_id = None, trace_flags = 0, *_residue):
def __init__(self, version = 0, trace_id = None, parent_id = None, trace_flags = 0, *_residue):
self.version = version
self.trace_id = trace_id
self.span_id = span_id
self.parent_id = parent_id
self.trace_flags = trace_flags
self._residue = _residue

Expand All @@ -30,7 +30,7 @@ def from_string(cls, value):
return cls(*value)

def to_string(self):
retval = '{}-{}-{}-{}'.format(self._version.hex(), self._trace_id.hex(), self._span_id.hex(), self._trace_flags.hex())
retval = '{}-{}-{}-{}'.format(self._version.hex(), self._trace_id.hex(), self._parent_id.hex(), self._trace_flags.hex())
if self._residue:
retval += '-' + '-'.join(self._residue)
return retval
Expand Down Expand Up @@ -73,22 +73,22 @@ def set_trace_id(self, trace_id):
else:
raise ValueError('unsupported trace_id type')

def get_span_id(self):
return self._span_id

def set_span_id(self, span_id):
if span_id is None:
self.set_span_id(self._ZERO_SPAN_ID)
elif isinstance(span_id, bytes):
if len(span_id) != 8:
raise ValueError('span_id must contain 8 bytes')
self._span_id = span_id
elif isinstance(span_id, str):
if not self._SPAN_ID_FORMAT_RE.match(span_id):
raise ValueError('span_id does not match {}'.format(self._SPAN_ID_FORMAT_RE))
self.set_span_id(bytes.fromhex(span_id))
def get_parent_id(self):
return self._parent_id

def set_parent_id(self, parent_id):
if parent_id is None:
self.set_parent_id(self._ZERO_PARENT_ID)
elif isinstance(parent_id, bytes):
if len(parent_id) != 8:
raise ValueError('parent_id must contain 8 bytes')
self._parent_id = parent_id
elif isinstance(parent_id, str):
if not self._PARENT_ID_FORMAT_RE.match(parent_id):
raise ValueError('parent_id does not match {}'.format(self._PARENT_ID_FORMAT_RE))
self.set_parent_id(bytes.fromhex(parent_id))
else:
raise ValueError('unsupported span_id type')
raise ValueError('unsupported parent_id type')

def get_trace_flags(self):
return ord(self._trace_flags)
Expand All @@ -111,16 +111,16 @@ def set_trace_flags(self, trace_flags):

version = property(get_version, set_version)
trace_id = property(get_trace_id, set_trace_id)
span_id = property(get_span_id, set_span_id)
parent_id = property(get_parent_id, set_parent_id)
trace_flags = property(get_trace_flags, set_trace_flags)

class Traceparent(BaseTraceparent):
def __init__(self, version = 0, trace_id = None, span_id = None, trace_flags = 0):
def __init__(self, version = 0, trace_id = None, parent_id = None, trace_flags = 0):
if trace_id is None:
trace_id = uuid.uuid1().hex
if span_id is None:
span_id = uuid.uuid4().hex[:16]
super().__init__(version, trace_id, span_id, trace_flags)
if parent_id is None:
parent_id = uuid.uuid4().hex[:16]
super().__init__(version, trace_id, parent_id, trace_flags)

def set_version(self, version):
if version != 0 and version != b'\0' and version != '00':
Expand All @@ -132,15 +132,15 @@ def set_trace_id(self, trace_id):
raise ValueError('all zero trace_id is not allowed')
super().set_trace_id(trace_id)

def set_span_id(self, span_id):
if span_id == self._ZERO_SPAN_ID:
raise ValueError('all zero span_id is not allowed')
super().set_span_id(span_id)
def set_parent_id(self, parent_id):
if parent_id == self._ZERO_PARENT_ID:
raise ValueError('all zero parent_id is not allowed')
super().set_parent_id(parent_id)

def set_trace_flags(self, trace_flags):
super().set_trace_flags(trace_flags)

version = property(BaseTraceparent.get_version, set_version)
trace_id = property(BaseTraceparent.get_trace_id, set_trace_id)
span_id = property(BaseTraceparent.get_span_id, set_span_id)
parent_id = property(BaseTraceparent.get_parent_id, set_parent_id)
trace_flags = property(BaseTraceparent.get_trace_flags, set_trace_flags)
Loading

0 comments on commit ea4923d

Please sign in to comment.