2 * Sone - IdentityLoaderTest.kt - Copyright © 2013–2020 David Roden
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package net.pterodactylus.sone.freenet.wot
20 import net.pterodactylus.sone.test.createIdentity
21 import net.pterodactylus.sone.test.createOwnIdentity
22 import org.hamcrest.MatcherAssert.assertThat
23 import org.hamcrest.Matchers.containsInAnyOrder
24 import org.hamcrest.Matchers.equalTo
25 import org.hamcrest.Matchers.hasSize
26 import org.hamcrest.Matchers.notNullValue
30 * Unit test for [IdentityLoader].
32 class IdentityLoaderTest {
34 private val ownIdentities = createOwnIdentities()
35 private val webOfTrustConnector = dummyWebOfTrustConnector
36 .overrideLoadAllOwnIdentities { ownIdentities.toSet() }
37 .overrideLoadTrustedIdentities { ownIdentity, _ ->
39 ownIdentities[0] -> createTrustedIdentitiesForFirstOwnIdentity()
40 ownIdentities[1] -> createTrustedIdentitiesForSecondOwnIdentity()
41 ownIdentities[2] -> createTrustedIdentitiesForThirdOwnIdentity()
42 ownIdentities[3] -> createTrustedIdentitiesForFourthOwnIdentity()
43 else -> throw RuntimeException()
48 fun loadingIdentities() {
49 val identityLoader = IdentityLoader(webOfTrustConnector, Context("Test"))
50 val identities = identityLoader.loadTrustedIdentities()
51 assertThat(identities.keys, hasSize(4))
52 assertThat(identities.keys, containsInAnyOrder(ownIdentities[0], ownIdentities[1], ownIdentities[2], ownIdentities[3]))
53 verifyIdentitiesForOwnIdentity(identities, ownIdentities[0], createTrustedIdentitiesForFirstOwnIdentity())
54 verifyIdentitiesForOwnIdentity(identities, ownIdentities[1], createTrustedIdentitiesForSecondOwnIdentity())
55 verifyIdentitiesForOwnIdentity(identities, ownIdentities[2], emptySet())
56 verifyIdentitiesForOwnIdentity(identities, ownIdentities[3], createTrustedIdentitiesForFourthOwnIdentity())
60 fun loadingIdentitiesWithoutContext() {
61 val identityLoaderWithoutContext = IdentityLoader(webOfTrustConnector)
62 val identities = identityLoaderWithoutContext.loadTrustedIdentities()
63 assertThat(identities.keys, hasSize(4))
64 assertThat(identities.keys, containsInAnyOrder(ownIdentities[0], ownIdentities[1], ownIdentities[2], ownIdentities[3]))
65 verifyIdentitiesForOwnIdentity(identities, ownIdentities[0], createTrustedIdentitiesForFirstOwnIdentity())
66 verifyIdentitiesForOwnIdentity(identities, ownIdentities[1], createTrustedIdentitiesForSecondOwnIdentity())
67 verifyIdentitiesForOwnIdentity(identities, ownIdentities[2], createTrustedIdentitiesForThirdOwnIdentity())
68 verifyIdentitiesForOwnIdentity(identities, ownIdentities[3], createTrustedIdentitiesForFourthOwnIdentity())
71 private fun verifyIdentitiesForOwnIdentity(identities: Map<OwnIdentity, Collection<Identity>>, ownIdentity: OwnIdentity, trustedIdentities: Set<Identity>) {
72 assertThat(identities[ownIdentity], equalTo<Collection<Identity>>(trustedIdentities))
76 fun `loading all identities merges remote identities’ trust values`() {
77 val ownIdentity1 = createOwnIdentity("o1")
78 val ownIdentity2 = createOwnIdentity("o2")
79 val webOfTrustConnector = dummyWebOfTrustConnector
80 .overrideLoadAllOwnIdentities { setOf(ownIdentity1, ownIdentity2) }
81 .overrideLoadAllIdentities { ownIdentity, _ ->
83 ownIdentity1 -> setOf(createIdentity().setTrust(ownIdentity1, Trust(100, 50, 2)))
84 else -> setOf(createIdentity().setTrust(ownIdentity2, Trust(80, 40, 2)))
87 val identityLoader = IdentityLoader(webOfTrustConnector)
88 val allIdentities = identityLoader.loadAllIdentities()
89 assertThat(allIdentities[ownIdentity1]!!.first().trust[ownIdentity2], notNullValue())
93 fun `loading trusted identities merges remote identities’ trust values`() {
94 val ownIdentity1 = createOwnIdentity("o1")
95 val ownIdentity2 = createOwnIdentity("o2")
96 val webOfTrustConnector = dummyWebOfTrustConnector
97 .overrideLoadAllOwnIdentities { setOf(ownIdentity1, ownIdentity2) }
98 .overrideLoadTrustedIdentities { ownIdentity, _ ->
100 ownIdentity1 -> setOf(createIdentity().setTrust(ownIdentity1, Trust(100, 50, 2)))
101 else -> setOf(createIdentity().setTrust(ownIdentity2, Trust(80, 40, 2)))
104 val identityLoader = IdentityLoader(webOfTrustConnector)
105 val allIdentities = identityLoader.loadTrustedIdentities()
106 assertThat(allIdentities[ownIdentity1]!!.first().trust[ownIdentity2], notNullValue())
111 private fun createOwnIdentities() = listOf(
112 createOwnIdentity("O1", "ON1", "OR1", "OI1", setOf("Test", "Test2"), mapOf("KeyA" to "ValueA", "KeyB" to "ValueB")),
113 createOwnIdentity("O2", "ON2", "OR2", "OI2", setOf("Test"), mapOf("KeyC" to "ValueC")),
114 createOwnIdentity("O3", "ON3", "OR3", "OI3", setOf("Test2"), mapOf("KeyE" to "ValueE", "KeyD" to "ValueD")),
115 createOwnIdentity("O4", "ON4", "OR$", "OI4", setOf("Test"), mapOf("KeyA" to "ValueA", "KeyD" to "ValueD"))
118 private fun createTrustedIdentitiesForFirstOwnIdentity() = setOf(
119 createIdentity("I11", "IN11", "IR11", setOf("Test"), mapOf("KeyA" to "ValueA"))
122 private fun createTrustedIdentitiesForSecondOwnIdentity() = setOf(
123 createIdentity("I21", "IN21", "IR21", setOf("Test", "Test2"), mapOf("KeyB" to "ValueB"))
126 private fun createTrustedIdentitiesForThirdOwnIdentity() = setOf(
127 createIdentity("I31", "IN31", "IR31", setOf("Test", "Test3"), mapOf("KeyC" to "ValueC"))
130 private fun createTrustedIdentitiesForFourthOwnIdentity(): Set<Identity> = emptySet()