m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMartin <marcin.j.chrzanowski@gmail.com>2020-01-06 13:30:37 +0100
committerGitHub <noreply@github.com>2020-01-06 13:30:37 +0100
commitedd8c9d09b89a68a0d654dd6b08dc23a22d50293 (patch)
tree0ac7614ab80ca530f726bb83fa33fea76c9b5ab4 /src/test
parent69480d460a698a78b90d8d111f5fb4d761ffda81 (diff)
parent8a44299b0072a8bedd1c0d74f92d258379c8447a (diff)
Merge pull request #85 from m-chrzan/staleness
Staleness
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/AgentIntegrationTest.java5
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java3
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/StanikTest.java103
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java2
4 files changed, 78 insertions, 35 deletions
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/AgentIntegrationTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/AgentIntegrationTest.java
index 28b47a9..f69ed8f 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/AgentIntegrationTest.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/AgentIntegrationTest.java
@@ -47,7 +47,7 @@ public class AgentIntegrationTest {
public static void bindApi() throws Exception {
registryProcess = Runtime.getRuntime().exec("./scripts/registry");
Thread.sleep(10000);
- agentProcess = Runtime.getRuntime().exec("./gradlew runAgent -Dhostname=localhost");
+ agentProcess = Runtime.getRuntime().exec("./gradlew runAgent -Dhostname=localhost -DfreshnessPeriod=10000000");
Thread.sleep(10000);
registry = LocateRegistry.getRegistry("localhost");
@@ -95,7 +95,8 @@ public class AgentIntegrationTest {
assertEquals(new ValueInt(2l), attributes.get("level"));
assertEquals(new ValueString("whatever01"), attributes.get("name"));
assertEquals(new ValueString("/pjwstk/whatever01"), attributes.get("owner"));
- assertEquals(new ValueTime("2012/11/09 21:12:00.000"), attributes.get("timestamp"));
+ long timestamp = ((ValueTime) attributes.get("timestamp")).getValue();
+ assertTrue(timestamp <= System.currentTimeMillis());
assertEquals(new ValueInt(1l), attributes.get("cardinality"));
assertEquals(new ValueTime("2012/10/18 07:03:00.000"), attributes.get("creation"));
assertEquals(new ValueDouble(0.1), attributes.get("cpu_usage"));
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java
index 0a7a8df..002c43c 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java
@@ -63,7 +63,8 @@ public class ApiImplementationTests {
assertEquals(new ValueInt(2l), attributes.get("level"));
assertEquals(new ValueString("whatever01"), attributes.get("name"));
assertEquals(new ValueString("/pjwstk/whatever01"), attributes.get("owner"));
- assertEquals(new ValueTime("2012/11/09 21:12:00.000"), attributes.get("timestamp"));
+ long timestamp = ((ValueTime) attributes.get("timestamp")).getValue();
+ assertTrue(timestamp <= System.currentTimeMillis());
assertEquals(new ValueInt(1l), attributes.get("cardinality"));
assertEquals(new ValueTime("2012/10/18 07:03:00.000"), attributes.get("creation"));
assertEquals(new ValueDouble(0.1), attributes.get("cpu_usage"));
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/StanikTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/StanikTest.java
index 2e1ccea..f3ea0b0 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/StanikTest.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/StanikTest.java
@@ -16,12 +16,15 @@ import pl.edu.mimuw.cloudatlas.agent.messages.UpdateQueriesMessage;
import pl.edu.mimuw.cloudatlas.agent.MockExecutor;
import pl.edu.mimuw.cloudatlas.model.Attribute;
import pl.edu.mimuw.cloudatlas.model.AttributesMap;
+import pl.edu.mimuw.cloudatlas.model.PathName;
import pl.edu.mimuw.cloudatlas.model.TestUtil;
import pl.edu.mimuw.cloudatlas.model.Value;
+import pl.edu.mimuw.cloudatlas.model.ValueDuration;
import pl.edu.mimuw.cloudatlas.model.ValueInt;
import pl.edu.mimuw.cloudatlas.model.ValueQuery;
import pl.edu.mimuw.cloudatlas.model.ValueString;
import pl.edu.mimuw.cloudatlas.model.ValueTime;
+import pl.edu.mimuw.cloudatlas.model.ValueUtils;
import pl.edu.mimuw.cloudatlas.model.ZMI;
import org.junit.Before;
@@ -31,11 +34,14 @@ import static org.junit.Assert.*;
public class StanikTest {
private Stanik stanik;
private MockExecutor executor;
+ private ValueTime testTime;
+ private static final long freshnessPeriod = 1000;
@Before
public void setupLocals() {
- stanik = new Stanik();
+ stanik = new Stanik(freshnessPeriod);
executor = new MockExecutor(stanik);
+ testTime = ValueUtils.currentTime();
}
@Test
@@ -78,14 +84,14 @@ public class StanikTest {
AttributesMap attributes = new AttributesMap();
attributes.add("foo", new ValueInt(1337l));
attributes.add("bar", new ValueString("baz"));
- attributes.add("timestamp", new ValueTime("2012/12/21 04:20:00.000"));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/", attributes);
stanik.handleTyped(message);
AttributesMap actualAttributes = stanik.getHierarchy().getAttributes();
assertEquals(3, TestUtil.iterableSize(actualAttributes));
assertEquals(new ValueInt(1337l), actualAttributes.get("foo"));
assertEquals(new ValueString("baz"), actualAttributes.get("bar"));
- assertEquals(new ValueTime("2012/12/21 04:20:00.000"), actualAttributes.getOrNull("timestamp"));
+ assertEquals(testTime, actualAttributes.getOrNull("timestamp"));
}
@Test
@@ -94,7 +100,7 @@ public class StanikTest {
attributes.add("foo", new ValueInt(1337l));
attributes.add("bar", new ValueString("baz"));
attributes.add("name", new ValueString("new"));
- attributes.add("timestamp", new ValueTime("2012/12/21 04:20:00.000"));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
stanik.handleTyped(message);
AttributesMap actualAttributes = stanik.getHierarchy().findDescendant("/new").getAttributes();
@@ -102,7 +108,7 @@ public class StanikTest {
assertEquals(new ValueInt(1337l), actualAttributes.getOrNull("foo"));
assertEquals(new ValueString("baz"), actualAttributes.getOrNull("bar"));
assertEquals(new ValueString("new"), actualAttributes.getOrNull("name"));
- assertEquals(new ValueTime("2012/12/21 04:20:00.000"), actualAttributes.getOrNull("timestamp"));
+ assertEquals(testTime, actualAttributes.getOrNull("timestamp"));
}
@Test
@@ -111,11 +117,12 @@ public class StanikTest {
attributes.add("foo", new ValueInt(1337l));
attributes.add("bar", new ValueString("baz"));
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/", attributes);
- attributes.add("timestamp", new ValueTime("2012/12/21 04:20:00.000"));
+ attributes.add("timestamp", testTime);
stanik.handleTyped(message);
AttributesMap newAttributes = new AttributesMap();
- newAttributes.add("timestamp", new ValueTime("2012/12/21 04:20:42.000"));
+ ValueTime newTime = (ValueTime) testTime.addValue(new ValueDuration(1l));
+ newAttributes.add("timestamp", newTime);
newAttributes.add("foo", new ValueInt(1338l));
UpdateAttributesMessage newMessage = new UpdateAttributesMessage("test_msg2", 0, "/", newAttributes);
stanik.handleTyped(newMessage);
@@ -123,27 +130,64 @@ public class StanikTest {
AttributesMap actualAttributes = stanik.getHierarchy().getAttributes();
assertEquals(2, TestUtil.iterableSize(actualAttributes));
assertEquals(new ValueInt(1338l), actualAttributes.getOrNull("foo"));
- assertEquals(new ValueTime("2012/12/21 04:20:42.000"), actualAttributes.getOrNull("timestamp"));
+ assertEquals(newTime, actualAttributes.getOrNull("timestamp"));
}
@Test
public void dontApplyUpdateWithOlderTimestamp() throws Exception {
AttributesMap attributes = new AttributesMap();
attributes.add("foo", new ValueInt(1337l));
- attributes.add("timestamp", new ValueTime("2012/12/21 04:20:00.000"));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/", attributes);
stanik.handleTyped(message);
AttributesMap oldAttributes = new AttributesMap();
oldAttributes.add("foo", new ValueInt(1336l));
- oldAttributes.add("timestamp", new ValueTime("2012/12/21 04:19:00.000"));
+ ValueTime olderTime = (ValueTime) testTime.subtract(new ValueDuration(1l));
+ oldAttributes.add("timestamp", olderTime);
UpdateAttributesMessage newMessage = new UpdateAttributesMessage("test_msg2", 0, "/", oldAttributes);
stanik.handleTyped(newMessage);
AttributesMap actualAttributes = stanik.getHierarchy().getAttributes();
assertEquals(2, TestUtil.iterableSize(actualAttributes));
assertEquals(new ValueInt(1337l), actualAttributes.getOrNull("foo"));
- assertEquals(new ValueTime("2012/12/21 04:20:00.000"), actualAttributes.getOrNull("timestamp"));
+ assertEquals(testTime, actualAttributes.getOrNull("timestamp"));
+ }
+
+ @Test
+ public void dontApplyWithStaleTimestamp() throws Exception {
+ AttributesMap attributes = new AttributesMap();
+ attributes.add("foo", new ValueInt(1337l));
+ attributes.add("timestamp", (ValueTime) testTime.subtract(new ValueDuration(freshnessPeriod + 100)));
+ attributes.add("name", new ValueString("new"));
+ UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
+ stanik.handleTyped(message);
+
+ assertFalse(stanik.getHierarchy().descendantExists(new PathName("/new")));
+ }
+
+ @Test
+ public void zoneRemovedAfterFreshnessPeriod() throws Exception {
+ AttributesMap attributes = new AttributesMap();
+ attributes.add("foo", new ValueInt(1337l));
+ attributes.add("timestamp", testTime);
+ attributes.add("name", new ValueString("new"));
+ UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
+ stanik.handleTyped(message);
+ Thread.sleep(freshnessPeriod + 100);
+
+ AttributesMap attributes2 = new AttributesMap();
+ attributes2.add("timestamp", ValueUtils.currentTime());
+ UpdateAttributesMessage message2 = new UpdateAttributesMessage("test_msg", 0, "/", attributes2);
+ stanik.handleTyped(message2);
+
+ GetStateMessage getStateMessage = new GetStateMessage("", 0, ModuleType.TEST, 0);
+ stanik.handleTyped(getStateMessage);
+
+ StateMessage newReceivedMessage = (StateMessage) executor.messagesToPass.poll();
+ assertNotNull(newReceivedMessage);
+ assertFalse(newReceivedMessage.getZMI().descendantExists(new PathName("/new")));
+ assertFalse(stanik.getHierarchy().descendantExists(new PathName("/new")));
}
@Test
@@ -207,19 +251,14 @@ public class StanikTest {
attributes.add("foo", new ValueInt(1337l));
attributes.add("bar", new ValueString("baz"));
attributes.add("name", new ValueString("new"));
- attributes.add("timestamp", new ValueTime(42l));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
stanik.handleTyped(message);
- RemoveZMIMessage removeMessage = new RemoveZMIMessage("test_msg2", 0, "/new", new ValueTime(43l));
+ RemoveZMIMessage removeMessage = new RemoveZMIMessage("test_msg2", 0, "/new", (ValueTime) testTime.addValue(new ValueDuration(1l)));
stanik.handleTyped(removeMessage);
- boolean noSuchZone = false;
- try {
- stanik.getHierarchy().findDescendant("/new");
- } catch (ZMI.NoSuchZoneException e) {
- noSuchZone = true;
- }
- assertTrue(noSuchZone);
+
+ assertFalse(stanik.getHierarchy().descendantExists(new PathName("/new")));
}
@Test
@@ -228,11 +267,11 @@ public class StanikTest {
attributes.add("foo", new ValueInt(1337l));
attributes.add("bar", new ValueString("baz"));
attributes.add("name", new ValueString("new"));
- attributes.add("timestamp", new ValueTime(42l));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
stanik.handleTyped(message);
- RemoveZMIMessage removeMessage = new RemoveZMIMessage("test_msg2", 0, "/new", new ValueTime(41l));
+ RemoveZMIMessage removeMessage = new RemoveZMIMessage("test_msg2", 0, "/new", (ValueTime) testTime.subtract(new ValueDuration(1l)));
stanik.handleTyped(removeMessage);
stanik.getHierarchy().findDescendant("/new");
@@ -243,17 +282,17 @@ public class StanikTest {
AttributesMap attributes = new AttributesMap();
attributes.add("foo", new ValueInt(1337l));
attributes.add("name", new ValueString("new"));
- attributes.add("timestamp", new ValueTime(42l));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
stanik.handleTyped(message);
- SetAttributeMessage setMessage = new SetAttributeMessage("test_msg2", 0, "/new", new Attribute("foo"), new ValueInt(43l), new ValueTime(40l));
+ SetAttributeMessage setMessage = new SetAttributeMessage("test_msg2", 0, "/new", new Attribute("foo"), new ValueInt(43l), (ValueTime) testTime.subtract(new ValueDuration(1l)));
stanik.handleTyped(setMessage);
AttributesMap actualAttributes = stanik.getHierarchy().findDescendant("/new").getAttributes();
assertEquals(3, TestUtil.iterableSize(actualAttributes));
assertEquals(new ValueInt(43l), actualAttributes.getOrNull("foo"));
- assertEquals(new ValueTime(42l), actualAttributes.getOrNull("timestamp"));
+ assertEquals(testTime, actualAttributes.getOrNull("timestamp"));
}
@Test
@@ -261,17 +300,18 @@ public class StanikTest {
AttributesMap attributes = new AttributesMap();
attributes.add("foo", new ValueInt(1337l));
attributes.add("name", new ValueString("new"));
- attributes.add("timestamp", new ValueTime(42l));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
stanik.handleTyped(message);
- SetAttributeMessage setMessage = new SetAttributeMessage("test_msg2", 0, "/new", new Attribute("foo"), new ValueInt(43l), new ValueTime(43l));
+ ValueTime newTime = (ValueTime) testTime.addValue(new ValueDuration(1l));
+ SetAttributeMessage setMessage = new SetAttributeMessage("test_msg2", 0, "/new", new Attribute("foo"), new ValueInt(43l), newTime);
stanik.handleTyped(setMessage);
AttributesMap actualAttributes = stanik.getHierarchy().findDescendant("/new").getAttributes();
assertEquals(3, TestUtil.iterableSize(actualAttributes));
assertEquals(new ValueInt(43l), actualAttributes.getOrNull("foo"));
- assertEquals(new ValueTime(43l), actualAttributes.getOrNull("timestamp"));
+ assertEquals(newTime, actualAttributes.getOrNull("timestamp"));
}
@Test
@@ -279,17 +319,18 @@ public class StanikTest {
AttributesMap attributes = new AttributesMap();
attributes.add("foo", new ValueInt(1337l));
attributes.add("name", new ValueString("new"));
- attributes.add("timestamp", new ValueTime(42l));
+ attributes.add("timestamp", testTime);
UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes);
stanik.handleTyped(message);
- SetAttributeMessage setMessage = new SetAttributeMessage("test_msg2", 0, "/new", new Attribute("bar"), new ValueInt(43l), new ValueTime(43l));
+ ValueTime newTime = (ValueTime) testTime.addValue(new ValueDuration(1l));
+ SetAttributeMessage setMessage = new SetAttributeMessage("test_msg2", 0, "/new", new Attribute("bar"), new ValueInt(43l), newTime);
stanik.handleTyped(setMessage);
AttributesMap actualAttributes = stanik.getHierarchy().findDescendant("/new").getAttributes();
assertEquals(4, TestUtil.iterableSize(actualAttributes));
assertEquals(new ValueInt(1337l), actualAttributes.getOrNull("foo"));
assertEquals(new ValueInt(43l), actualAttributes.getOrNull("bar"));
- assertEquals(new ValueTime(43l), actualAttributes.getOrNull("timestamp"));
+ assertEquals(newTime, actualAttributes.getOrNull("timestamp"));
}
}
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java
index 431122b..2bd63f6 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java
@@ -37,7 +37,7 @@ public class ClientTest {
public static void bindApi() throws Exception {
registryProcess = Runtime.getRuntime().exec("./scripts/registry");
Thread.sleep(10000);
- agentProcess = Runtime.getRuntime().exec("./gradlew runAgent -Dhostname=localhost");
+ agentProcess = Runtime.getRuntime().exec("./gradlew runAgent -Dhostname=localhost -DfreshnessPeriod=10000000");
Thread.sleep(10000);
registry = LocateRegistry.getRegistry("localhost");