示例#1
0
    def test_reset_context_manager(self):
        ctxm = DefaultContextManager()
        ctx = ctxm.get()

        # new context manager should not share same context
        ctxm = DefaultContextManager()
        assert ctxm.get() is not ctx
示例#2
0
    def test_set_context(self):
        # the Context can be set in the current Thread
        ctx = Context()
        ctxm = DefaultContextManager()
        assert ctxm.get() is not ctx

        ctxm.set(ctx)
        assert ctxm.get() is ctx
示例#3
0
    def test_multiple_threads_multiple_context(self):
        # each thread should have it's own Context
        ctxm = DefaultContextManager()

        def _fill_ctx():
            ctx = ctxm.get()
            span = Span(tracer=None, name="fake_span")
            ctx.add_span(span)
            assert 1 == len(ctx._trace)

        threads = [threading.Thread(target=_fill_ctx) for _ in range(100)]

        for t in threads:
            t.daemon = True
            t.start()

        for t in threads:
            t.join()

        # the main instance should have an empty Context
        # because it has not been used in this thread
        ctx = ctxm.get()
        assert 0 == len(ctx._trace)
示例#4
0
 def test_get_or_create(self):
     # asking the Context multiple times should return
     # always the same instance
     ctxm = DefaultContextManager()
     assert ctxm.get() == ctxm.get()