X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FUpdateCheckerTest.java;h=44f863b9f389452490dbba6c9c6b1de5955a36dd;hp=fb2b9f23bf8c13a521619d898796b319e18b7f9f;hb=35deb522de06ba7d97160445683375cf87529e8d;hpb=3315406de10fcb2dd3a88cb4d664a9af814421f9 diff --git a/src/test/java/net/pterodactylus/sone/core/UpdateCheckerTest.java b/src/test/java/net/pterodactylus/sone/core/UpdateCheckerTest.java index fb2b9f2..44f863b 100644 --- a/src/test/java/net/pterodactylus/sone/core/UpdateCheckerTest.java +++ b/src/test/java/net/pterodactylus/sone/core/UpdateCheckerTest.java @@ -1,32 +1,30 @@ package net.pterodactylus.sone.core; import static java.lang.Long.MAX_VALUE; -import static net.pterodactylus.sone.main.SonePlugin.VERSION; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.mockito.ArgumentCaptor.forClass; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.argThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.hamcrest.MockitoHamcrest.argThat; import java.io.IOException; import java.io.InputStream; import net.pterodactylus.sone.core.FreenetInterface.Callback; -import net.pterodactylus.sone.core.FreenetInterface.Fetched; import net.pterodactylus.sone.core.event.UpdateFoundEvent; -import net.pterodactylus.sone.freenet.StringBucket; import net.pterodactylus.util.version.Version; import freenet.client.ClientMetadata; import freenet.client.FetchResult; import freenet.keys.FreenetURI; import freenet.support.api.Bucket; +import freenet.support.io.ArrayBucket; import com.google.common.eventbus.EventBus; import org.junit.Before; @@ -44,7 +42,8 @@ public class UpdateCheckerTest { private final EventBus eventBus = mock(EventBus.class); private final FreenetInterface freenetInterface = mock(FreenetInterface.class); - private final UpdateChecker updateChecker = new UpdateChecker(eventBus, freenetInterface); + private final Version currentVersion = new Version(1, 0, 0); + private final UpdateChecker updateChecker = new UpdateChecker(eventBus, freenetInterface, currentVersion); @Before public void startUpdateChecker() { @@ -54,7 +53,7 @@ public class UpdateCheckerTest { @Test public void newUpdateCheckerDoesNotHaveALatestVersion() { assertThat(updateChecker.hasLatestVersion(), is(false)); - assertThat(updateChecker.getLatestVersion(), is(VERSION)); + assertThat(updateChecker.getLatestVersion(), is(currentVersion)); } @Test @@ -87,22 +86,33 @@ public class UpdateCheckerTest { setupFetchResult(createFutureFetchResult()); setupCallbackWithEdition(MAX_VALUE, true, false); verifyAFreenetUriIsFetched(); - ArgumentCaptor updateFoundEvent = forClass(UpdateFoundEvent.class); - verify(eventBus, times(1)).post(updateFoundEvent.capture()); - assertThat(updateFoundEvent.getValue().version(), is(new Version(99, 0, 0))); - assertThat(updateFoundEvent.getValue().releaseTime(), is(11865368297000L)); - assertThat(updateChecker.getLatestVersion(), is(new Version(99, 0, 0))); - assertThat(updateChecker.getLatestVersionDate(), is(11865368297000L)); + verifyEventIsFired(new Version(99, 0, 0), 11865368297000L, false); + verifyThatUpdateCheckerKnowsLatestVersion(new Version(99, 0, 0), 11865368297000L); } private FetchResult createFutureFetchResult() { ClientMetadata clientMetadata = new ClientMetadata("application/xml"); - Bucket fetched = new StringBucket("# MapConfigurationBackendVersion=1\n" + + Bucket fetched = new ArrayBucket(("# MapConfigurationBackendVersion=1\n" + "CurrentVersion/Version: 99.0.0\n" + - "CurrentVersion/ReleaseTime: 11865368297000"); + "CurrentVersion/ReleaseTime: 11865368297000\n" + + "DisruptiveVersion/0.1.2: true").getBytes()); return new FetchResult(clientMetadata, fetched); } + private void verifyEventIsFired(Version version, long releaseTime, boolean disruptive) { + ArgumentCaptor updateFoundEvent = forClass(UpdateFoundEvent.class); + verify(eventBus, times(1)).post(updateFoundEvent.capture()); + assertThat(updateFoundEvent.getValue().version(), is(version)); + assertThat(updateFoundEvent.getValue().releaseTime(), is(releaseTime)); + assertThat(updateFoundEvent.getValue().disruptive(), is(disruptive)); + } + + private void verifyThatUpdateCheckerKnowsLatestVersion(Version version, long releaseTime) { + assertThat(updateChecker.getLatestVersion(), is(version)); + assertThat(updateChecker.getLatestVersionDate(), is(releaseTime)); + assertThat(updateChecker.hasLatestVersion(), is(true)); + } + @Test public void callbackDoesNotStartIfNoNewEditionIsFound() { setupFetchResult(createPastFetchResult()); @@ -123,9 +133,9 @@ public class UpdateCheckerTest { private FetchResult createPastFetchResult() { ClientMetadata clientMetadata = new ClientMetadata("application/xml"); - Bucket fetched = new StringBucket("# MapConfigurationBackendVersion=1\n" + + Bucket fetched = new ArrayBucket(("# MapConfigurationBackendVersion=1\n" + "CurrentVersion/Version: 0.2\n" + - "CurrentVersion/ReleaseTime: 1289417883000"); + "CurrentVersion/ReleaseTime: 1289417883000").getBytes()); return new FetchResult(clientMetadata, fetched); } @@ -139,7 +149,7 @@ public class UpdateCheckerTest { private FetchResult createInvalidFetchResult() { ClientMetadata clientMetadata = new ClientMetadata("text/plain"); - Bucket fetched = new StringBucket("Some other data."); + Bucket fetched = new ArrayBucket("Some other data.".getBytes()); return new FetchResult(clientMetadata, fetched); } @@ -168,7 +178,7 @@ public class UpdateCheckerTest { private FetchResult createBrokenBucketFetchResult() { ClientMetadata clientMetadata = new ClientMetadata("text/plain"); - Bucket fetched = new StringBucket("Some other data.") { + Bucket fetched = new ArrayBucket("Some other data.".getBytes()) { @Override public InputStream getInputStream() { try { @@ -192,9 +202,58 @@ public class UpdateCheckerTest { private FetchResult createInvalidTimeFetchResult() { ClientMetadata clientMetadata = new ClientMetadata("application/xml"); - Bucket fetched = new StringBucket("# MapConfigurationBackendVersion=1\n" + + Bucket fetched = new ArrayBucket(("# MapConfigurationBackendVersion=1\n" + "CurrentVersion/Version: 0.2\n" + - "CurrentVersion/ReleaseTime: invalid"); + "CurrentVersion/ReleaseTime: invalid").getBytes()); + return new FetchResult(clientMetadata, fetched); + } + + @Test + public void invalidPropertiesDoesNotCauseAnUpdateToBeFound() { + setupFetchResult(createMissingTimeFetchResult()); + setupCallbackWithEdition(MAX_VALUE, true, false); + verifyAFreenetUriIsFetched(); + verifyNoUpdateFoundEventIsFired(); + } + + private FetchResult createMissingTimeFetchResult() { + ClientMetadata clientMetadata = new ClientMetadata("application/xml"); + Bucket fetched = new ArrayBucket(("# MapConfigurationBackendVersion=1\n" + + "CurrentVersion/Version: 0.2\n").getBytes()); + return new FetchResult(clientMetadata, fetched); + } + + @Test + public void invalidVersionDoesNotCauseAnUpdateToBeFound() { + setupFetchResult(createInvalidVersionFetchResult()); + setupCallbackWithEdition(MAX_VALUE, true, false); + verifyAFreenetUriIsFetched(); + verifyNoUpdateFoundEventIsFired(); + } + + private FetchResult createInvalidVersionFetchResult() { + ClientMetadata clientMetadata = new ClientMetadata("application/xml"); + Bucket fetched = new ArrayBucket(("# MapConfigurationBackendVersion=1\n" + + "CurrentVersion/Version: foo\n" + + "CurrentVersion/ReleaseTime: 1289417883000").getBytes()); + return new FetchResult(clientMetadata, fetched); + } + + @Test + public void disruptiveVersionGetsNotification() { + setupFetchResult(createDisruptiveVersionFetchResult()); + setupCallbackWithEdition(MAX_VALUE, true, false); + verifyAFreenetUriIsFetched(); + verifyEventIsFired(new Version(1, 2, 3), 1289417883000L, true); + verifyThatUpdateCheckerKnowsLatestVersion(new Version(1, 2, 3), 1289417883000L); + } + + private FetchResult createDisruptiveVersionFetchResult() { + ClientMetadata clientMetadata = new ClientMetadata("application/xml"); + Bucket fetched = new ArrayBucket(("# MapConfigurationBackendVersion=1\n" + + "CurrentVersion/Version: 1.2.3\n" + + "CurrentVersion/ReleaseTime: 1289417883000\n" + + "DisruptiveVersion/1.2.3: true").getBytes()); return new FetchResult(clientMetadata, fetched); }