m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2019-12-30 22:16:46 +0100
committerMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2019-12-30 22:16:46 +0100
commitca2f1ab4a37f0d590d5c116cd1fa7c341c77fad3 (patch)
treefb3b8ff1629e5480086f43065156625985a2e034 /src/test
parentfda20e7aa496926d4f4d78921925025040414d9b (diff)
Implement modular getZoneSet
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/Container.java5
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java1
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/MockEventBus.java17
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java171
4 files changed, 193 insertions, 1 deletions
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/Container.java b/src/test/java/pl/edu/mimuw/cloudatlas/Container.java
new file mode 100644
index 0000000..db5a156
--- /dev/null
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/Container.java
@@ -0,0 +1,5 @@
+package pl.edu.mimuw.cloudatlas;
+
+public class Container<T> {
+ public T thing;
+}
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 c964ed9..0a7a8df 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/ApiImplementationTests.java
@@ -3,7 +3,6 @@ package pl.edu.mimuw.cloudatlas.agent;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
-import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.hasItems;
import java.util.ArrayList;
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/MockEventBus.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/MockEventBus.java
new file mode 100644
index 0000000..e8f8bfa
--- /dev/null
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/MockEventBus.java
@@ -0,0 +1,17 @@
+package pl.edu.mimuw.cloudatlas.agent;
+
+import java.util.concurrent.LinkedBlockingQueue;
+
+import pl.edu.mimuw.cloudatlas.agent.messages.AgentMessage;
+
+public class MockEventBus extends EventBus {
+ public LinkedBlockingQueue<AgentMessage> events;
+
+ public MockEventBus() {
+ events = new LinkedBlockingQueue<AgentMessage>();
+ }
+
+ public void addMessage(AgentMessage msg) throws InterruptedException {
+ events.put(msg);
+ }
+}
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java
new file mode 100644
index 0000000..a3b57a9
--- /dev/null
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java
@@ -0,0 +1,171 @@
+package pl.edu.mimuw.cloudatlas.agent;
+
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import static org.hamcrest.CoreMatchers.hasItems;
+
+import java.util.concurrent.TimeUnit;
+import java.util.HashSet;
+import java.util.Set;
+
+import pl.edu.mimuw.cloudatlas.Container;
+import pl.edu.mimuw.cloudatlas.model.ZMI;
+import pl.edu.mimuw.cloudatlas.agent.modules.ModuleType;
+import pl.edu.mimuw.cloudatlas.agent.messages.AgentMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.RequestStateMessage;
+import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage;
+
+public class NewApiImplementationTests {
+ private NewApiImplementation api;
+ private MockEventBus eventBus;
+
+ @Before
+ public void initializeApi() throws Exception {
+ eventBus = new MockEventBus();
+ api = new NewApiImplementation(eventBus);
+ }
+
+ @Test
+ public void testGetZoneSet() throws Exception {
+ final Set<String> zoneSet = new HashSet();
+ final Container<Exception> exceptionContainer = new Container();
+ Thread apiThread = new Thread(() -> {
+ try {
+ zoneSet.addAll(api.getZoneSet());
+ } catch (Exception e) {
+ exceptionContainer.thing = e;
+ }
+ });
+ apiThread.start();
+
+ AgentMessage message = eventBus.events.poll(100, TimeUnit.MILLISECONDS);
+ assertNotNull(message);
+ assertEquals(ModuleType.RMI, message.getDestinationModule());
+ RequestStateMessage requestMessage = (RequestStateMessage) message;
+
+ ZMI root = new ZMI();
+ StateMessage responseMessage = new StateMessage("", ModuleType.RMI, 0, 0, root, null);
+
+ requestMessage.getFuture().complete(responseMessage);
+
+ apiThread.join(100);
+ assertFalse(apiThread.isAlive());
+ assertNull(exceptionContainer.thing);
+
+ assertThat(zoneSet, hasItems("/"));
+ }
+
+ /*
+ @Test
+ public void testRootGetZoneAttributeValue() throws Exception {
+ AttributesMap rootAttributes = api.getZoneAttributeValues("/");
+ assertEquals(new ValueInt(0l), rootAttributes.get("level"));
+ assertEquals(ValueNull.getInstance(), rootAttributes.get("name"));
+ }
+
+ @Test
+ public void testIntermediateGetZoneAttributeValue() throws Exception {
+ AttributesMap attributes = api.getZoneAttributeValues("/uw");
+ assertEquals(new ValueInt(1l), attributes.get("level"));
+ assertEquals(new ValueString("uw"), attributes.get("name"));
+ }
+
+ @Test
+ public void testLeafGetZoneAttributeValue() throws Exception {
+ AttributesMap attributes = api.getZoneAttributeValues("/pjwstk/whatever01");
+ 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"));
+ 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"));
+ assertEquals(new ValueInt(7l), attributes.get("num_cores"));
+ assertEquals(new ValueInt(215l), attributes.get("num_processes"));
+
+ List<Value> phpModules = new ArrayList<Value>();
+ phpModules.add(new ValueString("rewrite"));
+ assertEquals(new ValueList(phpModules, TypePrimitive.STRING), attributes.get("php_modules"));
+ }
+
+ @Test
+ public void testInstallQuery() throws Exception {
+ String name = "&query";
+ String queryCode = "SELECT 1 AS one";
+ api.installQuery(name, queryCode);
+ assertAttributeInZmiEquals(name, new ValueQuery(queryCode), "/");
+ assertAttributeInZmiEquals(name, new ValueQuery(queryCode), "/uw");
+ assertAttributeInZmiEquals(name, new ValueQuery(queryCode), "/pjwstk");
+ }
+
+ @Test
+ public void testInstallQueryRuns() throws Exception {
+ api.installQuery("&query", "SELECT 1 AS one");
+ assertAttributeInZmiEquals("one", new ValueInt(1l), "/");
+ assertAttributeInZmiEquals("one", new ValueInt(1l), "/uw");
+ assertAttributeInZmiEquals("one", new ValueInt(1l), "/pjwstk");
+ }
+
+ @Test
+ public void testInstallQueryRuns2() throws Exception {
+ api.installQuery("&query", "SELECT sum(num_processes) AS num_processes");
+ assertAttributeInZmiEquals("num_processes", new ValueInt(362l), "/uw");
+ assertAttributeInZmiEquals("num_processes", new ValueInt(437l), "/pjwstk");
+ assertAttributeInZmiEquals("num_processes", new ValueInt(799l), "/");
+ }
+
+ @Test
+ public void testInstallQueryWithInvalidNameFails() throws Exception {
+ String name = "query";
+ String queryCode = "SELECT 1 AS one";
+ try {
+ api.installQuery(name, queryCode);
+ assertTrue("should have thrown", false);
+ } catch (Exception e) {
+ assertEquals("Invalid query identifier", e.getMessage());
+ }
+ }
+
+ public void assertAttributeInZmiEquals(String attribute, Value expected, String zmiPath) throws Exception {
+ AttributesMap attributes = api.getZoneAttributeValues(zmiPath);
+ assertEquals(expected, attributes.get(attribute));
+ }
+
+ @Test
+ public void testUninstallQuery() throws Exception {
+ String name = "&query";
+ String queryCode = "SELECT 1 AS one";
+ api.installQuery(name, queryCode);
+ api.uninstallQuery(name);
+ AttributesMap attributes = api.getZoneAttributeValues("/pjwstk");
+ assertNull(attributes.getOrNull(name));
+ }
+
+ @Test
+ public void testSetAttributeValueChange() throws Exception {
+ Value numProcesses = new ValueInt(42l);
+ api.setAttributeValue("/uw/khaki13", "num_processes", numProcesses);
+ AttributesMap attributes = api.getZoneAttributeValues("/uw/khaki13");
+ assertEquals(numProcesses, attributes.get("num_processes"));
+ }
+
+ @Test
+ public void testSetAttributeValueAdd() throws Exception {
+ Value numProcesses = new ValueInt(42l);
+ api.setAttributeValue("/uw/khaki13", "an_attribute", numProcesses);
+ AttributesMap attributes = api.getZoneAttributeValues("/uw/khaki13");
+ assertEquals(numProcesses, attributes.get("an_attribute"));
+ }
+
+ @Test
+ public void testSetAttributeValueRunsQueries() throws Exception {
+ api.installQuery("&query", "SELECT sum(num_processes) AS num_processes");
+ Value numProcesses = new ValueInt(42l);
+ api.setAttributeValue("/uw/khaki13", "num_processes", numProcesses);
+ assertAttributeInZmiEquals("num_processes", new ValueInt(297l), "/uw");
+ assertAttributeInZmiEquals("num_processes", new ValueInt(437l), "/pjwstk");
+ assertAttributeInZmiEquals("num_processes", new ValueInt(734l), "/");
+ }
+ */
+}