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); }
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()); }