def test_set(self): state = Tracestate({'bar': '0'}) state['foo'] = '1' state['bar'] = '2' state['baz'] = '3' self.assertEqual(formatter.to_string(state), 'bar=2,foo=1,baz=3') # key SHOULD be string self.assertRaises(ValueError, lambda: state.__setitem__(123, 'abc')) # value SHOULD NOT be empty string self.assertRaises(ValueError, lambda: state.__setitem__('', 'abc')) # key SHOULD start with a letter self.assertRaises(ValueError, lambda: state.__setitem__('123', 'abc')) # key SHOULD NOT have uppercase self.assertRaises(ValueError, lambda: state.__setitem__('FOO', 'abc')) # value SHOULD be string self.assertRaises(ValueError, lambda: state.__setitem__('foo', 123)) # value SHOULD NOT be empty string self.assertRaises(ValueError, lambda: state.__setitem__('foo', '')) state['foo'] = 'x' * 256 # throw if value exceeds 256 bytes self.assertRaises(ValueError, lambda: state.__setitem__('foo', 'x' * 257))
def test_method_prepend(self): state = Tracestate() state.prepend('foo', '1') state.prepend('baz', '3') state.prepend('bar', '2') self.assertEqual(formatter.to_string(state), 'bar=2,baz=3,foo=1') # modified key-value pair MUST be moved to the beginning of the list state.prepend('foo', '1') self.assertEqual(formatter.to_string(state), 'foo=1,bar=2,baz=3')
def from_string(self, string): tracestate = Tracestate() for member in re.split(_DELIMITER_FORMAT_RE, string): match = _MEMBER_FORMAT_RE.match(member) if not match: raise ValueError('illegal key-value format %r' % (member)) key, eq, value = match.groups() tracestate[key] = value return tracestate
def test_method_append(self): state = Tracestate() state.append('foo', '1') state.append('bar', '2') state.append('baz', '3') state.append('bar', '2') self.assertEqual(formatter.to_string(state), 'foo=1,baz=3,bar=2')
def test__repr__(self): span_context = self._make_one(trace_id=self.trace_id, span_id=self.span_id, trace_options=TraceOptions('1'), tracestate=Tracestate()) expected_repr = 'SpanContext(' \ 'trace_id=6e0c63257de34c92bf9efcd03927272e, ' \ 'span_id=6e0c63257de34c92, ' \ 'trace_options=TraceOptions(enabled=True), ' \ 'tracestate=Tracestate())' self.assertEqual(expected_repr, span_context.__repr__())
def test_method_is_valid(self): state = Tracestate() # empty state not allowed self.assertFalse(state.is_valid()) state['foo'] = 'x' * 256 self.assertTrue(state.is_valid()) # exceeds 32 elements for i in range(0xa0, 0xa0 + 31): state['%x' % (i)] = 'E' self.assertEqual(len(state), 32) self.assertTrue(state.is_valid()) state['ff'] = 'E' self.assertFalse(state.is_valid())
def test_to_headers_with_empty_tracestate(self): from opencensus.trace import span_context from opencensus.trace import trace_options from opencensus.trace.tracestate import Tracestate propagator = trace_context_http_header_format.\ TraceContextPropagator() trace_id = '12345678901234567890123456789012' span_id_hex = '1234567890123456' span_context = span_context.SpanContext( trace_id=trace_id, span_id=span_id_hex, tracestate=Tracestate(), trace_options=trace_options.TraceOptions('1')) headers = propagator.to_headers(span_context) self.assertTrue('traceparent' in headers) self.assertEqual(headers['traceparent'], '00-{}-{}-01'.format(trace_id, span_id_hex)) self.assertFalse('tracestate' in headers)
def test_to_headers_with_empty_tracestate(self): from opencensus.trace import span_context from opencensus.trace import trace_options from opencensus.trace.tracestate import Tracestate trace_id = '6e0c63257de34c92bf9efcd03927272e' span_id_hex = '00f067aa0ba902b7' span_context = span_context.SpanContext( trace_id=trace_id, span_id=span_id_hex, tracestate=Tracestate(), trace_options=trace_options.TraceOptions('1')) propagator = trace_context_http_header_format.\ TraceContextPropagator() headers = propagator.to_headers(span_context) self.assertTrue('traceparent' in headers) self.assertEqual(headers['traceparent'], '00-{}-{}-01'.format(trace_id, span_id_hex)) self.assertFalse('tracestate' in headers)
def test_span_data_to_envelope(self): from opencensus.trace.span import SpanKind from opencensus.trace.span_context import SpanContext from opencensus.trace.span_data import SpanData from opencensus.trace.status import Status from opencensus.trace.trace_options import TraceOptions from opencensus.trace.tracestate import Tracestate exporter = trace_exporter.AzureExporter( instrumentation_key='12345678-1234-5678-abcd-12345678abcd', storage_path=os.path.join(TEST_FOLDER, self.id()), ) # SpanKind.CLIENT HTTP envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=[ Link('6e0c63257de34c90bf9efcd03927272e', '6e0c63257de34c91') ], status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.data, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseData.target, 'www.wikipedia.org') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.resultCode, '200') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, 'HTTP') self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') json_dict = json.loads( envelope.data.baseData.properties["_MS.links"] )[0] self.assertEqual( json_dict["id"], "6e0c63257de34c91", ) self.assertEqual( json_dict["operation_Id"], "6e0c63257de34c90bf9efcd03927272e", ) # SpanKind.CLIENT unknown type envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, None) self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # SpanKind.CLIENT missing method envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.data, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseData.target, 'www.wikipedia.org') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.resultCode, '200') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, 'HTTP') self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # SpanKind.SERVER HTTP - 200 request envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.path': '/wiki/Rabbit', 'http.route': '/wiki/Rabbit', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.tags['ai.operation.name'], 'GET /wiki/Rabbit') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.responseCode, '200') self.assertEqual( envelope.data.baseData.name, 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.properties['request.name'], 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.success, True) self.assertEqual( envelope.data.baseData.url, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseData.properties['request.url'], 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.SERVER HTTP - Failed request envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.path': '/wiki/Rabbit', 'http.route': '/wiki/Rabbit', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 400, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.tags['ai.operation.name'], 'GET /wiki/Rabbit') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.responseCode, '400') self.assertEqual( envelope.data.baseData.name, 'GET /wiki/Rabbit') self.assertEqual( envelope.data.baseData.success, False) self.assertEqual( envelope.data.baseData.url, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.SERVER unknown type envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '6e0c63257de34c93') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.UNSPECIFIED envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id=None, attributes={'key1': 'value1'}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.UNSPECIFIED, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertRaises( KeyError, lambda: envelope.tags['ai.operation.parentId']) self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.id, '6e0c63257de34c92') self.assertEqual( envelope.data.baseData.type, 'INPROC') self.assertEqual( envelope.data.baseData.success, True ) self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # Status server status code attribute envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'http.status_code': 201 }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual(envelope.data.baseData.responseCode, "201") self.assertTrue(envelope.data.baseData.success) # Status server status code attribute missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertFalse(envelope.data.baseData.success) # Server route attribute missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.path': '/wiki/Rabbitz', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 400, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual(envelope.data.baseData.properties['request.name'], 'GET /wiki/Rabbitz') # Server route and path attribute missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'component': 'HTTP', 'http.method': 'GET', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 400, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertIsNone( envelope.data.baseData.properties.get('request.name')) # Status client status code attribute envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'http.status_code': 201 }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(0), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual(envelope.data.baseData.resultCode, "201") self.assertTrue(envelope.data.baseData.success) # Status client status code attributes missing envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=Status(1), annotations=None, message_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertFalse(envelope.data.baseData.success) exporter._stop()
def test_span_data_to_envelope(self): from opencensus.ext.azure.common import Options from opencensus.trace.span import SpanKind from opencensus.trace.span_context import SpanContext from opencensus.trace.span_data import SpanData from opencensus.trace.trace_options import TraceOptions from opencensus.trace.tracestate import Tracestate exporter = trace_exporter.AzureExporter( Options( instrumentation_key='12345678-1234-5678-abcd-12345678abcd', storage_path=os.path.join(TEST_FOLDER, 'bar'), ), ) # SpanKind.CLIENT HTTP envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'http.method': 'GET', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=None, time_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c93.') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'www.wikipedia.org') self.assertEqual( envelope.data.baseData.id, '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c92.') self.assertEqual( envelope.data.baseData.resultCode, '200') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, 'HTTP') self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # SpanKind.CLIENT unknown type envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=None, time_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.CLIENT, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertEqual( envelope.tags['ai.operation.parentId'], '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c93.') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.id, '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c92.') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.type, 'HTTP') self.assertEqual( envelope.data.baseType, 'RemoteDependencyData') # SpanKind.SERVER HTTP envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={ 'http.method': 'GET', 'http.url': 'https://www.wikipedia.org/wiki/Rabbit', 'http.status_code': 200, }, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=None, time_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c93.') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c92.') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.responseCode, '200') self.assertEqual( envelope.data.baseData.name, 'GET https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseData.url, 'https://www.wikipedia.org/wiki/Rabbit') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.SERVER unknown type envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id='6e0c63257de34c93', attributes={}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=None, time_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.SERVER, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.Request') self.assertEqual( envelope.tags['ai.operation.parentId'], '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c93.') self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.id, '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c92.') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseType, 'RequestData') # SpanKind.UNSPECIFIED envelope = exporter.span_data_to_envelope(SpanData( name='test', context=SpanContext( trace_id='6e0c63257de34c90bf9efcd03927272e', span_id='6e0c63257de34c91', trace_options=TraceOptions('1'), tracestate=Tracestate(), from_header=False, ), span_id='6e0c63257de34c92', parent_span_id=None, attributes={'key1': 'value1'}, start_time='2010-10-24T07:28:38.123456Z', end_time='2010-10-24T07:28:38.234567Z', stack_trace=None, links=None, status=None, time_events=None, same_process_as_parent_span=None, child_span_count=None, span_kind=SpanKind.UNSPECIFIED, )) self.assertEqual( envelope.iKey, '12345678-1234-5678-abcd-12345678abcd') self.assertEqual( envelope.name, 'Microsoft.ApplicationInsights.RemoteDependency') self.assertRaises( KeyError, lambda: envelope.tags['ai.operation.parentId']) self.assertEqual( envelope.tags['ai.operation.id'], '6e0c63257de34c90bf9efcd03927272e') self.assertEqual( envelope.time, '2010-10-24T07:28:38.123456Z') self.assertEqual( envelope.data.baseData.name, 'test') self.assertEqual( envelope.data.baseData.duration, '0.00:00:00.111') self.assertEqual( envelope.data.baseData.id, '|6e0c63257de34c90bf9efcd03927272e.6e0c63257de34c92.') self.assertEqual( envelope.data.baseData.type, 'INPROC') self.assertEqual( envelope.data.baseType, 'RemoteDependencyData')
def test_get(self): state = Tracestate({'foo': '1'}) self.assertEqual(state['foo'], '1')
def test_cctor(self): state = Tracestate(formatter.from_string('foo=1,bar=2,baz=3')) self.assertEqual(formatter.to_string(state), 'foo=1,bar=2,baz=3')
def test_ctor_with_dict(self): state = Tracestate({'foo': '1'}) self.assertEqual(formatter.to_string(state), 'foo=1')
def test_ctor_no_arg(self): state = Tracestate() self.assertEqual(formatter.to_string(state), '')