From f16b769d66675535a17aa096ba3eeed065df7647 Mon Sep 17 00:00:00 2001 From: tiliavir Date: Sun, 10 Sep 2023 11:10:28 +0200 Subject: [PATCH] #82: fixes tests and adds documentation --- .../digitalsignature/Signature.java | 8 ++++- .../SignatureSerialisationTest.java | 36 ++++++++++++++++--- .../digitalsignature/SignatureTest.java | 5 +-- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/baloise/confluence/digitalsignature/Signature.java b/src/main/java/com/baloise/confluence/digitalsignature/Signature.java index dac0c95..c30face 100644 --- a/src/main/java/com/baloise/confluence/digitalsignature/Signature.java +++ b/src/main/java/com/baloise/confluence/digitalsignature/Signature.java @@ -9,6 +9,12 @@ import java.util.Set; import java.util.TreeSet; +/** + * This class is deprecated and should no longer be used except for downwards compatibility, i.e. reading values from + * Bandana that were written with an older version. + *
+ * Use @{@link com.baloise.confluence.digitalsignature.Signature2} instead. + */ @Deprecated public class Signature implements Serializable, Cloneable { @@ -199,6 +205,6 @@ public boolean hasMissingSignatures() { @Override public Signature clone() throws CloneNotSupportedException{ - return (Signature) super.clone(); + return (Signature) super.clone(); } } diff --git a/src/test/java/com/baloise/confluence/digitalsignature/SignatureSerialisationTest.java b/src/test/java/com/baloise/confluence/digitalsignature/SignatureSerialisationTest.java index 9542834..2332b4b 100644 --- a/src/test/java/com/baloise/confluence/digitalsignature/SignatureSerialisationTest.java +++ b/src/test/java/com/baloise/confluence/digitalsignature/SignatureSerialisationTest.java @@ -1,6 +1,8 @@ package com.baloise.confluence.digitalsignature; +import com.atlassian.bandana.BandanaManager; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import java.io.IOException; import java.io.ObjectInputStream; @@ -9,20 +11,35 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Date; +import java.util.HashSet; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class SignatureSerialisationTest { public static final String SIG_JSON = "{\"key\":\"signature.a077cdcc5bfcf275fe447ae2c609c1c361331b4e90cb85909582e0d824cbc5b3\",\"hash\":\"a077cdcc5bfcf275fe447ae2c609c1c361331b4e90cb85909582e0d824cbc5b3\",\"pageId\":123,\"title\":\"title\",\"body\":\"body\",\"maxSignatures\":-1,\"visibilityLimit\":-1,\"signatures\":{\"signed1\":\"1970-01-01T01:00:09CET\"},\"missingSignatures\":[\"missing1\",\"missing2\"],\"notify\":[\"notify1\"]}"; @Test void deserialize() throws IOException, ClassNotFoundException { - ObjectInputStream in = new ObjectInputStream(getClass().getResourceAsStream("/signature.ser")); - Signature2 signature = (Signature2) in.readObject(); - in.close(); + String signatureKey = "signature.a077cdcc5bfcf275fe447ae2c609c1c361331b4e90cb85909582e0d824cbc5b3"; + Signature2 signature; + try(ObjectInputStream in = new ObjectInputStream(getClass().getResourceAsStream("/signature.ser"))) { + + HashSet keys = new HashSet<>(); + keys.add(signatureKey); + BandanaManager mgr = mock(BandanaManager.class); + when(mgr.getValue(any(), any())).thenReturn(in.readObject()); + when(mgr.getKeys(any())).thenReturn(keys); + + signature = Signature2.fromBandana(mgr, signatureKey); + } + + assertNotNull(signature); assertAll( - () -> assertEquals("signature.a077cdcc5bfcf275fe447ae2c609c1c361331b4e90cb85909582e0d824cbc5b3", signature.getKey()), + () -> assertEquals(signatureKey, signature.getKey()), () -> assertEquals("[missing1, missing2]", signature.getMissingSignatures().toString()), () -> assertEquals(1, signature.getSignatures().size()), () -> assertTrue(signature.getSignatures().containsKey("signed1")), @@ -52,6 +69,17 @@ void serialize() throws IOException, ClassNotFoundException { // assert the serialization we just wrote can be deserialized ObjectInputStream in = new ObjectInputStream(Files.newInputStream(path)); assertEquals(signature, in.readObject()); + } + + @Test + void deserializeHistoricalRecord() throws IOException, ClassNotFoundException { + Signature signature = new Signature(123L, "body", "title"); + signature.getNotify().add("notify1"); + signature.getMissingSignatures().add("missing1"); + signature.getMissingSignatures().add("missing2"); + signature.getSignatures().put("signed1", new Date(9999)); + + ObjectInputStream in; // assert the historically serialized class can still be deserialized in = new ObjectInputStream(this.getClass().getResourceAsStream("/signature.ser")); diff --git a/src/test/java/com/baloise/confluence/digitalsignature/SignatureTest.java b/src/test/java/com/baloise/confluence/digitalsignature/SignatureTest.java index 3c2212c..84023b7 100644 --- a/src/test/java/com/baloise/confluence/digitalsignature/SignatureTest.java +++ b/src/test/java/com/baloise/confluence/digitalsignature/SignatureTest.java @@ -63,6 +63,7 @@ void serializeAndDeserialize() { class BandanaWrapperTest { private final BandanaManager bandana = mock(DefaultBandanaManager.class); private final Signature2 signature = new Signature2(1, "test", "title"); + private final Signature signatureOld = new Signature(1, "test", "title"); @Test void toBandanaFromBandana_readAsWritten() { @@ -80,7 +81,7 @@ void toBandanaFromBandana_readAsWritten() { assertEquals(signature.serialize(), objectCapator.getValue()); when(bandana.getValue(any(), any())).thenCallRealMethod(); - when(bandana.getValue(any(), eq(key), eq(true))).thenReturn(signature); + when(bandana.getValue(any(), eq(key), eq(true))).thenReturn(signature.serialize()); assertEquals(signature, Signature2.fromBandana(bandana, signature.getKey())); } @@ -91,7 +92,7 @@ void fromBandana_signature_signature() { when(bandana.getKeys(any())).thenReturn(Collections.singletonList(key)); when(bandana.getValue(any(), any())).thenCallRealMethod(); - when(bandana.getValue(any(), eq(key), eq(true))).thenReturn(signature); + when(bandana.getValue(any(), eq(key), eq(true))).thenReturn(signatureOld); assertEquals(signature, Signature2.fromBandana(bandana, signature.getKey())); }