101 lines
3.4 KiB
Java
101 lines
3.4 KiB
Java
package com.frostwire.jlibtorrent;
|
|
|
|
import com.frostwire.jlibtorrent.alerts.AddTorrentAlert;
|
|
import com.frostwire.jlibtorrent.alerts.Alert;
|
|
import com.frostwire.jlibtorrent.alerts.AlertType;
|
|
import com.frostwire.jlibtorrent.alerts.PieceFinishedAlert;
|
|
import com.frostwire.jlibtorrent.alerts.TorrentCheckedAlert;
|
|
|
|
import org.junit.Rule;
|
|
import org.junit.rules.TemporaryFolder;
|
|
|
|
import java.io.File;
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
|
import static org.junit.Assert.assertNotEquals;
|
|
import static org.junit.Assert.assertNull;
|
|
|
|
/**
|
|
* @author gubatron
|
|
* @author aldenml
|
|
*/
|
|
public final class FileProgressTest {
|
|
|
|
@Rule
|
|
public TemporaryFolder folder = new TemporaryFolder();
|
|
|
|
private static void log(String msg) {
|
|
// comment/uncomment for hand debugging
|
|
//System.out.println(msg);
|
|
}
|
|
|
|
//@Test
|
|
public void testForceRecheck() throws Throwable {
|
|
|
|
String torrentFilename = "AJC_and_The_Envelope_Pushers_Fallen_Star_FrostClick_FrostWire_MP3_January_16_2017.torrent";
|
|
File torrentFile = folder.newFile(torrentFilename);
|
|
byte[] data = Utils.resourceBytes(torrentFilename);
|
|
Utils.writeByteArrayToFile(torrentFile, data, false);
|
|
|
|
final SessionManager s = new SessionManager();
|
|
|
|
final CountDownLatch signalFinished = new CountDownLatch(1);
|
|
|
|
s.addListener(new AlertListener() {
|
|
|
|
private boolean forceChecked = false;
|
|
|
|
@Override
|
|
public int[] types() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void alert(Alert<?> alert) {
|
|
AlertType type = alert.type();
|
|
|
|
switch (type) {
|
|
case ADD_TORRENT:
|
|
((AddTorrentAlert) alert).handle().resume();
|
|
break;
|
|
case PIECE_FINISHED:
|
|
int progress = (int) (((PieceFinishedAlert) alert).handle().status().progress() * 100);
|
|
// this number represents the current progress of
|
|
// the current status (downloading or checking)
|
|
log("progress: " + progress);
|
|
if (progress > 2 && !forceChecked) {
|
|
forceChecked = true;
|
|
((PieceFinishedAlert) alert).handle().forceRecheck();
|
|
}
|
|
break;
|
|
case TORRENT_CHECKED:
|
|
log("Torrent checked, (forced: " + forceChecked + ")");
|
|
if (forceChecked) {
|
|
TorrentHandle th = ((TorrentCheckedAlert) alert).handle();
|
|
long[] fileProgress = th.fileProgress();
|
|
long total = 0;
|
|
for (long p : fileProgress) {
|
|
total += p;
|
|
}
|
|
assertNotEquals("At least one file should have some progress", 0, total);
|
|
}
|
|
break;
|
|
case TORRENT_FINISHED:
|
|
signalFinished.countDown();
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
|
|
s.start();
|
|
|
|
TorrentInfo ti = new TorrentInfo(torrentFile);
|
|
s.download(ti, torrentFile.getParentFile());
|
|
|
|
Utils.awaitMinutes(signalFinished, "too much time downloading the torrent", 5);
|
|
assertNull(s.lastAlertError());
|
|
|
|
s.stop();
|
|
}
|
|
}
|