m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagdalena GrodziƄska <mag.grodzinska@gmail.com>2019-12-25 16:08:05 +0100
committerGitHub <noreply@github.com>2019-12-25 16:08:05 +0100
commita4c5b93eca9966f3816ebc3e82d5ef344768a1cb (patch)
tree1db8718f5e53d981249e34a9c97a4cdef26350c1
parent08bd4342ae7ac18b21843a1c61c0023455d94d65 (diff)
parentf51288ab6ac7b968be99a19784cd9c8de068f18c (diff)
Merge pull request #72 from m-chrzan/client_tests
Client tests
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java25
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java146
3 files changed, 163 insertions, 10 deletions
diff --git a/build.gradle b/build.gradle
index 82a430e..9ef400c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -33,6 +33,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:2.2.1.RELEASE'
+ implementation 'org.springframework.boot:spring-boot-starter-test:2.2.1.RELEASE'
+
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java b/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java
index db9c09f..120d80d 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/client/ClientController.java
@@ -13,16 +13,21 @@ import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.*;
-/*
-should enable reading attribute values stored by the agent
-installing and
-uninstalling queries, and
-setting fallback contacts.
-
-Apart from providing forms for queries and fallback contacts,
-and presenting the information fetched from the agent in a textual form (with automatic refreshment),
-plotting the attributes with numeric values as real-time graphs.
-*/
+/**
+ * APIs
+ * /
+ * /query - displays query submission form
+ * /installQuery - posts query installation data
+ * /uninstallQuery - posts query uninstallation data
+ * /contacts - GET - displays contacts submission form
+ * /contacts - POST - posts contacts installation data
+ * /attribs - GET - displays attribute submission form
+ * /attribs - POST - posts attribute submission data
+ * /values - GET - displays attributes values
+ * /values - POST - posts zone change data
+ * /attribNumValues - REST API to get numerical attribute values
+ * /attribAllValues - REST API to get all attribute values
+ */
@Controller
public class ClientController {
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java
new file mode 100644
index 0000000..431122b
--- /dev/null
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/client/ClientTest.java
@@ -0,0 +1,146 @@
+package pl.edu.mimuw.cloudatlas.client;
+
+import org.hamcrest.CoreMatchers;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import pl.edu.mimuw.cloudatlas.api.Api;
+
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+
+import static org.junit.Assert.assertThat;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+
+@RunWith(SpringRunner.class)
+@AutoConfigureMockMvc
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class ClientTest {
+ private static Process registryProcess;
+ private static Process agentProcess;
+ private static Process clientProcess;
+
+ private static Registry registry;
+ private static Api api;
+
+ @BeforeClass
+ public static void bindApi() throws Exception {
+ registryProcess = Runtime.getRuntime().exec("./scripts/registry");
+ Thread.sleep(10000);
+ agentProcess = Runtime.getRuntime().exec("./gradlew runAgent -Dhostname=localhost");
+ Thread.sleep(10000);
+
+ registry = LocateRegistry.getRegistry("localhost");
+ api = (Api) registry.lookup("Api");
+ }
+
+ @AfterClass
+ public static void killProcesses() throws Exception {
+ try {
+ registryProcess.destroy();
+ agentProcess.destroy();
+ } catch (Exception e) {
+ System.out.println("Caught exception: " + e);
+ }
+ }
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ private MockMvc mvc;
+
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ @Test
+ public void homeMessageCheck() throws Exception {
+ String response = this.restTemplate.getForObject("http://localhost:" + port + "/", String.class);
+ assertThat(response, CoreMatchers.containsString("Welcome to CloudaAtlas client interface"));
+ }
+
+ @Test
+ public void attributeValuesMessageCheck() throws Exception {
+ String response = this.restTemplate.getForObject("http://localhost:" + port + "/values", String.class);
+ assertThat(response, CoreMatchers.containsString("Attribute values"));
+ }
+
+ @Test
+ public void queryInstallationCheck() throws Exception {
+ this.mvc.perform(post("/installQuery")
+ .param("name", "&sampleQuery")
+ .param("value", "SELECT 1 AS one"))
+ .andExpect(status().isOk()).andExpect(content()
+ .contentType("text/html;charset=UTF-8"))
+ .andExpect(content().string(CoreMatchers.containsString("Query installed successfully")));
+ }
+
+ @Test
+ public void queryUninstallationCheck() throws Exception {
+ this.mvc.perform(post("/installQuery")
+ .param("name", "&sampleQuery")
+ .param("value", "SELECT 1 AS one"))
+ .andExpect(status().isOk()).andExpect(content()
+ .contentType("text/html;charset=UTF-8"))
+ .andExpect(content().string(CoreMatchers.containsString("Query installed successfully")));
+
+ this.mvc.perform(post("/uninstallQuery")
+ .param("name", "&sampleQuery"))
+ .andExpect(status().isOk()).andExpect(content()
+ .contentType("text/html;charset=UTF-8"))
+ .andExpect(content().string(CoreMatchers.containsString("Query uninstalled successfully")));
+ }
+
+ @Test
+ public void attributeInstallationCheck() throws Exception {
+ this.mvc.perform(post("/attribs")
+ .param("zoneName", "/")
+ .param("attributeName", "a")
+ .param("attributeType", "Int")
+ .param("valueString", "1"))
+ .andExpect(status().isOk()).andExpect(content()
+ .contentType("text/html;charset=UTF-8"))
+ .andExpect(content().string(CoreMatchers.containsString("Attribute submitted successfully")));
+ }
+
+ @Test
+ public void complexAttributeInstallationCheck() throws Exception {
+ this.mvc.perform(post("/attribs")
+ .param("zoneName", "/")
+ .param("attributeName", "a")
+ .param("attributeType", "List")
+ .param("attributeComplexType", "List, Set, Int")
+ .param("valueString", "[[1]]"))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType("text/html;charset=UTF-8"))
+ .andExpect(content().string(CoreMatchers.containsString("Attribute submitted successfully")));
+ }
+
+ @Test
+ public void numericalRESTApiCheck() throws Exception {
+ Thread.sleep(10000);
+ this.mvc.perform(get("/attribNumValues")
+ .accept(MediaType.TEXT_PLAIN))
+ .andExpect(status().isOk())
+ .andExpect(content().string(CoreMatchers.containsString("num_processes")));
+ }
+
+ @Test
+ public void allValuesRESTApiCheck() throws Exception {
+ Thread.sleep(10000);
+ mvc.perform(get("/attribAllValues")
+ .accept(MediaType.TEXT_PLAIN))
+ .andExpect(status().isOk())
+ .andExpect(content().string(CoreMatchers.containsString("contacts")));
+ }
+}