Make SerializationCompatibilitySpec check instances and not tuples. See #3184

This commit is contained in:
Björn Antonsson 2013-04-24 13:29:11 +02:00
parent 9fd42c7cab
commit a6bf9c1408
2 changed files with 87 additions and 21 deletions

View file

@ -18,6 +18,7 @@ import com.google.protobuf.Message
import com.typesafe.config._
import akka.pattern.ask
import org.apache.commons.codec.binary.Hex.{ encodeHex, decodeHex }
import akka.OnlyCauseStackTrace
object SerializationTests {
@ -329,38 +330,101 @@ class SerializationCompatibilitySpec extends AkkaSpec(SerializationTests.mostlyR
"Cross-version serialization compatibility" must {
def verify(obj: SystemMessage, asExpected: String): Unit =
String.valueOf(ser.serialize((obj, obj.getClass)).map(encodeHex).get) must be === asExpected
String.valueOf(ser.serialize(obj).map(encodeHex).get) must be === asExpected
"be preserved for the Create SystemMessage" in {
verify(Create(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001b616b6b612e64697370617463682e7379736d73672e437265617465bcdf9f7f2675038d02000078707671007e0003")
verify(Create(Some(FakeActorInitializationException(FakeActorRef("failure"), "failed"))),
"aced00057372001b616b6b612e64697370617463682e7379736d73672e4372656174650000000000" +
"0000010200014c00076661696c75726574000e4c7363616c612f4f7074696f6e3b78707372000a73" +
"63616c612e536f6d65e2a09f87fc0836ae0200014c0001787400124c6a6176612f6c616e672f4f62" +
"6a6563743b7872000c7363616c612e4f7074696f6ee36024a8328a45e9020000787073720033616b" +
"6b612e73657269616c697a6174696f6e2e46616b654163746f72496e697469616c697a6174696f6e" +
"457863657074696f6ea310e76a3232c9070200024c00056163746f727400154c616b6b612f616374" +
"6f722f4163746f725265663b4c00076d6573736167657400124c6a6176612f6c616e672f53747269" +
"6e673b78720027616b6b612e6163746f722e4163746f72496e697469616c697a6174696f6e457863" +
"657074696f6e00000000000000010200014c00056163746f7271007e000878720012616b6b612e41" +
"6b6b61457863657074696f6e00000000000000010200007872001a6a6176612e6c616e672e52756e" +
"74696d65457863657074696f6e9e5f06470a3483e5020000787200136a6176612e6c616e672e4578" +
"63657074696f6ed0fd1f3e1a3b1cc4020000787200136a6176612e6c616e672e5468726f7761626c" +
"65d5c635273977b8cb0300034c000563617573657400154c6a6176612f6c616e672f5468726f7761" +
"626c653b4c000d64657461696c4d65737361676571007e00095b000a737461636b54726163657400" +
"1e5b4c6a6176612f6c616e672f537461636b5472616365456c656d656e743b787070740006666169" +
"6c65647572001e5b4c6a6176612e6c616e672e537461636b5472616365456c656d656e743b02462a" +
"3c3cfd2239020000787000000000787372001f616b6b612e73657269616c697a6174696f6e2e4661" +
"6b654163746f7252656600000000000000010200014c00046e616d6571007e00097872001b616b6b" +
"612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f0200007872001361" +
"6b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400076661696c7572" +
"6571007e001871007e0012")
}
"be preserved for the Recreate SystemMessage" in {
verify(Recreate(null), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001d616b6b612e64697370617463682e7379736d73672e52656372656174650987c65c8d378a800200014c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b7870707671007e0003")
verify(Recreate(null),
"aced00057372001d616b6b612e64697370617463682e7379736d73672e5265637265617465000000" +
"00000000010200014c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b" +
"787070")
}
"be preserved for the Suspend SystemMessage" in {
verify(Suspend(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001c616b6b612e64697370617463682e7379736d73672e53757370656e6464e531d5d134b59902000078707671007e0003")
verify(Suspend(),
"aced00057372001c616b6b612e64697370617463682e7379736d73672e53757370656e6400000000" +
"000000010200007870")
}
"be preserved for the Resume SystemMessage" in {
verify(Resume(null), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001b616b6b612e64697370617463682e7379736d73672e526573756d65dc5e646d445fcb010200014c000f63617573656442794661696c7572657400154c6a6176612f6c616e672f5468726f7761626c653b7870707671007e0003")
verify(Resume(null),
"aced00057372001b616b6b612e64697370617463682e7379736d73672e526573756d650000000000" +
"0000010200014c000f63617573656442794661696c7572657400154c6a6176612f6c616e672f5468" +
"726f7761626c653b787070")
}
"be preserved for the Terminate SystemMessage" in {
verify(Terminate(), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001e616b6b612e64697370617463682e7379736d73672e5465726d696e61746509d66ca68318700f02000078707671007e0003")
verify(Terminate(),
"aced00057372001e616b6b612e64697370617463682e7379736d73672e5465726d696e6174650000" +
"0000000000010200007870")
}
"be preserved for the Supervise SystemMessage" in {
verify(Supervise(FakeActorRef("child"), true), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001e616b6b612e64697370617463682e7379736d73672e5375706572766973652d0b363f56ab5feb0200025a00056173796e634c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b7870017372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368696c647671007e0003")
verify(Supervise(FakeActorRef("child"), true),
"aced00057372001e616b6b612e64697370617463682e7379736d73672e5375706572766973650000" +
"0000000000010200025a00056173796e634c00056368696c647400154c616b6b612f6163746f722f" +
"4163746f725265663b7870017372001f616b6b612e73657269616c697a6174696f6e2e46616b6541" +
"63746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f53" +
"7472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c" +
"3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402" +
"000078707400056368696c64")
}
"be preserved for the Watch SystemMessage" in {
verify(Watch(FakeActorRef("watchee"), FakeActorRef("watcher")), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001a616b6b612e64697370617463682e7379736d73672e57617463682e1e65bc74394fc40200024c00077761746368656574001d4c616b6b612f6163746f722f496e7465726e616c4163746f725265663b4c00077761746368657271007e000478707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f46940200007870740007776174636865657371007e0006740007776174636865727671007e0003")
verify(Watch(FakeActorRef("watchee"), FakeActorRef("watcher")),
"aced00057372001a616b6b612e64697370617463682e7379736d73672e5761746368000000000000" +
"00010200024c00077761746368656574001d4c616b6b612f6163746f722f496e7465726e616c4163" +
"746f725265663b4c00077761746368657271007e000178707372001f616b6b612e73657269616c69" +
"7a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d65740012" +
"4c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e61" +
"6c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72" +
"526566c3585dde655f46940200007870740007776174636865657371007e00037400077761746368" +
"6572")
}
"be preserved for the Unwatch SystemMessage" in {
verify(Unwatch(FakeActorRef("watchee"), FakeActorRef("watcher")), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001c616b6b612e64697370617463682e7379736d73672e556e776174636858501f7ee63dc2100200024c0007776174636865657400154c616b6b612f6163746f722f4163746f725265663b4c00077761746368657271007e000478707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f46940200007870740007776174636865657371007e0006740007776174636865727671007e0003")
verify(Unwatch(FakeActorRef("watchee"), FakeActorRef("watcher")),
"aced00057372001c616b6b612e64697370617463682e7379736d73672e556e776174636800000000" +
"000000010200024c0007776174636865657400154c616b6b612f6163746f722f4163746f72526566" +
"3b4c00077761746368657271007e000178707372001f616b6b612e73657269616c697a6174696f6e" +
"2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f" +
"6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72" +
"526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585d" +
"de655f46940200007870740007776174636865657371007e000374000777617463686572")
}
"be preserved for the NoMessage SystemMessage" in {
verify(NoMessage, "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001f616b6b612e64697370617463682e7379736d73672e4e6f4d65737361676524b401a3610ccb70dd02000078707671007e0003")
verify(NoMessage,
"aced00057372001f616b6b612e64697370617463682e7379736d73672e4e6f4d6573736167652400" +
"000000000000010200007870")
}
"be preserved for the Failed SystemMessage" in {
// Using null as the cause to avoid a large serialized message
verify(Failed(FakeActorRef("child"), cause = null, uid = 0), "aced00057372000c7363616c612e5475706c6532bc7daadf46211a990200024c00025f317400124c6a6176612f6c616e672f4f626a6563743b4c00025f3271007e000178707372001b616b6b612e64697370617463682e7379736d73672e4661696c656400000000000000010200034900037569644c000563617573657400154c6a6176612f6c616e672f5468726f7761626c653b4c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b787000000000707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f7252656600000000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b7872001b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368696c647671007e0003")
verify(Failed(FakeActorRef("child"), cause = null, uid = 0),
"aced00057372001b616b6b612e64697370617463682e7379736d73672e4661696c65640000000000" +
"0000010200034900037569644c000563617573657400154c6a6176612f6c616e672f5468726f7761" +
"626c653b4c00056368696c647400154c616b6b612f6163746f722f4163746f725265663b78700000" +
"0000707372001f616b6b612e73657269616c697a6174696f6e2e46616b654163746f725265660000" +
"0000000000010200014c00046e616d657400124c6a6176612f6c616e672f537472696e673b787200" +
"1b616b6b612e6163746f722e496e7465726e616c4163746f72526566869e6c3669e60e5f02000078" +
"720013616b6b612e6163746f722e4163746f72526566c3585dde655f469402000078707400056368" +
"696c64")
}
}
}
@ -419,4 +483,6 @@ protected[akka] case class FakeActorRef(name: String) extends InternalActorRef w
override def getChild(name: Iterator[String]) = ???
override def isLocal = ???
override def !(message: Any)(implicit sender: ActorRef = Actor.noSender) = ???
}
}
protected[akka] case class FakeActorInitializationException(actor: ActorRef, message: String) extends ActorInitializationException(actor, message, null) with OnlyCauseStackTrace

View file

@ -200,47 +200,47 @@ trait StashWhenFailed
/**
* INTERNAL API
*/
@SerialVersionUID(-4836972106317757555L)
@SerialVersionUID(1L)
private[akka] case class Create(failure: Option[ActorInitializationException]) extends SystemMessage // sent to self from Dispatcher.register
/**
* INTERNAL API
*/
@SerialVersionUID(686735569005808256L)
@SerialVersionUID(1L)
private[akka] case class Recreate(cause: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.restart
/**
* INTERNAL API
*/
@SerialVersionUID(7270271967867221401L)
@SerialVersionUID(1L)
private[akka] case class Suspend() extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.suspend
/**
* INTERNAL API
*/
@SerialVersionUID(-2567504317093262591L)
@SerialVersionUID(1L)
private[akka] case class Resume(causedByFailure: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.resume
/**
* INTERNAL API
*/
@SerialVersionUID(708873453777219599L)
@SerialVersionUID(1L)
private[akka] case class Terminate() extends SystemMessage // sent to self from ActorCell.stop
/**
* INTERNAL API
*/
@SerialVersionUID(3245747602115485675L)
@SerialVersionUID(1L)
private[akka] case class Supervise(child: ActorRef, async: Boolean) extends SystemMessage // sent to supervisor ActorRef from ActorCell.start
/**
* INTERNAL API
*/
@SerialVersionUID(3323205435124174788L)
@SerialVersionUID(1L)
private[akka] case class Watch(watchee: InternalActorRef, watcher: InternalActorRef) extends SystemMessage // sent to establish a DeathWatch
/**
* INTERNAL API
*/
@SerialVersionUID(6363620903363658256L)
@SerialVersionUID(1L)
private[akka] case class Unwatch(watchee: ActorRef, watcher: ActorRef) extends SystemMessage // sent to tear down a DeathWatch
/**
* INTERNAL API
*/
@SerialVersionUID(-5475916034683997987L)
@SerialVersionUID(1L)
private[akka] case object NoMessage extends SystemMessage // switched into the mailbox to signal termination
/**