From a6955eb81a26145526cc3637f146d39b6299f0e7 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Wed, 5 Jul 2023 17:18:30 +0200 Subject: [PATCH] Fix CertificationSet.add() and add test --- .../wot/dijkstra/sq/CertificationSet.kt | 3 +++ .../wot/dijkstra/CertificationSetTest.kt | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/dijkstra/sq/CertificationSet.kt b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/dijkstra/sq/CertificationSet.kt index 253454d6..3929e097 100644 --- a/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/dijkstra/sq/CertificationSet.kt +++ b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/dijkstra/sq/CertificationSet.kt @@ -100,6 +100,9 @@ class CertificationSet( val existing = certificationsForUserId[0] if (existing.creationTime.before(certification.creationTime)) { certificationsForUserId.clear() // throw away older certifications + } + // If our certification is newest + if (!existing.creationTime.after(certification.creationTime)) { certificationsForUserId.add(certification) } // else this certification is older, so ignore diff --git a/wot-dijkstra/src/test/kotlin/org/pgpainless/wot/dijkstra/CertificationSetTest.kt b/wot-dijkstra/src/test/kotlin/org/pgpainless/wot/dijkstra/CertificationSetTest.kt index be99c830..8fa93605 100644 --- a/wot-dijkstra/src/test/kotlin/org/pgpainless/wot/dijkstra/CertificationSetTest.kt +++ b/wot-dijkstra/src/test/kotlin/org/pgpainless/wot/dijkstra/CertificationSetTest.kt @@ -9,6 +9,7 @@ import org.junit.jupiter.api.assertThrows import org.pgpainless.wot.dijkstra.sq.* import java.util.* import kotlin.test.assertEquals +import kotlin.test.assertFalse import kotlin.test.assertTrue class CertificationSetTest { @@ -107,4 +108,27 @@ class CertificationSetTest { assertEquals("0000000000000000000000000000000000000000 delegates to 1111111111111111111111111111111111111111\n" + "0000000000000000000000000000000000000000 certifies [Bob ] 1111111111111111111111111111111111111111", twoCerts.toString()) } + + @Test + fun `verify that for multiple Certifications over the same datum, only the most recent certifications are preserved`() { + val now = Date() + val fiveSecondsBefore = Date(now.time - 5000) + val old = Certification(alice, "Bob ", bob, fiveSecondsBefore) + val new = Certification(alice, "Bob ", bob, now) + val new2 = Certification(alice, bob, "Bob ", now, null, true, 44, Depth.auto(10), RegexSet.wildcard()) + + var set = CertificationSet(alice, bob, mapOf()) + set.add(old) + + assertEquals(listOf(old), set.certifications["Bob "]) + + set.add(new) + assertEquals(listOf(new), set.certifications["Bob "]) + + set.add(new2) + assertEquals(listOf(new, new2), set.certifications["Bob "]) + + set.add(old) + assertEquals(listOf(new, new2), set.certifications["Bob "]) + } } \ No newline at end of file