diff options
author | Martin <marcin.j.chrzanowski@gmail.com> | 2020-01-03 18:29:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-03 18:29:55 +0100 |
commit | 9be545d6f2609d5fe8143a1964d44f6eee588ea2 (patch) | |
tree | f0bb8d159249e9ddf328e92d7fb5eda10122ab3b /src/test/java/pl/edu/mimuw/cloudatlas/agent/modules | |
parent | fda20e7aa496926d4f4d78921925025040414d9b (diff) | |
parent | ec2da92e9636e219f5ad7caa73c9334dae12e5b1 (diff) |
Merge pull request #83 from m-chrzan/remik
Use new modular architecture when implementing the RMI API
Diffstat (limited to 'src/test/java/pl/edu/mimuw/cloudatlas/agent/modules')
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")); + } } |