From 76dc892491948adae5e5e62cf94448967e8d865b Mon Sep 17 00:00:00 2001 From: Ashlee Young Date: Sun, 6 Dec 2015 07:15:03 -0800 Subject: Fixes bad POM file with ONOS commit 8c68536972f63069c263635c9d9f4f31d7f3e9a2 Change-Id: I7adb5a2d3738d53dbc41db7577768b0e7ced5450 Signed-off-by: Ashlee Young --- .../resources/NetworkConfigWebResourceTest.java | 352 +++++++++++++++++++++ 1 file changed, 352 insertions(+) create mode 100644 framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java (limited to 'framework/src/onos/web/api/src/test/java/org/onosproject/rest/resources/NetworkConfigWebResourceTest.java') 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 { + + 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 mockDevicesSubjectFactory = + new SubjectFactory(Device.class, "devices") { + @Override + public Device createSubject(String subjectKey) { + DefaultDevice device = createMock(DefaultDevice.class); + replay(device); + return device; + } + + @Override + public Class subjectClass() { + return Device.class; + } + }; + + /** + * Mock config factory for links. + */ + private final SubjectFactory mockLinksSubjectFactory = + new SubjectFactory(Link.class, "links") { + @Override + public Link createSubject(String subjectKey) { + return null; + } + + @Override + public Class 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 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 Set getSubjects(Class subjectClass) { + if (subjectClass == Device.class) { + return devicesSubjects; + } else if (subjectClass == Link.class) { + return linksSubjects; + } + return null; + } + + @SuppressWarnings("unchecked") + @Override + public Set> 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 > C getConfig(S subject, Class configClass) { + + if (configClass == MockDeviceConfig.class) { + return (C) devicesConfigs.toArray()[0]; + } + return null; + } + + @Override + public Class 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 +} -- cgit 1.2.3-korg