GOSSIP-25 Create reaper process to expire per-node data
This commit is contained in:
55
src/test/java/org/apache/gossip/manager/DataReaperTest.java
Normal file
55
src/test/java/org/apache/gossip/manager/DataReaperTest.java
Normal file
@ -0,0 +1,55 @@
|
||||
package org.apache.gossip.manager;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.gossip.GossipSettings;
|
||||
import org.apache.gossip.manager.random.RandomGossipManager;
|
||||
import org.apache.gossip.model.GossipDataMessage;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import io.teknek.tunit.TUnit;
|
||||
|
||||
public class DataReaperTest {
|
||||
|
||||
@Test
|
||||
public void testReaperOneShot() {
|
||||
String myId = "4";
|
||||
String key = "key";
|
||||
String value = "a";
|
||||
GossipSettings settings = new GossipSettings();
|
||||
GossipManager gm = RandomGossipManager.newBuilder().cluster("abc").settings(settings)
|
||||
.withId(myId).uri(URI.create("udp://localhost:5000")).build();
|
||||
gm.gossipPerNodeData(perNodeDatum(key, value));
|
||||
Assert.assertEquals(value, gm.findGossipData(myId, key).getPayload());
|
||||
gm.getDataReaper().runOnce();
|
||||
TUnit.assertThat(() -> gm.findGossipData(myId, key)).equals(null);
|
||||
}
|
||||
|
||||
private GossipDataMessage perNodeDatum(String key, String value) {
|
||||
GossipDataMessage m = new GossipDataMessage();
|
||||
m.setExpireAt(System.currentTimeMillis() + 5L);
|
||||
m.setKey(key);
|
||||
m.setPayload(value);
|
||||
m.setTimestamp(System.currentTimeMillis());
|
||||
return m;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHigherTimestampWins() {
|
||||
String myId = "4";
|
||||
String key = "key";
|
||||
String value = "a";
|
||||
GossipSettings settings = new GossipSettings();
|
||||
GossipManager gm = RandomGossipManager.newBuilder().cluster("abc").settings(settings)
|
||||
.withId(myId).uri(URI.create("udp://localhost:5000")).build();
|
||||
GossipDataMessage before = perNodeDatum(key, value);
|
||||
GossipDataMessage after = perNodeDatum(key, "b");
|
||||
after.setTimestamp(after.getTimestamp() - 1);
|
||||
gm.gossipPerNodeData(before);
|
||||
Assert.assertEquals(value, gm.findGossipData(myId, key).getPayload());
|
||||
gm.gossipPerNodeData(after);
|
||||
Assert.assertEquals(value, gm.findGossipData(myId, key).getPayload());
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user