From 22aed72ffbaf599af3befd9ae272442be3a7224d Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Fri, 1 Nov 2019 18:38:29 +0100 Subject: [PATCH] =?utf8?q?=F0=9F=9A=A7=20Add=20first=20tests=20for=20WOT?= =?utf8?q?=20connector?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../sone/freenet/wot/WebOfTrustConnectorTest.kt | 196 +++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 src/test/kotlin/net/pterodactylus/sone/freenet/wot/WebOfTrustConnectorTest.kt diff --git a/src/test/kotlin/net/pterodactylus/sone/freenet/wot/WebOfTrustConnectorTest.kt b/src/test/kotlin/net/pterodactylus/sone/freenet/wot/WebOfTrustConnectorTest.kt new file mode 100644 index 0000000..dd2cc7a --- /dev/null +++ b/src/test/kotlin/net/pterodactylus/sone/freenet/wot/WebOfTrustConnectorTest.kt @@ -0,0 +1,196 @@ +package net.pterodactylus.sone.freenet.wot + +import freenet.support.* +import freenet.support.api.* +import net.pterodactylus.sone.freenet.* +import net.pterodactylus.sone.freenet.plugin.* +import net.pterodactylus.sone.test.* +import org.hamcrest.* +import org.hamcrest.MatcherAssert.* +import org.hamcrest.Matchers.* +import org.hamcrest.core.* +import kotlin.test.* + +/** + * Unit test for [WebOfTrustConnector]. + */ +class WebOfTrustConnectorTest { + + @Test + fun `wot plugin can be pinged`() { + val pluginConnector = createPluginConnector("Ping") + val connector = WebOfTrustConnector(pluginConnector) + connector.ping() + } + + @Test + fun `own identities are returned correctly`() { + val pluginConnector = createPluginConnector("GetOwnIdentities") { + put("Identity0", "id-0") + put("RequestURI0", "request-uri-0") + put("InsertURI0", "insert-uri-0") + put("Nickname0", "nickname-0") + put("Contexts0.Context0", "id-0-context-0") + put("Properties0.Property0.Name", "id-0-property-0-name") + put("Properties0.Property0.Value", "id-0-property-0-value") + put("Identity1", "id-1") + put("RequestURI1", "request-uri-1") + put("InsertURI1", "insert-uri-1") + put("Nickname1", "nickname-1") + put("Contexts1.Context0", "id-1-context-0") + put("Properties1.Property0.Name", "id-1-property-0-name") + put("Properties1.Property0.Value", "id-1-property-0-value") + } + val connector = WebOfTrustConnector(pluginConnector) + val ownIdentities = connector.loadAllOwnIdentities() + assertThat(ownIdentities, containsInAnyOrder( + isOwnIdentity("id-0", "nickname-0", "request-uri-0", "insert-uri-0", contains("id-0-context-0"), hasEntry("id-0-property-0-name", "id-0-property-0-value")), + isOwnIdentity("id-1", "nickname-1", "request-uri-1", "insert-uri-1", contains("id-1-context-0"), hasEntry("id-1-property-0-name", "id-1-property-0-value")) + )) + } + + @Test + fun `trusted identities are requested with correct own identity`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Truster", equalTo("id"))) + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + connector.loadTrustedIdentities(ownIdentity) + } + + @Test + fun `trusted identities are requested with correct selection parameter`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Selection", equalTo("+"))) + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + connector.loadTrustedIdentities(ownIdentity) + } + + @Test + fun `trusted identities are requested with empty context if null context requested`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Context", equalTo(""))) + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + connector.loadTrustedIdentities(ownIdentity) + } + + @Test + fun `trusted identities are requested with context if context requested`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Context", equalTo("TestContext"))) + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + connector.loadTrustedIdentities(ownIdentity, "TestContext") + } + + @Test + fun `trusted identities are requested with trust values`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("WantTrustValues", equalTo("true"))) + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + val trustedIdentities = connector.loadTrustedIdentities(ownIdentity) + } + + @Test + fun `empty list of trusted identities is returned correctly`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore") + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + val trustedIdentities = connector.loadTrustedIdentities(ownIdentity) + assertThat(trustedIdentities, empty()) + } + + @Test + fun `trusted identities without context, properties, or trust value are returned correctly`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore") { + put("Identity0", "id0") + put("Nickname0", "nickname0") + put("RequestURI0", "request-uri0") + put("Identity1", "id1") + put("Nickname1", "nickname1") + put("RequestURI1", "request-uri1") + } + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + val trustedIdentities = connector.loadTrustedIdentities(ownIdentity) + assertThat(trustedIdentities, contains( + allOf( + isIdentity("id0", "nickname0", "request-uri0", empty(), isEmptyMap()), + isTrusted(ownIdentity, isTrust(null, 0, 0)) + ), + allOf( + isIdentity("id1", "nickname1", "request-uri1", empty(), isEmptyMap()), + isTrusted(ownIdentity, isTrust(null, 0, 0)) + ) + )) + } + + @Test + fun `trusted identity with contexts is returned correctly`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore") { + put("Identity0", "id0") + put("Nickname0", "nickname0") + put("RequestURI0", "request-uri0") + put("Contexts0.Context0", "Context0") + put("Contexts0.Context1", "Context1") + } + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + val trustedIdentities = connector.loadTrustedIdentities(ownIdentity) + assertThat(trustedIdentities, contains( + isIdentity("id0", "nickname0", "request-uri0", containsInAnyOrder("Context0", "Context1"), isEmptyMap()) + )) + } + + @Test + fun `trusted identity with properties is returned correctly`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore") { + put("Identity0", "id0") + put("Nickname0", "nickname0") + put("RequestURI0", "request-uri0") + put("Properties0.Property0.Name", "foo") + put("Properties0.Property0.Value", "bar") + put("Properties0.Property1.Name", "baz") + put("Properties0.Property1.Value", "quo") + } + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + val trustedIdentities = connector.loadTrustedIdentities(ownIdentity) + assertThat(trustedIdentities, contains( + isIdentity("id0", "nickname0", "request-uri0", empty(), allOf(hasEntry("foo", "bar"), hasEntry("baz", "quo"))) + )) + } + + @Test + fun `trusted identity with trust value is returned correctly`() { + val pluginConnector = createPluginConnector("GetIdentitiesByScore") { + put("Identity0", "id0") + put("Nickname0", "nickname0") + put("RequestURI0", "request-uri0") + put("Trust0", "12") + put("Score0", "34") + put("Rank0", "56") + } + val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri") + val connector = WebOfTrustConnector(pluginConnector) + val trustedIdentities = connector.loadTrustedIdentities(ownIdentity) + assertThat(trustedIdentities, contains( + allOf( + isIdentity("id0", "nickname0", "request-uri0", empty(), isEmptyMap()), + isTrusted(ownIdentity, isTrust(12, 34, 56)) + ) + )) + } + +} + +fun createPluginConnector(message: String, fieldsMatcher: Matcher = IsAnything(), build: SimpleFieldSetBuilder.() -> Unit = {}) = + object : PluginConnector { + override fun sendRequest(pluginName: String, identifier: String, fields: SimpleFieldSet, data: Bucket?) = + if ((pluginName != wotPluginName) || (fields.get("Message") != message)) { + throw PluginException() + } else { + assertThat(fields, fieldsMatcher) + PluginReply(SimpleFieldSetBuilder().apply(build).get(), null) + } + } + +private const val wotPluginName = "plugins.WebOfTrust.WebOfTrust" -- 2.7.4