Skip to content

Commit

Permalink
add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pjfanning committed Aug 2, 2024
1 parent 9d47cb1 commit 41c2c55
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.pekko.persistence.serialization

import org.apache.pekko
import pekko.persistence.fsm.PersistentFSM.PersistentFSMSnapshot
import pekko.serialization.SerializationExtension
import pekko.testkit.PekkoSpec

import java.io.NotSerializableException
import java.util.Base64

class SnapshotSerializerMigrationIgnoreSpec extends PekkoSpec(
"pekko.persistence.snapshot-store.migrate-manifest-to=ignore"
) {

import SnapshotSerializerTestData._

"Snapshot serializer with migration ignored" should {
"deserialize pekko snapshots" in {
val serialization = SerializationExtension(system)
val bytes = serialization.serialize(Snapshot(fsmSnapshot)).get
val result = serialization.deserialize(bytes, classOf[Snapshot]).get
val deserialized = result.data
deserialized shouldBe a[PersistentFSMSnapshot[_]]
val persistentFSMSnapshot = deserialized.asInstanceOf[PersistentFSMSnapshot[_]]
persistentFSMSnapshot shouldEqual fsmSnapshot
}
"fail to deserialize akka snapshots" in {
val serialization = SerializationExtension(system)
val bytes = Base64.getDecoder.decode(akkaSnapshotData)
intercept[NotSerializableException] {
serialization.deserialize(bytes, classOf[Snapshot]).get
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,21 @@ import pekko.testkit.PekkoSpec

import java.util.Base64

private[serialization] object SnapshotSerializerTestData {
val fsmSnapshot = PersistentFSMSnapshot[String]("test-identifier", "test-data", None)
// https://github.com/apache/pekko/pull/837#issuecomment-1847320309
val akkaSnapshotData =
"PAAAAAcAAABha2thLnBlcnNpc3RlbmNlLmZzbS5QZXJzaXN0ZW50RlNNJFBlcnNpc3RlbnRGU01TbmFwc2hvdAoPdGVzdC1pZGVudGlmaWVyEg0IFBIJdGVzdC1kYXRh"
}

class SnapshotSerializerSpec extends PekkoSpec {

private val fsmSnapshot = PersistentFSMSnapshot[String]("test-identifier", "test-data", None)
import SnapshotSerializerTestData._

"Snapshot serializer" should {
"deserialize akka snapshots" in {
val serialization = SerializationExtension(system)
// https://github.com/apache/pekko/pull/837#issuecomment-1847320309
val data =
"PAAAAAcAAABha2thLnBlcnNpc3RlbmNlLmZzbS5QZXJzaXN0ZW50RlNNJFBlcnNpc3RlbnRGU01TbmFwc2hvdAoPdGVzdC1pZGVudGlmaWVyEg0IFBIJdGVzdC1kYXRh"
val bytes = Base64.getDecoder.decode(data)
val bytes = Base64.getDecoder.decode(akkaSnapshotData)
val result = serialization.deserialize(bytes, classOf[Snapshot]).get
val deserialized = result.data
deserialized shouldBe a[PersistentFSMSnapshot[_]]
Expand All @@ -53,9 +57,9 @@ class SnapshotSerializerSpec extends PekkoSpec {
"deserialize pre-saved pekko snapshots" in {
val serialization = SerializationExtension(system)
// this is Pekko encoded snapshot based on https://github.com/apache/pekko/pull/837#issuecomment-1847320309
val data =
val pekkoSnapshotData =
"SAAAAAcAAABvcmcuYXBhY2hlLnBla2tvLnBlcnNpc3RlbmNlLmZzbS5QZXJzaXN0ZW50RlNNJFBlcnNpc3RlbnRGU01TbmFwc2hvdAoPdGVzdC1pZGVudGlmaWVyEg0IFBIJdGVzdC1kYXRh"
val bytes = Base64.getDecoder.decode(data)
val bytes = Base64.getDecoder.decode(pekkoSnapshotData)
val result = serialization.deserialize(bytes, classOf[Snapshot]).get
val deserialized = result.data
deserialized shouldBe a[PersistentFSMSnapshot[_]]
Expand Down

0 comments on commit 41c2c55

Please sign in to comment.