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 OnRemoteTell_SimpleCall_TracedMessageIsCorrectlyCreated()
        {
            //setup builder and span
            var tracer = Substitute.For <ITracer>();

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

            receiver.Path.Returns(GetActorPath(add, "/ra"));
            sender.Path.Returns(GetActorPath(add, "/sa"));

            //call
            var at  = new AkkaTracer(tracer, "akka://service");
            var trM = at.OnRemoteTell(receiver, sender, "m");

            //assert
            Assert.That(trM, Is.TypeOf <TracedMessage>());
            TracedMessage tm = (TracedMessage)trM;

            Assert.That(tm.Message, Is.EqualTo("m"));
            Assert.That(tm.Span, Is.Null);
            tracer.ReceivedWithAnyArgs(1).Inject <ITextMap>(null, null, null);
        }
        public void OnEnqueue_TracedMessageAlreadySetup_SameMessageReturned()
        {
            //setup builder and span
            var tracer = Substitute.For <ITracer>();

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

            receiver.Path.Returns(GetActorPath(add, "/ra"));
            sender.Path.Returns(GetActorPath(add, "/sa"));

            //call
            var at  = new AkkaTracer(tracer, "akka://service");
            var env = at.OnEnqueue(receiver, new Envelope(new TracedMessage("m", null), sender));

            //assert
            Assert.That(env.Message, Is.TypeOf <TracedMessage>());
            TracedMessage tm = (TracedMessage)env.Message;

            Assert.That(tm.Message, Is.EqualTo("m"));
        }