public async Task GetFromMessageShouldSucceed()
        {
            // Arrange
            Message.From     = TunnelIdentity.ToNode();
            Message.Metadata = new Dictionary <string, string>
            {
                { Take.Blip.Client.Extensions.Tunnel.TunnelExtension.TUNNEL_OWNER_METADATA_KEY, Owner },
                { Take.Blip.Client.Extensions.Tunnel.TunnelExtension.TUNNEL_ORIGINATOR_METADATA_KEY, Originator }
            };

            var target = GetTarget();

            // Act
            var actualOriginator = await target.GetVariableAsync("originator", Context, CancellationToken);

            var actualOwner = await target.GetVariableAsync("owner", Context, CancellationToken);

            var actualDestination = await target.GetVariableAsync("destination", Context, CancellationToken);

            var actualIdentity = await target.GetVariableAsync("identity", Context, CancellationToken);

            // Assert
            actualOriginator.ShouldBe(Identity.Parse(Originator).ToString());
            actualOwner.ShouldBe(Owner);
            actualDestination.ShouldBe(ApplicationIdentity);
            actualIdentity.ShouldBe(TunnelIdentity);
        }
        public async Task GetFromIncompleteMetadataShouldReturnNull()
        {
            // Arrange
            Message.From     = TunnelIdentity.ToNode();
            Message.Metadata = new Dictionary <string, string>
            {
                { Take.Blip.Client.Extensions.Tunnel.TunnelExtension.TUNNEL_OWNER_METADATA_KEY, Owner },
            };

            var target = GetTarget();

            // Act
            var actualOriginator = await target.GetVariableAsync("originator", Context, CancellationToken);

            var actualOwner = await target.GetVariableAsync("owner", Context, CancellationToken);

            var actualDestination = await target.GetVariableAsync("destination", Context, CancellationToken);

            var actualIdentity = await target.GetVariableAsync("identity", Context, CancellationToken);

            // Assert
            actualOriginator.ShouldBeNull();
            actualOwner.ShouldBeNull();
            actualDestination.ShouldBeNull();
            actualIdentity.ShouldBeNull();
        }
        public async Task GetFromMessageAndApplicationShouldSucceedEvenInATunnel()
        {
            // Arrange
            Message.From = TunnelIdentity.ToNode();
            var target = GetTarget();

            // Act
            var actual = await target.GetUserOwnerIdentitiesAsync(Message, BuilderConfiguration, CancellationToken);

            // Assert
            actual.ShouldNotBeNull();
            actual.UserIdentity.ShouldBe(TunnelIdentity);
            actual.OwnerIdentity.ShouldBe(ApplicationIdentity);
        }
        public async Task GetFromTunnelShouldSucceed()
        {
            // Arrange
            Message.From = TunnelIdentity.ToNode();
            BuilderConfiguration.UseTunnelOwnerContext = true;
            var target = GetTarget();


            // Act
            var actual = await target.GetUserOwnerIdentitiesAsync(Message, BuilderConfiguration, CancellationToken);

            // Assert
            actual.ShouldNotBeNull();
            actual.UserIdentity.ShouldBe(UserIdentity);
            actual.OwnerIdentity.ShouldBe(TunnelOwner);
        }
        public async Task GetFromExtensionShouldSucceed()
        {
            // Arrange
            Message.From = TunnelIdentity.ToNode();
            TunnelExtension.GetTunnelAsync(TunnelIdentity, CancellationToken).Returns(Tunnel);

            var target = GetTarget();

            // Act
            var actualOriginator = await target.GetVariableAsync("originator", Context, CancellationToken);

            var actualOwner = await target.GetVariableAsync("owner", Context, CancellationToken);

            var actualDestination = await target.GetVariableAsync("destination", Context, CancellationToken);

            var actualIdentity = await target.GetVariableAsync("identity", Context, CancellationToken);

            // Assert
            actualOriginator.ShouldBe(Originator);
            actualOwner.ShouldBe(Owner);
            actualDestination.ShouldBe(ApplicationIdentity);
            actualIdentity.ShouldBe(TunnelIdentity);
        }
        public async Task GetFromExtensionWhenDoesNotExistsShouldReturnNull()
        {
            // Arrange
            Message.From = TunnelIdentity.ToNode();
            TunnelExtension.GetTunnelAsync(TunnelIdentity, CancellationToken)
            .Throws(new LimeException(ReasonCodes.COMMAND_RESOURCE_NOT_FOUND, "Not found"));

            var target = GetTarget();

            // Act
            var actualOriginator = await target.GetVariableAsync("originator", Context, CancellationToken);

            var actualOwner = await target.GetVariableAsync("owner", Context, CancellationToken);

            var actualDestination = await target.GetVariableAsync("destination", Context, CancellationToken);

            var actualIdentity = await target.GetVariableAsync("identity", Context, CancellationToken);

            // Assert
            actualOriginator.ShouldBeNull();
            actualOwner.ShouldBeNull();
            actualDestination.ShouldBeNull();
            actualIdentity.ShouldBeNull();
        }