From 0e9ed16b0a048266b56d1238bd7a8a31e59fdac5 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Sun, 29 Dec 2019 19:12:48 +0100 Subject: Start running queries with Qurnik --- .../mimuw/cloudatlas/agent/modules/QurnikTest.java | 86 ++++++++++++++++++++++ .../mimuw/cloudatlas/agent/modules/StanikTest.java | 30 +++----- .../pl/edu/mimuw/cloudatlas/model/TestUtil.java | 16 ++++ 3 files changed, 112 insertions(+), 20 deletions(-) create mode 100644 src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java create mode 100644 src/test/java/pl/edu/mimuw/cloudatlas/model/TestUtil.java (limited to 'src/test/java/pl/edu/mimuw/cloudatlas') 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 new file mode 100644 index 0000000..28f316c --- /dev/null +++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java @@ -0,0 +1,86 @@ +package pl.edu.mimuw.cloudatlas.agent.modules; + +import java.util.AbstractMap.SimpleImmutableEntry; +import java.util.HashMap; +import java.util.Map; +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.RunQueriesMessage; +import pl.edu.mimuw.cloudatlas.agent.messages.StanikMessage; +import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage; +import pl.edu.mimuw.cloudatlas.agent.messages.UpdateAttributesMessage; +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.TestUtil; +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.ZMI; + +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.*; + +public class QurnikTest { + private Qurnik qurnik; + private MockExecutor executor; + + @Before + public void setupLocals() { + qurnik = new Qurnik(); + executor = new MockExecutor(qurnik); + } + + @Test + public void runQueriesRequestsState() throws Exception { + RunQueriesMessage message = new RunQueriesMessage("", 0); + qurnik.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.QUERY, getStateMessage.getRequestingModule()); + } + + @Test + public void simpleQuery() throws Exception { + ZMI root = new ZMI(); + ZMI son = new ZMI(root); + root.addSon(son); + AttributesMap sonAttributes = new AttributesMap(); + sonAttributes.add("name", new ValueString("son")); + Map> queries = new HashMap(); + queries.put( + new Attribute("&query"), + new SimpleImmutableEntry( + new ValueQuery("SELECT 1 AS one"), + new ValueTime(0l) + ) + ); + StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries); + long timeBefore = System.currentTimeMillis() / 1000; + qurnik.handleTyped(message); + long timeAfter = System.currentTimeMillis() / 1000; + + assertEquals(1, executor.messagesToPass.size()); + AgentMessage receivedMessage = (AgentMessage) executor.messagesToPass.take(); + assertEquals(ModuleType.STATE, receivedMessage.getDestinationModule()); + StanikMessage stanikMessage = (StanikMessage) receivedMessage; + assertEquals(StanikMessage.Type.UPDATE_ATTRIBUTES, stanikMessage.getType()); + UpdateAttributesMessage updateAttributesMessage = (UpdateAttributesMessage) stanikMessage; + assertEquals("/", updateAttributesMessage.getPathName()); + AttributesMap updatedAttributes = updateAttributesMessage.getAttributes(); + assertEquals(2, TestUtil.iterableSize(updatedAttributes)); + assertEquals(new ValueInt(1l), updatedAttributes.getOrNull("one")); + System.out.println(timeBefore); + System.out.println(updatedAttributes.getOrNull("timestamp")); + long timestamp = ((ValueTime) updatedAttributes.getOrNull("timestamp")).getValue(); + assertTrue(timeBefore <= timestamp); + assertTrue(timestamp <= timeAfter); + } +} 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 aeaf19f..8958472 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 @@ -1,7 +1,5 @@ package pl.edu.mimuw.cloudatlas.agent.modules; -import java.util.Iterator; -import java.util.List; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.HashMap; import java.util.Map; @@ -16,6 +14,7 @@ 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.TestUtil; import pl.edu.mimuw.cloudatlas.model.Value; import pl.edu.mimuw.cloudatlas.model.ValueInt; import pl.edu.mimuw.cloudatlas.model.ValueQuery; @@ -32,7 +31,7 @@ public class StanikTest { private MockExecutor executor; @Before - public void setupEventBus() { + public void setupLocals() { stanik = new Stanik(); executor = new MockExecutor(stanik); } @@ -50,9 +49,9 @@ public class StanikTest { ZMI zmi = stateMessage.getZMI(); assertNull(zmi.getFather()); assertTrue(zmi.getSons().isEmpty()); - assertEquals(1, iterableSize(zmi.getAttributes())); + assertEquals(1, TestUtil.iterableSize(zmi.getAttributes())); Map> queries = stateMessage.getQueries(); - assertEquals(0, iterableSize(queries.keySet())); + assertEquals(0, TestUtil.iterableSize(queries.keySet())); } @Test @@ -81,7 +80,7 @@ public class StanikTest { UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/", attributes); stanik.handleTyped(message); AttributesMap actualAttributes = stanik.getHierarchy().getAttributes(); - assertEquals(3, iterableSize(actualAttributes)); + 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")); @@ -97,7 +96,7 @@ public class StanikTest { UpdateAttributesMessage message = new UpdateAttributesMessage("test_msg", 0, "/new", attributes); stanik.handleTyped(message); AttributesMap actualAttributes = stanik.getHierarchy().findDescendant("/new").getAttributes(); - assertEquals(4, iterableSize(actualAttributes)); + assertEquals(4, TestUtil.iterableSize(actualAttributes)); assertEquals(new ValueInt(1337l), actualAttributes.getOrNull("foo")); assertEquals(new ValueString("baz"), actualAttributes.getOrNull("bar")); assertEquals(new ValueString("new"), actualAttributes.getOrNull("name")); @@ -120,7 +119,7 @@ public class StanikTest { stanik.handleTyped(newMessage); AttributesMap actualAttributes = stanik.getHierarchy().getAttributes(); - assertEquals(2, iterableSize(actualAttributes)); + 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")); } @@ -140,7 +139,7 @@ public class StanikTest { stanik.handleTyped(newMessage); AttributesMap actualAttributes = stanik.getHierarchy().getAttributes(); - assertEquals(2, iterableSize(actualAttributes)); + 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")); } @@ -153,7 +152,7 @@ public class StanikTest { stanik.handleTyped(message); HashMap> actualQueries = stanik.getQueries(); - assertEquals(1, iterableSize(actualQueries.keySet())); + assertEquals(1, TestUtil.iterableSize(actualQueries.keySet())); assertTrue(actualQueries.containsKey(new Attribute("&query"))); Entry timestampedQuery = actualQueries.get(new Attribute("&query")); assertEquals(new ValueTime(42l), timestampedQuery.getValue()); @@ -177,7 +176,7 @@ public class StanikTest { stanik.handleTyped(otherMessage); HashMap> actualQueries = stanik.getQueries(); - assertEquals(4, iterableSize(actualQueries.keySet())); + assertEquals(4, TestUtil.iterableSize(actualQueries.keySet())); assertTrue(actualQueries.containsKey(new Attribute("&query1"))); assertTrue(actualQueries.containsKey(new Attribute("&query2"))); assertTrue(actualQueries.containsKey(new Attribute("&query3"))); @@ -199,13 +198,4 @@ public class StanikTest { assertEquals(new ValueTime(43l), timestampedQuery4.getValue()); assertEquals(new ValueQuery("SELECT 1000 AS foo"), timestampedQuery4.getKey()); } - - public int iterableSize(Iterable iterable) { - int count = 0; - for (T attribute : iterable) { - count++; - } - - return count; - } } diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/model/TestUtil.java b/src/test/java/pl/edu/mimuw/cloudatlas/model/TestUtil.java new file mode 100644 index 0000000..ed633d7 --- /dev/null +++ b/src/test/java/pl/edu/mimuw/cloudatlas/model/TestUtil.java @@ -0,0 +1,16 @@ +package pl.edu.mimuw.cloudatlas.model; + +public class TestUtil { + public static boolean valueLower(Value a, Value b) { + return ((ValueBoolean) a.isLowerThan(b)).getValue(); + } + + public static int iterableSize(Iterable iterable) { + int count = 0; + for (T attribute : iterable) { + count++; + } + + return count; + } +} -- cgit v1.2.3