aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java')
-rw-r--r--framework/src/onos/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java492
1 files changed, 0 insertions, 492 deletions
diff --git a/framework/src/onos/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java b/framework/src/onos/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
deleted file mode 100644
index 33ee9317..00000000
--- a/framework/src/onos/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.rest;
-
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.util.Collections;
-import java.util.HashSet;
-
-import javax.ws.rs.core.MediaType;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matchers;
-import org.hamcrest.TypeSafeMatcher;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.osgi.TestServiceDirectory;
-import org.onlab.rest.BaseResource;
-import org.onosproject.codec.CodecService;
-import org.onosproject.codec.impl.CodecManager;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.core.IdGenerator;
-import org.onosproject.net.NetworkResource;
-import org.onosproject.net.intent.FakeIntentManager;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.intent.IntentState;
-import org.onosproject.net.intent.Key;
-import org.onosproject.net.intent.MockIdGenerator;
-
-import com.eclipsesource.json.JsonArray;
-import com.eclipsesource.json.JsonObject;
-import com.eclipsesource.json.JsonValue;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.client.WebResource;
-
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-import static org.onosproject.net.intent.IntentTestsMocks.MockIntent;
-
-/**
- * Unit tests for Intents REST APIs.
- */
-public class IntentsResourceTest extends ResourceTest {
- final IntentService mockIntentService = createMock(IntentService.class);
- final CoreService mockCoreService = createMock(CoreService.class);
- final HashSet<Intent> intents = new HashSet<>();
- private static final ApplicationId APP_ID = new DefaultApplicationId(1, "test");
- private IdGenerator mockGenerator;
-
- private class MockResource implements NetworkResource {
- int id;
-
- MockResource(int id) {
- this.id = id;
- }
-
- @Override
- public String toString() {
- return "Resource " + Integer.toString(id);
- }
- }
-
- /**
- * Hamcrest matcher to check that an intent representation in JSON matches
- * the actual intent.
- */
- public static class IntentJsonMatcher extends TypeSafeMatcher<JsonObject> {
- private final Intent intent;
- private String reason = "";
-
- public IntentJsonMatcher(Intent intentValue) {
- intent = intentValue;
- }
-
- @Override
- public boolean matchesSafely(JsonObject jsonIntent) {
- // check id
- final String jsonId = jsonIntent.get("id").asString();
- if (!jsonId.equals(intent.id().toString())) {
- reason = "id " + intent.id().toString();
- return false;
- }
-
- // check application id
-
- final String jsonAppId = jsonIntent.get("appId").asString();
- final String appId = intent.appId().name();
- if (!jsonAppId.equals(appId)) {
- reason = "appId was " + jsonAppId;
- return false;
- }
-
- // check intent type
- final String jsonType = jsonIntent.get("type").asString();
- if (!jsonType.equals("MockIntent")) {
- reason = "type MockIntent";
- return false;
- }
-
- // check state field
- final String jsonState = jsonIntent.get("state").asString();
- if (!jsonState.equals("INSTALLED")) {
- reason = "state INSTALLED";
- return false;
- }
-
- // check resources array
- final JsonArray jsonResources = jsonIntent.get("resources").asArray();
- if (intent.resources() != null) {
- if (intent.resources().size() != jsonResources.size()) {
- reason = "resources array size of " + Integer.toString(intent.resources().size());
- return false;
- }
- for (final NetworkResource resource : intent.resources()) {
- boolean resourceFound = false;
- final String resourceString = resource.toString();
- for (int resourceIndex = 0; resourceIndex < jsonResources.size(); resourceIndex++) {
- final JsonValue value = jsonResources.get(resourceIndex);
- if (value.asString().equals(resourceString)) {
- resourceFound = true;
- }
- }
- if (!resourceFound) {
- reason = "resource " + resourceString;
- return false;
- }
- }
- } else if (jsonResources.size() != 0) {
- reason = "resources array empty";
- return false;
- }
- return true;
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText(reason);
- }
- }
-
- /**
- * Factory to allocate an intent matcher.
- *
- * @param intent intent object we are looking for
- * @return matcher
- */
- private static IntentJsonMatcher matchesIntent(Intent intent) {
- return new IntentJsonMatcher(intent);
- }
-
- /**
- * Hamcrest matcher to check that an intent is represented properly in a JSON
- * array of intents.
- */
- public static class IntentJsonArrayMatcher extends TypeSafeMatcher<JsonArray> {
- private final Intent intent;
- private String reason = "";
-
- public IntentJsonArrayMatcher(Intent intentValue) {
- intent = intentValue;
- }
-
- @Override
- public boolean matchesSafely(JsonArray json) {
- boolean intentFound = false;
- final int expectedAttributes = 5;
- for (int jsonIntentIndex = 0; jsonIntentIndex < json.size();
- jsonIntentIndex++) {
-
- final JsonObject jsonIntent = json.get(jsonIntentIndex).asObject();
-
- if (jsonIntent.names().size() != expectedAttributes) {
- reason = "Found an intent with the wrong number of attributes";
- return false;
- }
-
- final String jsonIntentId = jsonIntent.get("id").asString();
- if (jsonIntentId.equals(intent.id().toString())) {
- intentFound = true;
-
- // We found the correct intent, check attribute values
- assertThat(jsonIntent, matchesIntent(intent));
- }
- }
- if (!intentFound) {
- reason = "Intent with id " + intent.id().toString() + " not found";
- return false;
- } else {
- return true;
- }
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText(reason);
- }
- }
-
- /**
- * Factory to allocate an intent array matcher.
- *
- * @param intent intent object we are looking for
- * @return matcher
- */
- private static IntentJsonArrayMatcher hasIntent(Intent intent) {
- return new IntentJsonArrayMatcher(intent);
- }
-
- /**
- * Initializes test mocks and environment.
- */
- @Before
- public void setUpTest() {
- expect(mockIntentService.getIntents()).andReturn(intents).anyTimes();
- expect(mockIntentService.getIntentState(anyObject()))
- .andReturn(IntentState.INSTALLED)
- .anyTimes();
- // Register the services needed for the test
- final CodecManager codecService = new CodecManager();
- codecService.activate();
- ServiceDirectory testDirectory =
- new TestServiceDirectory()
- .add(IntentService.class, mockIntentService)
- .add(CodecService.class, codecService)
- .add(CoreService.class, mockCoreService);
-
- BaseResource.setServiceDirectory(testDirectory);
-
- mockGenerator = new MockIdGenerator();
- Intent.bindIdGenerator(mockGenerator);
- }
-
- /**
- * Tears down and verifies test mocks and environment.
- */
- @After
- public void tearDownTest() {
- verify(mockIntentService);
- Intent.unbindIdGenerator(mockGenerator);
- }
-
- /**
- * Tests the result of the rest api GET when there are no intents.
- */
- @Test
- public void testIntentsEmptyArray() {
- replay(mockIntentService);
- final WebResource rs = resource();
- final String response = rs.path("intents").get(String.class);
- assertThat(response, is("{\"intents\":[]}"));
- }
-
- /**
- * Tests the result of the rest api GET when intents are defined.
- */
- @Test
- public void testIntentsArray() {
- replay(mockIntentService);
-
- final Intent intent1 = new MockIntent(1L, Collections.emptyList());
- final HashSet<NetworkResource> resources = new HashSet<>();
- resources.add(new MockResource(1));
- resources.add(new MockResource(2));
- resources.add(new MockResource(3));
- final Intent intent2 = new MockIntent(2L, resources);
-
- intents.add(intent1);
- intents.add(intent2);
- final WebResource rs = resource();
- final String response = rs.path("intents").get(String.class);
- assertThat(response, containsString("{\"intents\":["));
-
- final JsonObject result = JsonObject.readFrom(response);
- assertThat(result, notNullValue());
-
- assertThat(result.names(), hasSize(1));
- assertThat(result.names().get(0), is("intents"));
-
- final JsonArray jsonIntents = result.get("intents").asArray();
- assertThat(jsonIntents, notNullValue());
-
- assertThat(jsonIntents, hasIntent(intent1));
- assertThat(jsonIntents, hasIntent(intent2));
- }
-
- /**
- * Tests the result of a rest api GET for a single intent.
- */
- @Test
- public void testIntentsSingle() {
- final HashSet<NetworkResource> resources = new HashSet<>();
- resources.add(new MockResource(1));
- resources.add(new MockResource(2));
- resources.add(new MockResource(3));
- final Intent intent = new MockIntent(3L, resources);
-
- intents.add(intent);
-
- expect(mockIntentService.getIntent(Key.of(0, APP_ID)))
- .andReturn(intent)
- .anyTimes();
- expect(mockIntentService.getIntent(Key.of("0", APP_ID)))
- .andReturn(intent)
- .anyTimes();
- expect(mockIntentService.getIntent(Key.of(0, APP_ID)))
- .andReturn(intent)
- .anyTimes();
- expect(mockIntentService.getIntent(Key.of("0x0", APP_ID)))
- .andReturn(null)
- .anyTimes();
- replay(mockIntentService);
- expect(mockCoreService.getAppId(APP_ID.name()))
- .andReturn(APP_ID).anyTimes();
- replay(mockCoreService);
- final WebResource rs = resource();
-
- // Test get using key string
- final String response = rs.path("intents/" + APP_ID.name()
- + "/0").get(String.class);
- final JsonObject result = JsonObject.readFrom(response);
- assertThat(result, matchesIntent(intent));
-
- // Test get using numeric value
- final String responseNumeric = rs.path("intents/" + APP_ID.name()
- + "/0x0").get(String.class);
- final JsonObject resultNumeric = JsonObject.readFrom(responseNumeric);
- assertThat(resultNumeric, matchesIntent(intent));
- }
-
- /**
- * Tests that a fetch of a non-existent intent object throws an exception.
- */
- @Test
- public void testBadGet() {
-
- expect(mockIntentService.getIntent(Key.of(0, APP_ID)))
- .andReturn(null)
- .anyTimes();
- replay(mockIntentService);
-
- WebResource rs = resource();
- try {
- rs.path("intents/0").get(String.class);
- fail("Fetch of non-existent intent did not throw an exception");
- } catch (UniformInterfaceException ex) {
- assertThat(ex.getMessage(),
- containsString("returned a response status of"));
- }
- }
-
- /**
- * Tests creating an intent with POST.
- */
- @Test
- public void testPost() {
- ApplicationId testId = new DefaultApplicationId(2, "myApp");
- expect(mockCoreService.getAppId("myApp"))
- .andReturn(testId);
- replay(mockCoreService);
-
- mockIntentService.submit(anyObject());
- expectLastCall();
- replay(mockIntentService);
-
- InputStream jsonStream = IntentsResourceTest.class
- .getResourceAsStream("post-intent.json");
- WebResource rs = resource();
-
- ClientResponse response = rs.path("intents")
- .type(MediaType.APPLICATION_JSON_TYPE)
- .post(ClientResponse.class, jsonStream);
- assertThat(response.getStatus(), is(HttpURLConnection.HTTP_CREATED));
- String location = response.getLocation().getPath();
- assertThat(location, Matchers.startsWith("/intents/myApp/"));
- }
-
- /**
- * Tests creating an intent with POST and illegal JSON.
- */
- @Test
- public void testBadPost() {
- replay(mockCoreService);
- replay(mockIntentService);
-
- String json = "this is invalid!";
- WebResource rs = resource();
-
- ClientResponse response = rs.path("intents")
- .type(MediaType.APPLICATION_JSON_TYPE)
- .post(ClientResponse.class, json);
- assertThat(response.getStatus(), is(HttpURLConnection.HTTP_BAD_REQUEST));
- }
-
- /**
- * Tests removing an intent with DELETE.
- */
- @Test
- public void testRemove() {
- final HashSet<NetworkResource> resources = new HashSet<>();
- resources.add(new MockResource(1));
- resources.add(new MockResource(2));
- resources.add(new MockResource(3));
- final Intent intent = new MockIntent(3L, resources);
- final ApplicationId appId = new DefaultApplicationId(2, "app");
- IntentService fakeManager = new FakeIntentManager();
-
- expect(mockCoreService.getAppId("app"))
- .andReturn(appId).once();
- replay(mockCoreService);
-
- mockIntentService.withdraw(anyObject());
- expectLastCall().andDelegateTo(fakeManager).once();
- expect(mockIntentService.getIntent(Key.of(2, appId)))
- .andReturn(intent)
- .once();
- expect(mockIntentService.getIntent(Key.of("0x2", appId)))
- .andReturn(null)
- .once();
-
- mockIntentService.addListener(anyObject());
- expectLastCall().andDelegateTo(fakeManager).once();
- mockIntentService.removeListener(anyObject());
- expectLastCall().andDelegateTo(fakeManager).once();
-
- replay(mockIntentService);
-
- WebResource rs = resource();
-
- ClientResponse response = rs.path("intents/app/0x2")
- .type(MediaType.APPLICATION_JSON_TYPE)
- .delete(ClientResponse.class);
- assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NO_CONTENT));
- }
-
- /**
- * Tests removal of a non existent intent with DELETE.
- */
- @Test
- public void testBadRemove() {
- final ApplicationId appId = new DefaultApplicationId(2, "app");
-
- expect(mockCoreService.getAppId("app"))
- .andReturn(appId).once();
- replay(mockCoreService);
-
- expect(mockIntentService.getIntent(Key.of(2, appId)))
- .andReturn(null)
- .once();
- expect(mockIntentService.getIntent(Key.of("0x2", appId)))
- .andReturn(null)
- .once();
-
- replay(mockIntentService);
-
- WebResource rs = resource();
-
- ClientResponse response = rs.path("intents/app/0x2")
- .type(MediaType.APPLICATION_JSON_TYPE)
- .delete(ClientResponse.class);
- assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NO_CONTENT));
- }
-
-}