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]

Reply via email to