From 48a7e914e227d70d947ed621defbb45bc45de8e8 Mon Sep 17 00:00:00 2001 From: Ladislav Borak Date: Mon, 16 Dec 2013 15:39:10 +0100 Subject: [PATCH] Added tests for reading: - operational data - configuration data Change-Id: I8d771ac061d0d7cc5c4187133e2bf0a3ddb87252 Signed-off-by: Ladislav Borak --- .../impl/test/ReadConfAndOperDataTest.java | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ReadConfAndOperDataTest.java diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ReadConfAndOperDataTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ReadConfAndOperDataTest.java new file mode 100644 index 0000000000..bc77430aea --- /dev/null +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/ReadConfAndOperDataTest.java @@ -0,0 +1,125 @@ +package org.opendaylight.controller.sal.restconf.impl.test; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URLEncoder; +import java.util.List; +import java.util.Set; +import java.util.concurrent.Future; +import java.util.logging.Level; +import java.util.logging.LogRecord; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.glassfish.jersey.test.TestProperties; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.opendaylight.controller.md.sal.common.api.TransactionStatus; +import org.opendaylight.controller.sal.rest.impl.StructuredDataToXmlProvider; +import org.opendaylight.controller.sal.rest.impl.XmlToCompositeNodeProvider; +import org.opendaylight.controller.sal.restconf.impl.BrokerFacade; +import org.opendaylight.controller.sal.restconf.impl.ControllerContext; +import org.opendaylight.controller.sal.restconf.impl.RestconfImpl; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.data.api.CompositeNode; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +import com.google.common.base.Charsets; + +public class ReadConfAndOperDataTest extends JerseyTest { + + private static ControllerContext controllerContext; + private static BrokerFacade brokerFacade; + private static RestconfImpl restconfImpl; + private static final MediaType MEDIA_TYPE_DRAFT02 = new MediaType("application", "yang.data+xml"); + + @BeforeClass + public static void init() throws FileNotFoundException { + Set allModules = TestUtils.loadModules(RestconfImplTest.class.getResource("/full-versions/yangs") + .getPath()); + SchemaContext schemaContext = TestUtils.loadSchemaContext(allModules); + controllerContext = ControllerContext.getInstance(); + controllerContext.setSchemas(schemaContext); + brokerFacade = mock(BrokerFacade.class); + restconfImpl = RestconfImpl.getInstance(); + restconfImpl.setBroker(brokerFacade); + restconfImpl.setControllerContext(controllerContext); + } + + @Before + public void logs() { + List loggedRecords = getLoggedRecords(); + for (LogRecord l : loggedRecords) { + System.out.println(l.getMessage()); + } + } + + @Test + public void testReadConfigurationData() throws UnsupportedEncodingException, FileNotFoundException { + + String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/eth0"); + + InputStream xmlStream = RestconfImplTest.class.getResourceAsStream("/parts/ietf-interfaces_interfaces.xml"); + CompositeNode loadedCompositeNode = TestUtils.loadCompositeNode(xmlStream); + when(brokerFacade.readConfigurationData(any(InstanceIdentifier.class))).thenReturn(loadedCompositeNode); + + Response response = target(uri).request(MEDIA_TYPE_DRAFT02).get(); + assertEquals(200, response.getStatus()); + + uri = createUri("/config/", "ietf-interfaces:interfaces/interface/example"); + when(brokerFacade.readConfigurationData(any(InstanceIdentifier.class))).thenReturn(null); + + response = target(uri).request(MEDIA_TYPE_DRAFT02).get(); + assertEquals(404, response.getStatus()); + } + + @Test + public void testReadOperationalData() throws UnsupportedEncodingException, FileNotFoundException { + String uri = createUri("/operational/", "ietf-interfaces:interfaces/interface/eth0"); + + InputStream xmlStream = RestconfImplTest.class.getResourceAsStream("/parts/ietf-interfaces_interfaces.xml"); + CompositeNode loadedCompositeNode = TestUtils.loadCompositeNode(xmlStream); + when(brokerFacade.readOperationalData(any(InstanceIdentifier.class))).thenReturn(loadedCompositeNode); + + Response response = target(uri).request(MEDIA_TYPE_DRAFT02).get(); + assertEquals(200, response.getStatus()); + + uri = createUri("/config/", "ietf-interfaces:interfaces/interface/example"); + when(brokerFacade.readConfigurationData(any(InstanceIdentifier.class))).thenReturn(null); + + response = target(uri).request(MEDIA_TYPE_DRAFT02).get(); + assertEquals(404, response.getStatus()); + } + + private String createUri(String prefix, String encodedPart) throws UnsupportedEncodingException { + return URI.create(prefix + URLEncoder.encode(encodedPart, Charsets.US_ASCII.name()).toString()).toASCIIString(); + } + + @Override + protected Application configure() { + enable(TestProperties.LOG_TRAFFIC); + enable(TestProperties.DUMP_ENTITY); + enable(TestProperties.RECORD_LOG_LEVEL); + set(TestProperties.RECORD_LOG_LEVEL, Level.ALL.intValue()); + + ResourceConfig resourceConfig = new ResourceConfig(); + resourceConfig = resourceConfig.registerInstances(restconfImpl, StructuredDataToXmlProvider.INSTANCE, + XmlToCompositeNodeProvider.INSTANCE); + return resourceConfig; + } +} -- 2.36.6