From c823d047ee822e48cbdf12bed796389c2a3e25cd Mon Sep 17 00:00:00 2001
From: Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com>
Date: Tue, 31 Dec 2019 13:52:33 +0100
Subject: Test Remik module's state request

---
 .../mimuw/cloudatlas/agent/modules/RemikTest.java  | 61 ++++++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java

(limited to 'src/test/java/pl/edu/mimuw/cloudatlas/agent')

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"));
+    }
+}
-- 
cgit v1.2.3