Unit test for REST call to create an Intent
Added a unit test for the REST POST operation
to create a high level Intent.
Change-Id: Ib0126f58e49ce1d44a37f24a20a10c81751b931f
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighPost.java b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighPost.java
new file mode 100644
index 0000000..ce6d461
--- /dev/null
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestIntentHighPost.java
@@ -0,0 +1,142 @@
+package net.onrc.onos.api.rest;
+
+import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.restlet.data.MediaType;
+import org.restlet.data.Status;
+import org.restlet.representation.Representation;
+import org.restlet.representation.StringRepresentation;
+import org.restlet.resource.ClientResource;
+
+import static net.onrc.onos.api.rest.ClientResourceStatusMatcher.hasStatusOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+
+/**
+ * Unit tests to test the Intents POST REST APIs.
+ */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(PathCalcRuntimeModule.class)
+public class TestRestIntentHighPost extends TestRestIntent {
+ private static final String JSON_STRING_FOR_NEW_INTENT =
+ "[" +
+ "{" +
+ " \"dstSwitchDpid\": \"00:00:00:00:00:00:04:02\"," +
+ " \"staticPath\": true," +
+ " \"dstSwitchPort\": 1," +
+ " \"intentType\": \"SHORTEST_PATH\"," +
+ " \"matchDstMac\": \"00:00:00:02:02:02\"," +
+ " \"srcSwitchPort\": 1," +
+ " \"srcSwitchDpid\": \"00:00:00:00:00:00:02:02\"," +
+ " \"intentId\": 1," +
+ " \"matchSrcMac\": \"00:00:00:01:01:01\"" +
+ "}" +
+ "]";
+
+
+ /**
+ * Create the web server, PathCalcRuntime, and mocks required for
+ * all of the tests.
+ */
+ @Before
+ public void beforeTest() {
+ setRestPort(generateRandomPort());
+ setUp();
+ }
+
+
+ /**
+ * Remove anything that will interfere with the next test running correctly.
+ * Shuts down the test REST web server and removes the mocks.
+ */
+ @After
+ public void afterTest() {
+ tearDown();
+ }
+
+ /**
+ * Test that a POST operation to create a high level Intent
+ * creates an object correctly.
+ * The HTTP status of the POST call should be CREATED and
+ * the POST operation should return the new object.
+ * Once the Intent is created, a fetch operation should return the
+ * new Intent.
+ *
+ * @throws Exception if any of the JSON conversions fail
+ */
+ @Test
+ public void testPostHighIntent() throws Exception {
+
+ final ClientResource postClient = new ClientResource(getHighRestIntentUrl());
+ final Representation postResource =
+ new StringRepresentation(JSON_STRING_FOR_NEW_INTENT,
+ MediaType.APPLICATION_JSON);
+ postClient.post(postResource);
+
+ // HTTP status should be CREATED
+ assertThat(postClient, hasStatusOf(Status.SUCCESS_CREATED));
+
+ // Check that the returned entity is correct
+ final String responseString = postClient.getResponse().getEntityAsText();
+ final JSONArray responseIntents = new JSONArray(responseString);
+ assertThat(responseIntents.length(), is(equalTo(1)));
+
+ final JSONObject responseIntent = responseIntents.getJSONObject(0);
+ assertThat(responseIntent, notNullValue());
+ assertThat(responseIntent.getBoolean("staticPath"), is(true));
+ assertThat(responseIntent.getString("dstSwitchDpid"),
+ is(equalTo("00:00:00:00:00:00:04:02")));
+ assertThat(responseIntent.getInt("dstSwitchPort"),
+ is(equalTo(1)));
+ assertThat(responseIntent.getString("intentType"),
+ is(equalTo("SHORTEST_PATH")));
+ assertThat(responseIntent.getString("matchDstMac"),
+ is(equalTo("00:00:00:02:02:02")));
+ assertThat(responseIntent.getInt("srcSwitchPort"),
+ is(equalTo(1)));
+ assertThat(responseIntent.getString("srcSwitchDpid"),
+ is(equalTo("00:00:00:00:00:00:02:02")));
+ assertThat(responseIntent.getInt("intentId"),
+ is(equalTo(1)));
+ assertThat(responseIntent.getString("matchSrcMac"),
+ is(equalTo("00:00:00:01:01:01")));
+
+ // Now query the intent to make sure it was created properly
+ final ClientResource client = new ClientResource(getHighRestIntentUrl());
+ final JSONArray intents = getJSONArray(client);
+
+ // HTTP status should be OK
+ assertThat(client, hasStatusOf(Status.SUCCESS_OK));
+
+ // There should be 1 intent
+ assertThat(intents.length(), is(equalTo(1)));
+
+ final JSONObject queriedIntent = intents.getJSONObject(0);
+ assertThat(queriedIntent, notNullValue());
+
+ // Check the attributes of the intent
+ assertThat(queriedIntent.getString("id"),
+ is(equalTo("1:1")));
+ assertThat(queriedIntent.getString("srcPortNumber"),
+ is(equalTo("1")));
+ assertThat(queriedIntent.getString("srcMac"),
+ is(equalTo("00:00:00:01:01:01")));
+ assertThat(queriedIntent.getString("srcSwitchDpid"),
+ is(equalTo("00:00:00:00:00:00:02:02")));
+ assertThat(queriedIntent.getString("dstPortNumber"),
+ is(equalTo("1")));
+ assertThat(queriedIntent.getString("dstMac"),
+ is(equalTo("00:00:00:02:02:02")));
+ assertThat(queriedIntent.getString("dstSwitchDpid"),
+ is(equalTo("00:00:00:00:00:00:04:02")));
+ }
+}