Exemple #1
0
        public void MessageContainerSerializer_must_serialize_and_deserialize_ActorSelectionMessage()
        {
            var elements = new List <SelectionPathElement>()
            {
                new SelectChildName("user"),
                new SelectChildName("a"),
                new SelectChildName("b"),
                new SelectParent(),
                new SelectChildPattern("*"),
                new SelectChildName("c")
            };
            var message = new ActorSelectionMessage("hello", elements.ToArray());
            var actual  = AssertAndReturn(message);

            actual.Message.Should().Be(message.Message);
            actual.Elements.Should().BeEquivalentTo(elements);
        }
Exemple #2
0
        public void Failed_serialization_should_give_proper_exception_message()
        {
            var childName = "dummy";
            var message   = new ActorSelectionMessage(
                new SomeMessage(),
                new SelectionPathElement[] { new SelectChildName(childName) },
                true);

            var node1      = new Address("akka.tcp", "Sys", "localhost", 2551);
            var serialized = MessageSerializer.Serialize((ExtendedActorSystem)Sys, node1, message);

            var o = new object();

            o.Invoking(s => MessageSerializer.Deserialize((ExtendedActorSystem)Sys, serialized)).Should()
            .Throw <SerializationException>()
            .WithMessage($"Failed to deserialize payload object when deserializing {nameof(ActorSelectionMessage)} with payload [SerializerId=13, Manifest=SM] addressed to [{childName}]. {Serializer.GetErrorForSerializerId(13)}")
            .WithInnerExceptionExactly <NotImplementedException>();
        }
        private byte[] SerializeActorSelectionMessage(ActorSelectionMessage sel)
        {
            SelectionEnvelope.Builder builder = SelectionEnvelope.CreateBuilder();
            Serializer serializer             = system.Serialization.FindSerializerFor(sel.Message);

            builder.SetEnclosedMessage(ByteString.CopyFrom(serializer.ToBinary(sel.Message)));
            builder.SetSerializerId(serializer.Identifier);
            if (serializer.IncludeManifest)
            {
                builder.SetMessageManifest(ByteString.CopyFromUtf8(sel.Message.GetType().AssemblyQualifiedName));
            }
            foreach (SelectionPathElement element in sel.Elements)
            {
                element.Match()
                .With <SelectChildName>(m => builder.AddPattern(BuildPattern(m.Name, PatternType.CHILD_NAME)))
                .With <SelectChildPattern>(
                    m => builder.AddPattern(BuildPattern(m.PatternStr, PatternType.CHILD_PATTERN)))
                .With <SelectParent>(m => builder.AddPattern(BuildPattern(null, PatternType.PARENT)));
            }

            return(builder.Build().ToByteArray());
        }