|
|
|
package net.yacy.peers;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.LinkedHashSet;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
import java.util.concurrent.ConcurrentMap;
|
|
|
|
import net.yacy.cora.document.encoding.ASCII;
|
|
|
|
import net.yacy.kelondro.data.word.Word;
|
|
|
|
import org.junit.AfterClass;
|
|
|
|
import org.junit.BeforeClass;
|
|
|
|
import org.junit.Test;
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
|
|
|
|
public class NewsPoolTest {
|
|
|
|
|
|
|
|
static NewsPool newsPool;
|
|
|
|
|
|
|
|
public NewsPoolTest() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@BeforeClass
|
|
|
|
public static void setUpClass() {
|
|
|
|
String networkpath = "test/DATA/INDEX/webportal/NETWORK";
|
|
|
|
newsPool = new NewsPool(new File(networkpath), false, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
@AfterClass
|
|
|
|
public static void tearDownClass() {
|
|
|
|
newsPool.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test of myPublication method, of class NewsPool.
|
|
|
|
*/
|
|
|
|
@Test
|
|
|
|
public void testMyPublication() throws Exception {
|
|
|
|
|
|
|
|
// create a test seed as sender
|
|
|
|
ConcurrentMap<String, String> dna = new ConcurrentHashMap<String, String>();
|
|
|
|
byte[] hash = Word.word2hash("myseed"); // just generate any hash for testing
|
|
|
|
Seed myseed = new Seed(ASCII.String(hash), dna);
|
|
|
|
|
|
|
|
// generate 3 test messages and simulate publish (put in outgoing queuq
|
|
|
|
Map<String, String> msgattr = new HashMap<>();
|
|
|
|
for (int i = 1; i <= 3; i++) {
|
|
|
|
msgattr.put("text", "message " + Integer.toString(i));
|
|
|
|
msgattr.put("#", Integer.toString(i)); // use id modificator attribute (to generate unique id for same creation second, used in id)
|
|
|
|
newsPool.publishMyNews(myseed, "TestCat", msgattr); // add msg to outgoing queue
|
|
|
|
}
|
|
|
|
|
|
|
|
// test the distribution process
|
|
|
|
Set<String> resultmemory = new LinkedHashSet<>();
|
|
|
|
NewsDB.Record rec = newsPool.myPublication();
|
|
|
|
int cnt = 3 * 30 + 5; // end condition (3 msg * 30 distribution) for loop (+5 > as expected count)
|
|
|
|
while (rec != null && cnt > 0) {
|
|
|
|
// System.out.println(rec.toString());
|
|
|
|
assertTrue(rec.distributed() > 0);
|
|
|
|
resultmemory.add(rec.id());
|
|
|
|
|
|
|
|
cnt--;
|
|
|
|
rec = newsPool.myPublication();
|
|
|
|
}
|
|
|
|
assertTrue(cnt == 5); // test total counter
|
|
|
|
|
|
|
|
// test news record in published queue
|
|
|
|
cnt = 1;
|
|
|
|
for (String msgid : resultmemory) {
|
|
|
|
NewsDB.Record msg = newsPool.getByID(NewsPool.PUBLISHED_DB, msgid);
|
|
|
|
System.out.println(cnt + ". news published: \"" + msg.attribute("text", "***missing***") + "\" distributed=" + msg.distributed());
|
|
|
|
assertEquals("default distributin count", 30, msg.distributed()); // test expected distribution count
|
|
|
|
cnt++;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|