From 0e9ed16b0a048266b56d1238bd7a8a31e59fdac5 Mon Sep 17 00:00:00 2001
From: Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com>
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<Attribute, Entry<ValueQuery, ValueTime>> 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<Attribute, Entry<ValueQuery, ValueTime>> 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<Attribute, Entry<ValueQuery, ValueTime>> actualQueries = stanik.getQueries();
-        assertEquals(1, iterableSize(actualQueries.keySet()));
+        assertEquals(1, TestUtil.iterableSize(actualQueries.keySet()));
         assertTrue(actualQueries.containsKey(new Attribute("&query")));
         Entry<ValueQuery, ValueTime> timestampedQuery = actualQueries.get(new Attribute("&query"));
         assertEquals(new ValueTime(42l), timestampedQuery.getValue());
@@ -177,7 +176,7 @@ public class StanikTest {
         stanik.handleTyped(otherMessage);
 
         HashMap<Attribute, Entry<ValueQuery, ValueTime>> 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 <T> int iterableSize(Iterable<T> 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 <T> int iterableSize(Iterable<T> iterable) {
+        int count = 0;
+        for (T attribute : iterable) {
+            count++;
+        }
+
+        return count;
+    }
+}
-- 
cgit v1.2.3