class ZipkinDjangoRequestProcessorTestCase(DjangoZipkinTestHelpers, TestCase):
    def setUp(self):
        self.request_factory = RequestFactory()
        self.processor = ZipkinDjangoRequestParser()

    def test_header_keys(self):
        transform = lambda s: 'HTTP_' + s.upper().replace('-', '_')
        self.assertEqual(ZipkinDjangoRequestParser.trace_id_hdr_name,
                         transform("X-B3-TraceId"))
        self.assertEqual(ZipkinDjangoRequestParser.span_id_hdr_name,
                         transform("X-B3-SpanId"))
        self.assertEqual(ZipkinDjangoRequestParser.parent_span_id_hdr_name,
                         transform("X-B3-ParentSpanId"))
        self.assertEqual(ZipkinDjangoRequestParser.sampled_hdr_name,
                         transform("X-B3-Sampled"))
        self.assertEqual(ZipkinDjangoRequestParser.flags_hdr_name,
                         transform("X-B3-Flags"))

    def test_all_fields_filled(self):
        trace_id = ZipkinId.from_binary(42)
        span_id = ZipkinId.from_binary(-42)
        parent_span_id = ZipkinId.from_binary(53)
        request = self.request_factory.get(
            '/', **{
                ZipkinDjangoRequestParser.trace_id_hdr_name:
                trace_id.get_hex(),
                ZipkinDjangoRequestParser.span_id_hdr_name:
                span_id.get_hex(),
                ZipkinDjangoRequestParser.parent_span_id_hdr_name:
                parent_span_id.get_hex(),
                ZipkinDjangoRequestParser.sampled_hdr_name:
                'true',
                ZipkinDjangoRequestParser.flags_hdr_name:
                '0'
            })
        self.assertZipkinDataEquals(
            self.processor.get_zipkin_data(request),
            ZipkinData(trace_id=trace_id,
                       span_id=span_id,
                       parent_span_id=parent_span_id,
                       sampled=True,
                       flags=False))

    def test_no_fields_filled(self):
        self.assertZipkinDataEquals(
            self.processor.get_zipkin_data(self.request_factory.get('/')),
            ZipkinData())
class ZipkinDjangoRequestProcessorTestCase(DjangoZipkinTestHelpers, TestCase):
    def setUp(self):
        self.request_factory = RequestFactory()
        self.processor = ZipkinDjangoRequestParser()

    def test_header_keys(self):
        transform = lambda s: 'HTTP_' + s.upper().replace('-', '_')
        self.assertEqual(ZipkinDjangoRequestParser.trace_id_hdr_name, transform("X-B3-TraceId"))
        self.assertEqual(ZipkinDjangoRequestParser.span_id_hdr_name, transform("X-B3-SpanId"))
        self.assertEqual(ZipkinDjangoRequestParser.parent_span_id_hdr_name, transform("X-B3-ParentSpanId"))
        self.assertEqual(ZipkinDjangoRequestParser.sampled_hdr_name, transform("X-B3-Sampled"))
        self.assertEqual(ZipkinDjangoRequestParser.flags_hdr_name, transform("X-B3-Flags"))

    def test_all_fields_filled(self):
        trace_id = ZipkinId.from_binary(42)
        span_id = ZipkinId.from_binary(-42)
        parent_span_id = ZipkinId.from_binary(53)
        request = self.request_factory.get('/', **{
            ZipkinDjangoRequestParser.trace_id_hdr_name: trace_id.get_hex(),
            ZipkinDjangoRequestParser.span_id_hdr_name:  span_id.get_hex(),
            ZipkinDjangoRequestParser.parent_span_id_hdr_name:  parent_span_id.get_hex(),
            ZipkinDjangoRequestParser.sampled_hdr_name: 'true',
            ZipkinDjangoRequestParser.flags_hdr_name: '0'
        })
        self.assertZipkinDataEquals(
            self.processor.get_zipkin_data(request),
            ZipkinData(
                trace_id=trace_id,
                span_id=span_id,
                parent_span_id=parent_span_id,
                sampled=True,
                flags=False
            )
        )

    def test_no_fields_filled(self):
        self.assertZipkinDataEquals(
            self.processor.get_zipkin_data(self.request_factory.get('/')),
            ZipkinData()
        )
 def setUp(self):
     self.request_factory = RequestFactory()
     self.processor = ZipkinDjangoRequestParser()
 def test_incoming_span_id_to_parent_span_id(self):
     self.middleware.request_parser = ZipkinDjangoRequestParser()
     self.middleware.process_request(
         self.request_factory.get('/', HTTP_X_B3_SPANID='000000000000002a'))
     self.assertEqual(
         self.store.set.call_args[0][0].parent_span_id.get_binary(), 42)
 def setUp(self):
     self.request_factory = RequestFactory()
     self.processor = ZipkinDjangoRequestParser()