m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/pl/edu/mimuw/cloudatlas/agent/modules')
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java48
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java61
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/StanikTest.java58
3 files changed, 166 insertions, 1 deletions
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java
index 0c10092..b6e4ea8 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java
@@ -16,6 +16,7 @@ import pl.edu.mimuw.cloudatlas.model.Attribute;
import pl.edu.mimuw.cloudatlas.model.AttributesMap;
import pl.edu.mimuw.cloudatlas.model.TestUtil;
import pl.edu.mimuw.cloudatlas.model.ValueInt;
+import pl.edu.mimuw.cloudatlas.model.ValueNull;
import pl.edu.mimuw.cloudatlas.model.ValueQuery;
import pl.edu.mimuw.cloudatlas.model.ValueString;
import pl.edu.mimuw.cloudatlas.model.ValueTime;
@@ -200,4 +201,51 @@ public class QurnikTest {
assertTrue(timeBefore <= timestamp2);
assertTrue(timestamp2 <= timeAfter);
}
+
+ @Test
+ public void ignoresNullQueries() throws Exception {
+ ZMI root = setupSampleHierarchy();
+
+ Map<Attribute, Entry<ValueQuery, ValueTime>> queries = new HashMap();
+ queries.put(new Attribute("&query1"), new SimpleImmutableEntry(
+ new ValueQuery("SELECT 1 AS one"),
+ new ValueTime(42l)
+ )
+ );
+ queries.put(new Attribute("&query2"), new SimpleImmutableEntry(
+ null,
+ new ValueTime(43l)
+ )
+ );
+ queries.put(new Attribute("&query3"), new SimpleImmutableEntry(
+ new ValueQuery("SELECT 2 AS two"),
+ new ValueTime(44l)
+ )
+ );
+ StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries);
+ long timeBefore = System.currentTimeMillis();
+ qurnik.handleTyped(message);
+ long timeAfter = System.currentTimeMillis();
+
+ UpdateAttributesMessage message1 = (UpdateAttributesMessage) executor.messagesToPass.take();
+ assertEquals("/uw", message1.getPathName());
+ AttributesMap attributes1 = message1.getAttributes();
+ assertEquals(4, TestUtil.iterableSize(attributes1));
+ assertEquals(new ValueInt(1l), attributes1.getOrNull("one"));
+ assertEquals(new ValueInt(2l), attributes1.getOrNull("two"));
+ long timestamp1 = ((ValueTime) attributes1.getOrNull("timestamp")).getValue();
+ assertTrue(timeBefore <= timestamp1);
+ assertTrue(timestamp1 <= timeAfter);
+
+ UpdateAttributesMessage message2 = (UpdateAttributesMessage) executor.messagesToPass.take();
+ assertEquals("/", message2.getPathName());
+ AttributesMap attributes2 = message2.getAttributes();
+ System.out.println("got attributes " + attributes2.toString());
+ assertEquals(3, TestUtil.iterableSize(attributes2));
+ assertEquals(new ValueInt(1l), attributes2.getOrNull("one"));
+ assertEquals(new ValueInt(2l), attributes2.getOrNull("two"));
+ long timestamp2 = ((ValueTime) attributes2.getOrNull("timestamp")).getValue();
+ assertTrue(timeBefore <= timestamp2);
+ assertTrue(timestamp2 <= timeAfter);
+ }
}
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java
new file mode 100644
index 0000000..8ac8bed
--- /dev/null
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java
@@ -0,0 +1,61 @@
+package pl.edu.mimuw.cloudatlas.agent.modules;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.HashMap;
+
+import pl.edu.mimuw.cloudatlas.agent.messages.AgentMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.GetStateMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.RequestStateMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.ResponseMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.StanikMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage;
+import pl.edu.mimuw.cloudatlas.agent.MockExecutor;
+import pl.edu.mimuw.cloudatlas.model.ValueTime;
+import pl.edu.mimuw.cloudatlas.model.ZMI;
+
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class RemikTest {
+ private Remik remik;
+ private MockExecutor executor;
+
+ @Before
+ public void setupLocals() {
+ remik = new Remik();
+ executor = new MockExecutor(remik);
+ }
+
+ @Test
+ public void asksForStateOnStateRequest() throws Exception {
+ CompletableFuture<ResponseMessage> future = new CompletableFuture();
+ RequestStateMessage message = new RequestStateMessage("", 0, future);
+ remik.handleTyped(message);
+ AgentMessage receivedMessage = (AgentMessage) executor.messagesToPass.take();
+ assertEquals(ModuleType.STATE, receivedMessage.getDestinationModule());
+ StanikMessage stanikMessage = (StanikMessage) receivedMessage;
+ assertEquals(StanikMessage.Type.GET_STATE, stanikMessage.getType());
+ GetStateMessage getStateMessage = (GetStateMessage) stanikMessage;
+ assertEquals(ModuleType.RMI, getStateMessage.getRequestingModule());
+ }
+
+ @Test
+ public void completesFutureOnReceivedState() throws Exception {
+ CompletableFuture<ResponseMessage> future = new CompletableFuture();
+ RequestStateMessage message = new RequestStateMessage("", 0, future);
+ remik.handleTyped(message);
+
+ ZMI zmi = new ZMI();
+ zmi.getAttributes().add("timestamp", new ValueTime(42l));
+ StateMessage response = new StateMessage("", ModuleType.RMI, 0, 0, zmi, new HashMap());
+ remik.handleTyped(response);
+
+ ResponseMessage passedResponse = future.get(100, TimeUnit.MILLISECONDS);
+ assertNotNull(passedResponse);
+ assertEquals(ResponseMessage.Type.STATE, passedResponse.getType());
+ StateMessage stateMessage = (StateMessage) passedResponse;
+ assertEquals(new ValueTime(42l), stateMessage.getZMI().getAttributes().get("timestamp"));
+ }
+}
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 495a012..2e1ccea 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
@@ -7,9 +7,10 @@ import java.util.Map.Entry;
import pl.edu.mimuw.cloudatlas.agent.messages.AgentMessage;
import pl.edu.mimuw.cloudatlas.agent.messages.GetStateMessage;
-import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage;
import pl.edu.mimuw.cloudatlas.agent.messages.RemoveZMIMessage;
import pl.edu.mimuw.cloudatlas.agent.messages.ResponseMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.SetAttributeMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage;
import pl.edu.mimuw.cloudatlas.agent.messages.UpdateAttributesMessage;
import pl.edu.mimuw.cloudatlas.agent.messages.UpdateQueriesMessage;
import pl.edu.mimuw.cloudatlas.agent.MockExecutor;
@@ -236,4 +237,59 @@ public class StanikTest {
stanik.getHierarchy().findDescendant("/new");
}
+
+ @Test
+ public void setOldAttribute() throws Exception {
+ AttributesMap attributes = new AttributesMap();
+ attributes.add("foo", new ValueInt(1337l));
+ attributes.add("name", new ValueString("new"));
+ attributes.add("timestamp", new ValueTime(42l));
+ 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));
+ 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"));
+ }
+
+ @Test
+ public void setOldAttribute2() throws Exception {
+ AttributesMap attributes = new AttributesMap();
+ attributes.add("foo", new ValueInt(1337l));
+ attributes.add("name", new ValueString("new"));
+ attributes.add("timestamp", new ValueTime(42l));
+ 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));
+ 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"));
+ }
+
+ @Test
+ public void setNewAttribute() throws Exception {
+ AttributesMap attributes = new AttributesMap();
+ attributes.add("foo", new ValueInt(1337l));
+ attributes.add("name", new ValueString("new"));
+ attributes.add("timestamp", new ValueTime(42l));
+ 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));
+ 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"));
+ }
}