package net.pterodactylus.sone.core;
import static com.google.common.base.Optional.of;
+import static java.lang.System.currentTimeMillis;
import static java.util.UUID.randomUUID;
+import static java.util.concurrent.TimeUnit.DAYS;
import static net.pterodactylus.sone.data.Sone.SoneStatus.downloading;
import static net.pterodactylus.sone.data.Sone.SoneStatus.idle;
import static net.pterodactylus.sone.data.Sone.SoneStatus.unknown;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
import net.pterodactylus.sone.core.FreenetInterface.Fetched;
import net.pterodactylus.sone.data.Album;
import freenet.client.ClientMetadata;
import freenet.client.FetchResult;
+import freenet.client.async.ClientContext;
+import freenet.client.async.USKCallback;
import freenet.keys.FreenetURI;
+import freenet.keys.USK;
+import freenet.node.RequestStarter;
import freenet.support.api.Bucket;
+import com.db4o.ObjectContainer;
+
import com.google.common.base.Optional;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableSet;
private final Core core = mock(Core.class);
private final FreenetInterface freenetInterface = mock(FreenetInterface.class);
private final SoneDownloaderImpl soneDownloader = new SoneDownloaderImpl(core, freenetInterface);
- private final SoneUpdater soneUpdater = mock(SoneUpdater.class);
private final FreenetURI requestUri = mock(FreenetURI.class);
private final Sone sone = mock(Sone.class);
private final PostBuilder postBuilder = mock(PostBuilder.class);
when(sone.getId()).thenReturn("identity");
when(sone.getIdentity()).thenReturn(identity);
when(sone.getRequestUri()).thenReturn(requestUri);
+ when(sone.getTime()).thenReturn(currentTimeMillis() - DAYS.toMillis(1));
+ }
+
+ private void setupSoneAsUnknown() {
+ when(sone.getTime()).thenReturn(0L);
}
@Before
@Test
public void addingASoneWillRegisterItsKey() {
soneDownloader.addSone(sone);
- verify(freenetInterface).registerUsk(eq(sone), any(SoneUpdater.class));
+ verify(freenetInterface).registerActiveUsk(eq(sone.getRequestUri()), any(
+ USKCallback.class));
verify(freenetInterface, never()).unregisterUsk(sone);
}
public void addingASoneTwiceWillAlsoDeregisterItsKey() {
soneDownloader.addSone(sone);
soneDownloader.addSone(sone);
- verify(freenetInterface, times(2)).registerUsk(eq(sone), any(SoneUpdater.class));
+ verify(freenetInterface, times(2)).registerActiveUsk(eq(
+ sone.getRequestUri()), any(USKCallback.class));
verify(freenetInterface).unregisterUsk(sone);
}
@Test
public void notBeingAbleToFetchAnUnknownSoneDoesNotUpdateCore() {
+ setupSoneAsUnknown();
soneDownloader.fetchSoneAction(sone).run();
verify(freenetInterface).fetchUri(requestUri);
verifyThatSoneStatusWasChangedToDownloadingAndBackTo(unknown);
@Test
public void notBeingAbleToFetchAKnownSoneDoesNotUpdateCore() {
- when(sone.getTime()).thenReturn(1000L);
soneDownloader.fetchSoneAction(sone).run();
verify(freenetInterface).fetchUri(requestUri);
verifyThatSoneStatusWasChangedToDownloadingAndBackTo(idle);
@Test(expected = NullPointerException.class)
public void exceptionWhileFetchingAnUnknownSoneDoesNotUpdateCore() {
+ setupSoneAsUnknown();
when(freenetInterface.fetchUri(requestUri)).thenThrow(NullPointerException.class);
try {
soneDownloader.fetchSoneAction(sone).run();
@Test(expected = NullPointerException.class)
public void exceptionWhileFetchingAKnownSoneDoesNotUpdateCore() {
- when(sone.getTime()).thenReturn(1000L);
when(freenetInterface.fetchUri(requestUri)).thenThrow(NullPointerException.class);
try {
soneDownloader.fetchSoneAction(sone).run();
when(freenetInterface.fetchUri(requestUri)).thenReturn(fetchResult);
soneDownloader.fetchSone(sone, sone.getRequestUri(), true);
verify(core, never()).updateSone(any(Sone.class));
- verifyThatSoneStatusWasChangedToDownloadingAndBackTo(unknown);
+ verifyThatSoneStatusWasChangedToDownloadingAndBackTo(idle);
}
private Fetched createFetchResult(FreenetURI uri, InputStream inputStream) throws IOException {