aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java')
-rw-r--r--framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java352
1 files changed, 352 insertions, 0 deletions
diff --git a/framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java b/framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java
new file mode 100644
index 00000000..2b341af2
--- /dev/null
+++ b/framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java
@@ -0,0 +1,352 @@
+/*
+ * Copyright 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.resources;
+
+import java.net.HttpURLConnection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Assert;
+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.net.DefaultDevice;
+import org.onosproject.net.Device;
+import org.onosproject.net.Link;
+import org.onosproject.net.config.Config;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.NetworkConfigServiceAdapter;
+import org.onosproject.net.config.SubjectFactory;
+import org.onosproject.rest.ResourceTest;
+
+import com.eclipsesource.json.JsonObject;
+import com.eclipsesource.json.JsonValue;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableSet;
+import com.sun.jersey.api.client.UniformInterfaceException;
+import com.sun.jersey.api.client.WebResource;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.replay;
+import static org.hamcrest.MatcherAssert.assertThat;
+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.fail;
+
+/**
+ * Unit tests for network config web resource.
+ */
+public class NetworkConfigWebResourceTest extends ResourceTest {
+
+ MockNetworkConfigService mockNetworkConfigService;
+
+ public class MockDeviceConfig extends Config<Device> {
+
+ final String field1Value;
+ final String field2Value;
+
+ MockDeviceConfig(String value1, String value2) {
+ field1Value = value1;
+ field2Value = value2;
+ }
+
+ @Override
+ public String key() {
+ return "basic";
+ }
+
+ @Override
+ public JsonNode node() {
+ return new ObjectMapper()
+ .createObjectNode()
+ .put("field1", field1Value)
+ .put("field2", field2Value);
+ }
+ }
+
+ /**
+ * Mock config factory for devices.
+ */
+ private final SubjectFactory<Device> mockDevicesSubjectFactory =
+ new SubjectFactory<Device>(Device.class, "devices") {
+ @Override
+ public Device createSubject(String subjectKey) {
+ DefaultDevice device = createMock(DefaultDevice.class);
+ replay(device);
+ return device;
+ }
+
+ @Override
+ public Class<Device> subjectClass() {
+ return Device.class;
+ }
+ };
+
+ /**
+ * Mock config factory for links.
+ */
+ private final SubjectFactory<Link> mockLinksSubjectFactory =
+ new SubjectFactory<Link>(Link.class, "links") {
+ @Override
+ public Link createSubject(String subjectKey) {
+ return null;
+ }
+
+ @Override
+ public Class<Link> subjectClass() {
+ return Link.class;
+ }
+ };
+
+ /**
+ * Mocked config service.
+ */
+ class MockNetworkConfigService extends NetworkConfigServiceAdapter {
+
+ Set devicesSubjects = new HashSet<>();
+ Set devicesConfigs = new HashSet<>();
+ Set linksSubjects = new HashSet();
+ Set linksConfigs = new HashSet<>();
+
+ @Override
+ public Set<Class> getSubjectClasses() {
+ return ImmutableSet.of(Device.class, Link.class);
+ }
+
+ @Override
+ public SubjectFactory getSubjectFactory(Class subjectClass) {
+ if (subjectClass == Device.class) {
+ return mockDevicesSubjectFactory;
+ } else if (subjectClass == Link.class) {
+ return mockLinksSubjectFactory;
+ }
+ return null;
+ }
+
+ @Override
+ public SubjectFactory getSubjectFactory(String subjectClassKey) {
+ if (subjectClassKey.equals("devices")) {
+ return mockDevicesSubjectFactory;
+ } else if (subjectClassKey.equals("links")) {
+ return mockLinksSubjectFactory;
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <S> Set<S> getSubjects(Class<S> subjectClass) {
+ if (subjectClass == Device.class) {
+ return devicesSubjects;
+ } else if (subjectClass == Link.class) {
+ return linksSubjects;
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <S> Set<? extends Config<S>> getConfigs(S subject) {
+ if (subject instanceof Device || subject.toString().contains("device")) {
+ return devicesConfigs;
+ } else if (subject.toString().contains("link")) {
+ return linksConfigs;
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
+
+ if (configClass == MockDeviceConfig.class) {
+ return (C) devicesConfigs.toArray()[0];
+ }
+ return null;
+ }
+
+ @Override
+ public Class<? extends Config> getConfigClass(String subjectClassKey, String configKey) {
+ return MockDeviceConfig.class;
+ }
+ }
+
+ /**
+ * Sets up mocked config service.
+ */
+ @Before
+ public void setUp() {
+ mockNetworkConfigService = new MockNetworkConfigService();
+ ServiceDirectory testDirectory =
+ new TestServiceDirectory()
+ .add(NetworkConfigService.class, mockNetworkConfigService);
+ BaseResource.setServiceDirectory(testDirectory);
+ }
+
+ /**
+ * Sets up test config data.
+ */
+ @SuppressWarnings("unchecked")
+ public void setUpConfigData() {
+ mockNetworkConfigService.devicesSubjects.add("device1");
+ mockNetworkConfigService.devicesConfigs.add(new MockDeviceConfig("v1", "v2"));
+ }
+
+ /**
+ * Tests the result of the rest api GET when there are no configs.
+ */
+ @Test
+ public void testEmptyConfigs() {
+ final WebResource rs = resource();
+ final String response = rs.path("network/configuration").get(String.class);
+
+ assertThat(response, containsString("\"devices\":{}"));
+ assertThat(response, containsString("\"links\":{}"));
+ }
+
+ /**
+ * Tests the result of the rest api GET for a single subject with no configs.
+ */
+ @Test
+ public void testEmptyConfig() {
+ final WebResource rs = resource();
+ final String response = rs.path("network/configuration/devices").get(String.class);
+
+ assertThat(response, is("{}"));
+ }
+
+ /**
+ * Tests the result of the rest api GET for a single subject that
+ * is undefined.
+ */
+ @Test
+ public void testNonExistentConfig() {
+ final WebResource rs = resource();
+
+ try {
+ final String response = rs.path("network/configuration/nosuchkey").get(String.class);
+ fail("GET of non-existent key does not produce an exception " + response);
+ } catch (UniformInterfaceException e) {
+ assertThat(e.getResponse().getStatus(), is(HttpURLConnection.HTTP_NOT_FOUND));
+ }
+ }
+
+ private void checkBasicAttributes(JsonValue basic) {
+ Assert.assertThat(basic.asObject().get("field1").asString(), is("v1"));
+ Assert.assertThat(basic.asObject().get("field2").asString(), is("v2"));
+ }
+
+ /**
+ * Tests the result of the rest api GET when there is a config.
+ */
+ @Test
+
+ public void testConfigs() {
+ setUpConfigData();
+ final WebResource rs = resource();
+ final String response = rs.path("network/configuration").get(String.class);
+
+ final JsonObject result = JsonObject.readFrom(response);
+ Assert.assertThat(result, notNullValue());
+
+ Assert.assertThat(result.names(), hasSize(2));
+
+ JsonValue devices = result.get("devices");
+ Assert.assertThat(devices, notNullValue());
+
+ JsonValue device1 = devices.asObject().get("device1");
+ Assert.assertThat(device1, notNullValue());
+
+ JsonValue basic = device1.asObject().get("basic");
+ Assert.assertThat(basic, notNullValue());
+
+ checkBasicAttributes(basic);
+ }
+
+ /**
+ * Tests the result of the rest api single subject key GET when
+ * there is a config.
+ */
+ @Test
+ public void testSingleSubjectKeyConfig() {
+ setUpConfigData();
+ final WebResource rs = resource();
+ final String response = rs.path("network/configuration/devices").get(String.class);
+
+ final JsonObject result = JsonObject.readFrom(response);
+ Assert.assertThat(result, notNullValue());
+
+ Assert.assertThat(result.names(), hasSize(1));
+
+ JsonValue device1 = result.asObject().get("device1");
+ Assert.assertThat(device1, notNullValue());
+
+ JsonValue basic = device1.asObject().get("basic");
+ Assert.assertThat(basic, notNullValue());
+
+ checkBasicAttributes(basic);
+ }
+
+ /**
+ * Tests the result of the rest api single subject GET when
+ * there is a config.
+ */
+ @Test
+ public void testSingleSubjectConfig() {
+ setUpConfigData();
+ final WebResource rs = resource();
+ final String response =
+ rs.path("network/configuration/devices/device1")
+ .get(String.class);
+
+ final JsonObject result = JsonObject.readFrom(response);
+ Assert.assertThat(result, notNullValue());
+
+ Assert.assertThat(result.names(), hasSize(1));
+
+ JsonValue basic = result.asObject().get("basic");
+ Assert.assertThat(basic, notNullValue());
+
+ checkBasicAttributes(basic);
+ }
+
+ /**
+ * Tests the result of the rest api single subject single config GET when
+ * there is a config.
+ */
+ @Test
+ public void testSingleSubjectSingleConfig() {
+ setUpConfigData();
+ final WebResource rs = resource();
+ final String response =
+ rs.path("network/configuration/devices/device1/basic")
+ .get(String.class);
+
+ final JsonObject result = JsonObject.readFrom(response);
+ Assert.assertThat(result, notNullValue());
+
+ Assert.assertThat(result.names(), hasSize(2));
+
+ checkBasicAttributes(result);
+ }
+
+ // TODO: Add test for DELETE and POST
+}