TubeLab-App-Android/frostwire-jlibtorrent/src/test/java/com/frostwire/jlibtorrent/CreateTorrentTest.java

214 lines
7.4 KiB
Java

package com.frostwire.jlibtorrent;
import com.frostwire.jlibtorrent.swig.add_files_listener;
import com.frostwire.jlibtorrent.swig.byte_vector;
import com.frostwire.jlibtorrent.swig.create_flags_t;
import com.frostwire.jlibtorrent.swig.create_torrent;
import com.frostwire.jlibtorrent.swig.entry;
import com.frostwire.jlibtorrent.swig.error_code;
import com.frostwire.jlibtorrent.swig.file_storage;
import com.frostwire.jlibtorrent.swig.set_piece_hashes_listener;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import static com.frostwire.jlibtorrent.swig.libtorrent.add_files_ex;
import static com.frostwire.jlibtorrent.swig.libtorrent.set_piece_hashes_ex;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @author gubatron
* @author aldenml
*/
public class CreateTorrentTest {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void testFromFile() throws IOException {
final File f = folder.newFile("test.txt");
Utils.writeByteArrayToFile(f, new byte[]{0}, false);
file_storage fs = new file_storage();
add_files_listener l1 = new add_files_listener() {
@Override
public boolean pred(String p) {
assertEquals(f.getAbsolutePath(), p);
return true;
}
};
add_files_ex(fs, f.getAbsolutePath(), l1, new create_flags_t());
create_torrent ct = new create_torrent(fs);
set_piece_hashes_listener l2 = new set_piece_hashes_listener() {
@Override
public void progress(int i) {
assertTrue(i >= 0);
}
};
error_code ec = new error_code();
set_piece_hashes_ex(ct, f.getParent(), l2, ec);
assertEquals(ec.value(), 0);
entry e = ct.generate();
byte_vector buffer = e.bencode();
TorrentInfo ti = TorrentInfo.bdecode(Vectors.byte_vector2bytes(buffer));
assertEquals(1, ti.numFiles());
}
@Test
public void testFromDir() throws IOException {
File dir = folder.newFolder();
File f1 = new File(dir, "test.txt");
Utils.writeByteArrayToFile(f1, new byte[]{0}, false);
File f2 = new File(dir, "test1.txt");
Utils.writeByteArrayToFile(f2, new byte[]{0}, false);
file_storage fs = new file_storage();
add_files_listener l1 = new add_files_listener() {
@Override
public boolean pred(String p) {
return true;
}
};
add_files_ex(fs, dir.getAbsolutePath(), l1, new create_flags_t());
create_torrent ct = new create_torrent(fs);
set_piece_hashes_listener l2 = new set_piece_hashes_listener() {
@Override
public void progress(int i) {
assertTrue(i >= 0);
}
};
error_code ec = new error_code();
set_piece_hashes_ex(ct, dir.getParent(), l2, ec);
assertEquals(ec.value(), 0);
entry e = ct.generate();
byte_vector buffer = e.bencode();
TorrentInfo ti = TorrentInfo.bdecode(Vectors.byte_vector2bytes(buffer));
assertEquals(2, ti.numFiles());
}
@Test
public void testUsingBuilder() throws IOException {
File dir = folder.newFolder();
File f1 = new File(dir, "test.txt");
Utils.writeByteArrayToFile(f1, new byte[]{0}, false);
File f2 = new File(dir, "test1.txt");
Utils.writeByteArrayToFile(f2, new byte[]{0}, false);
TorrentBuilder b = new TorrentBuilder();
TorrentBuilder.Result r = b.path(dir)
.comment("comment")
.creator("creator")
.addUrlSeed("http://urlseed/")
.addHttpSeed("http://httpseed/")
.addNode(new Pair<>("1.1.1.1", 1))
.addTracker("udp://tracker/")
.setPrivate(true)
.addSimilarTorrent(Sha1Hash.min())
.addCollection("collection")
.generate();
TorrentInfo ti = TorrentInfo.bdecode(r.entry().bencode());
assertEquals("comment", ti.comment());
assertEquals("creator", ti.creator());
ArrayList<WebSeedEntry> seeds = ti.webSeeds();
for (WebSeedEntry e : seeds) {
if (e.type() == WebSeedEntry.Type.URL_SEED) {
assertEquals("http://urlseed/", e.url());
}
if (e.type() == WebSeedEntry.Type.HTTP_SEED) {
assertEquals("http://httpseed/", e.url());
}
}
assertEquals("1.1.1.1", ti.nodes().get(0).first);
assertEquals("udp://tracker/", ti.trackers().get(0).url());
assertEquals(true, ti.isPrivate());
assertTrue(ti.similarTorrents().get(0).isAllZeros());
assertEquals("collection", ti.collections().get(0));
assertEquals(2, ti.numFiles());
}
@Test
public void testBuilderListener() throws IOException {
File dir = folder.newFolder();
File f1 = new File(dir, "test.txt");
Utils.writeByteArrayToFile(f1, new byte[]{0, 0}, false);
File f2 = new File(dir, "test1.txt");
Utils.writeByteArrayToFile(f2, new byte[]{0, 0}, false);
final AtomicBoolean b1 = new AtomicBoolean();
final AtomicBoolean b2 = new AtomicBoolean();
TorrentBuilder b = new TorrentBuilder();
TorrentBuilder.Result r = b.path(dir)
.listener(new TorrentBuilder.Listener() {
@Override
public boolean accept(String filename) {
b1.set(true);
return true;
}
@Override
public void progress(int piece, int total) {
b2.set(true);
}
})
.generate();
TorrentInfo ti = TorrentInfo.bdecode(r.entry().bencode());
assertEquals(2, ti.numFiles());
assertTrue(b1.get());
assertTrue(b2.get());
}
/*
@Test
public void testBuilderMerkle() throws IOException {
File dir = folder.newFolder();
File f1 = new File(dir, "test.txt");
Utils.writeByteArrayToFile(f1, new byte[]{0, 0, 0}, false);
File f2 = new File(dir, "test1.txt");
Utils.writeByteArrayToFile(f2, new byte[]{0, 0, 0}, false);
TorrentBuilder b = new TorrentBuilder();
TorrentBuilder.Result r = b.path(dir)
.flags(b.flags() | TorrentBuilder.Flags.MERKLE.swig())
.generate();
TorrentInfo ti = TorrentInfo.bdecode(r.entry().bencode());
assertEquals(2, ti.numFiles());
ArrayList<Sha1Hash> tree = r.merkleTree();
assertTrue(tree.size() >= 0);
ti.merkleTree(tree);
assertEquals(tree.get(0), ti.merkleTree().get(0));
}*/
/*
@Test
public void testMerkleFlag() throws IOException {
TorrentBuilder b = new TorrentBuilder();
assertFalse(b.merkle());
b.merkle(false);
assertFalse(b.merkle());
b.merkle(true);
assertTrue(b.merkle());
b.merkle(true);
assertTrue(b.merkle());
b.merkle(false);
assertFalse(b.merkle());
b.merkle(false);
assertFalse(b.merkle());
}*/
}