public void AroundReceive_SpanMessageAvailable_SpanContextChildSetup()
        {
            //setup builder and span
            var tracer      = Substitute.For <ITracer>();
            var spanBuilder = Substitute.For <ISpanBuilder>();

            tracer.BuildSpan(null).ReturnsForAnyArgs(spanBuilder);
            var scope = Substitute.For <IScope>();

            spanBuilder.StartActive(true).ReturnsForAnyArgs(scope);

            //setup akka context
            var context = Substitute.For <IActorContext>();
            var add     = new Address("akka", "system");

            context.Self.Path.Returns(GetActorPath(add, "/ra"));
            context.Sender.Path.Returns(GetActorPath(add, "/sa"));

            //call
            var at = new AkkaTracer(tracer, "akka://service");
            var m  = new TracedMessage("m", null);

            m.Context["a"] = "b";
            at.AroundReceive(context, m, typeof(SampleActor));

            //assert
            spanBuilder.ReceivedWithAnyArgs(1).AsChildOf((ISpanContext)null);
        }
        public void AroundReceive_SimpleSenderReceiver_SpanSetupCorrectly()
        {
            //setup builder and span
            var tracer      = Substitute.For <ITracer>();
            var spanBuilder = Substitute.For <ISpanBuilder>();

            tracer.BuildSpan(null).ReturnsForAnyArgs(spanBuilder);
            var scope = Substitute.For <IScope>();

            spanBuilder.StartActive(true).ReturnsForAnyArgs(scope);

            //setup akka context
            var context = Substitute.For <IActorContext>();
            var add     = new Address("akka", "system");

            context.Self.Path.Returns(GetActorPath(add, "/ra"));
            context.Sender.Path.Returns(GetActorPath(add, "/sa"));

            //call
            var at = new AkkaTracer(tracer, "akka://service");

            at.AroundReceive(context, new TracedMessage("m", null), typeof(SampleActor));

            //assert
            scope.Span.Received(1).SetTag("sender.path", "akka://service/sa");
            scope.Span.Received(1).SetTag("receiver.path", "akka://service/ra");
            scope.Span.Received(1).SetTag("receiver.type", "Akka.OpenTracing.Tests.SampleActor");
            scope.Span.Received(1).SetTag("message.type", "System.String");
        }