This is an automated email from the ASF dual-hosted git repository.
pjfanning pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko.git
The following commit(s) were added to refs/heads/main by this push:
new c57fdcd983 Update SnapshotSerializerSpec.scala (#2891)
c57fdcd983 is described below
commit c57fdcd983c7e6c8a68534817fa192ba5ced95a3
Author: PJ Fanning <[email protected]>
AuthorDate: Thu Apr 23 11:35:29 2026 +0200
Update SnapshotSerializerSpec.scala (#2891)
---
.../serialization/SnapshotSerializerSpec.scala | 44 +++++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
diff --git
a/persistence/src/test/scala/org/apache/pekko/persistence/serialization/SnapshotSerializerSpec.scala
b/persistence/src/test/scala/org/apache/pekko/persistence/serialization/SnapshotSerializerSpec.scala
index ac018561b4..e8aaada854 100644
---
a/persistence/src/test/scala/org/apache/pekko/persistence/serialization/SnapshotSerializerSpec.scala
+++
b/persistence/src/test/scala/org/apache/pekko/persistence/serialization/SnapshotSerializerSpec.scala
@@ -17,14 +17,16 @@
package org.apache.pekko.persistence.serialization
+import java.nio.ByteOrder
import java.util.Base64
import annotation.nowarn
import org.apache.pekko
import pekko.persistence.fsm.PersistentFSM.PersistentFSMSnapshot
-import pekko.serialization.SerializationExtension
+import pekko.serialization.{ SerializationExtension, Serializers }
import pekko.testkit.PekkoSpec
+import pekko.util.SWARUtil
@nowarn("msg=deprecated")
private[serialization] object SnapshotSerializerTestData {
@@ -69,5 +71,45 @@ class SnapshotSerializerSpec extends PekkoSpec {
val persistentFSMSnapshot =
deserialized.asInstanceOf[PersistentFSMSnapshot[_]]
persistentFSMSnapshot shouldEqual fsmSnapshot
}
+ "produce binary format with header length in first 4 bytes
(little-endian)" in {
+ val serialization = SerializationExtension(system)
+ val bytes = serialization.serialize(Snapshot(fsmSnapshot)).get
+ // bytes[0..3] = header length as little-endian int32
+ val headerLength = SWARUtil.getInt(bytes, 0, ByteOrder.LITTLE_ENDIAN)
+ headerLength should be > 0
+ headerLength should be < bytes.length
+ // header occupies bytes[4 .. 4+headerLength)
+ // remaining bytes are the snapshot payload
+ val payloadLength = bytes.length - 4 - headerLength
+ payloadLength should be > 0
+ }
+ "produce binary format with serializer ID in header (little-endian)" in {
+ val serialization = SerializationExtension(system)
+ val bytes = serialization.serialize(Snapshot(fsmSnapshot)).get
+ val headerLength = SWARUtil.getInt(bytes, 0, ByteOrder.LITTLE_ENDIAN)
+ // header bytes[4..7] = serializer ID as little-endian int32
+ val serializerId = SWARUtil.getInt(bytes, 4, ByteOrder.LITTLE_ENDIAN)
+ val snapshotSerializer = serialization.findSerializerFor(fsmSnapshot)
+ serializerId shouldEqual snapshotSerializer.identifier
+ // header bytes[8..4+headerLength) = manifest as UTF-8 string
+ val manifestBytes = bytes.slice(8, 4 + headerLength)
+ val manifest = new String(manifestBytes, "UTF-8")
+ manifest shouldEqual Serializers.manifestFor(snapshotSerializer,
fsmSnapshot)
+ }
+ "serialize and deserialize a simple string snapshot" in {
+ val serialization = SerializationExtension(system)
+ val snapshot = Snapshot("hello pekko")
+ val bytes = serialization.serialize(snapshot).get
+ val result = serialization.deserialize(bytes, classOf[Snapshot]).get
+ result.data shouldEqual "hello pekko"
+ }
+ "serialized bytes start with header length followed by header" in {
+ val serialization = SerializationExtension(system)
+ val snapshot = Snapshot("test")
+ val bytes = serialization.serialize(snapshot).get
+ // verify overall structure: total = 4 (headerLenField) + headerLen +
payloadLen
+ val headerLength = SWARUtil.getInt(bytes, 0, ByteOrder.LITTLE_ENDIAN)
+ bytes.length shouldEqual (4 + headerLength +
serialization.findSerializerFor("test").toBinary("test").length)
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]