X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2Ftest%2FXmlProvidersTest.java;h=7b63c5fd9422e5bb3abd0060be1ba57dc9643389;hb=refs%2Fchanges%2F21%2F2921%2F1;hp=baf226712ffbb255550948c3c5f36160d4c30262;hpb=5da475147b19f8d9e601813da1e356f2c677d131;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java index baf226712f..7b63c5fd94 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/XmlProvidersTest.java @@ -1,22 +1,19 @@ package org.opendaylight.controller.sal.restconf.impl.test; -import static org.mockito.Mockito.*; -import static org.junit.Assert.*; +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.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.net.URLEncoder; -import java.util.Collection; import java.util.List; import java.util.Set; -import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.logging.Level; import java.util.logging.LogRecord; @@ -24,11 +21,7 @@ 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 javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.TestProperties; @@ -43,15 +36,11 @@ import org.opendaylight.controller.sal.restconf.impl.BrokerFacade; import org.opendaylight.controller.sal.restconf.impl.ControllerContext; import org.opendaylight.controller.sal.restconf.impl.MediaTypes; import org.opendaylight.controller.sal.restconf.impl.RestconfImpl; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.RpcError; 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 org.w3c.dom.Document; -import org.xml.sax.SAXException; import com.google.common.base.Charsets; @@ -60,15 +49,11 @@ public class XmlProvidersTest extends JerseyTest { private static ControllerContext controllerContext; private static BrokerFacade brokerFacade; private static RestconfImpl restconfImpl; + private static final MediaType MEDIA_TYPE = new MediaType("application", "vnd.yang.api+xml"); @BeforeClass - public static void init() { - Set allModules = null; - try { - allModules = TestUtils.loadModules(RestconfImplTest.class.getResource("/full-versions/yangs").getPath()); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } + 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); @@ -87,96 +72,100 @@ public class XmlProvidersTest extends JerseyTest { } @Test - public void testStructuredDataToXmlProvider() throws FileNotFoundException { - URI uri = null; - try { - uri = new URI("/datastore/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); - } catch (UnsupportedEncodingException | URISyntaxException e) { - e.printStackTrace(); - } + public void testStructuredDataToXmlProvider() throws FileNotFoundException, UnsupportedEncodingException { + String uri = createUri("/datastore/", "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.toASCIIString()).request(MediaTypes.API+RestconfService.XML).get(); + Response response = target(uri).request(MEDIA_TYPE).get(); assertEquals(200, response.getStatus()); } @Test - public void testXmlToCompositeNodeProvider() throws ParserConfigurationException, SAXException, IOException { - URI uri = null; - try { - uri = new URI("/config/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); - } catch (UnsupportedEncodingException | URISyntaxException e) { - e.printStackTrace(); - } - InputStream xmlStream = RestconfImplTest.class.getResourceAsStream("/parts/ietf-interfaces_interfaces.xml"); - final CompositeNode loadedCompositeNode = TestUtils.loadCompositeNode(xmlStream); - when(brokerFacade.commitConfigurationDataPut(any(InstanceIdentifier.class), any(CompositeNode.class))).thenReturn(new Future>() { - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - return false; - } - @Override - public boolean isCancelled() { - return false; - } - @Override - public boolean isDone() { - return false; - } - @Override - public RpcResult get() throws InterruptedException, ExecutionException { - return null; - } - @Override - public RpcResult get(long timeout, TimeUnit unit) throws InterruptedException, - ExecutionException, TimeoutException { - return null; - } - }); + public void testBadFormatXmlToCompositeNodeProvider() throws UnsupportedEncodingException, URISyntaxException { + String uri = createUri("/operations/", "ietf-interfaces:interfaces/interface/eth0"); - DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); - xmlStream = RestconfImplTest.class.getResourceAsStream("/parts/ietf-interfaces_interfaces.xml"); - Document doc = docBuilder.parse(xmlStream); + Response response = target(uri).request(MediaTypes.API + RestconfService.XML).post( + Entity.entity("", MEDIA_TYPE)); + assertEquals(400, response.getStatus()); - Response response = target(uri.toASCIIString()).request(MediaTypes.API+RestconfService.XML).post(Entity.entity(TestUtils.getDocumentInPrintableForm(doc), new MediaType("application","vnd.yang.api+xml"))); - assertEquals(204, response.getStatus()); + response = target(uri).request(MediaTypes.API + RestconfService.XML).post( + Entity.entity("", MEDIA_TYPE)); + assertEquals(400, response.getStatus()); } @Test - public void testXmlToCompositeNodeProviderExceptions() { - URI uri = null; - try { - uri = new URI("/operations/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); - } catch (UnsupportedEncodingException | URISyntaxException e) { - e.printStackTrace(); - } + public void testXmlToCompositeNode404NotFound() throws UnsupportedEncodingException, URISyntaxException { + String uri = createUri("/datastore/", "ietf-interfaces:interfaces/interface/eth0"); - Response response = target(uri.toASCIIString()).request(MediaTypes.API + RestconfService.XML).post( - Entity.entity("", new MediaType("application", "vnd.yang.api+xml"))); - assertEquals(400, response.getStatus()); + when(brokerFacade.readOperationalData(any(InstanceIdentifier.class))).thenReturn(null); - response = target(uri.toASCIIString()).request(MediaTypes.API + RestconfService.XML).post( - Entity.entity("", new MediaType("application", "vnd.yang.api+xml"))); - assertEquals(400, response.getStatus()); + Response response = target(uri).request(MediaTypes.API+RestconfService.XML).get(); + assertEquals(404, response.getStatus()); } @Test - public void testXmlToCompositeNode404NotFound() { - URI uri = null; - try { - uri = new URI("/datastore/" + URLEncoder.encode("ietf-interfaces:interfaces/interface/eth0", Charsets.US_ASCII.name()).toString()); - } catch (UnsupportedEncodingException | URISyntaxException e) { - e.printStackTrace(); - } + public void testRpcResultCommitedToStatusCodes() throws UnsupportedEncodingException { + InputStream xmlStream = RestconfImplTest.class.getResourceAsStream("/parts/ietf-interfaces_interfaces.xml"); + String xml = TestUtils.getDocumentInPrintableForm(TestUtils.loadDocumentFrom(xmlStream)); + Entity entity = Entity.entity(xml, MEDIA_TYPE); + RpcResult rpcResult = DummyRpcResult.builder().result(TransactionStatus.COMMITED).build(); + Future> dummyFuture = DummyFuture.builder().rpcResult(rpcResult).build(); + when(brokerFacade.commitOperationalDataPut(any(InstanceIdentifier.class), any(CompositeNode.class))).thenReturn(dummyFuture); + when(brokerFacade.commitConfigurationDataPut(any(InstanceIdentifier.class), any(CompositeNode.class))).thenReturn(dummyFuture); - when(brokerFacade.readOperationalData(any(InstanceIdentifier.class))).thenReturn(null); + String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/eth0"); + Response response = target(uri).request(MEDIA_TYPE).put(entity); + assertEquals(200, response.getStatus()); + response = target(uri).request(MEDIA_TYPE).post(entity); + assertEquals(204, response.getStatus()); - Response response = target(uri.toASCIIString()).request(MediaTypes.API+RestconfService.XML).get(); - assertEquals(404, response.getStatus()); + uri = createUri("/operational/", "ietf-interfaces:interfaces/interface/eth0"); + response = target(uri).request(MEDIA_TYPE).put(entity); + assertEquals(200, response.getStatus()); + response = target(uri).request(MEDIA_TYPE).post(entity); + assertEquals(204, response.getStatus()); + + uri = createUri("/datastore/", "ietf-interfaces:interfaces/interface/eth0"); + response = target(uri).request(MEDIA_TYPE).put(entity); + assertEquals(200, response.getStatus()); + response = target(uri).request(MEDIA_TYPE).post(entity); + assertEquals(204, response.getStatus()); + } + + @Test + public void testRpcResultOtherToStatusCodes() throws UnsupportedEncodingException { + InputStream xmlStream = RestconfImplTest.class.getResourceAsStream("/parts/ietf-interfaces_interfaces.xml"); + String xml = TestUtils.getDocumentInPrintableForm(TestUtils.loadDocumentFrom(xmlStream)); + Entity entity = Entity.entity(xml, MEDIA_TYPE); + RpcResult rpcResult = DummyRpcResult.builder().result(TransactionStatus.FAILED).build(); + Future> dummyFuture = DummyFuture.builder().rpcResult(rpcResult).build(); + when(brokerFacade.commitOperationalDataPut(any(InstanceIdentifier.class), any(CompositeNode.class))).thenReturn(dummyFuture); + when(brokerFacade.commitConfigurationDataPut(any(InstanceIdentifier.class), any(CompositeNode.class))).thenReturn(dummyFuture); + + String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/eth0"); + Response response = target(uri).request(MEDIA_TYPE).put(entity); + assertEquals(500, response.getStatus()); + response = target(uri).request(MEDIA_TYPE).post(entity); + assertEquals(500, response.getStatus()); + + uri = createUri("/operational/", "ietf-interfaces:interfaces/interface/eth0"); + response = target(uri).request(MEDIA_TYPE).put(entity); + assertEquals(500, response.getStatus()); + response = target(uri).request(MEDIA_TYPE).post(entity); + assertEquals(500, response.getStatus()); + + uri = createUri("/datastore/", "ietf-interfaces:interfaces/interface/eth0"); + response = target(uri).request(MEDIA_TYPE).put(entity); + assertEquals(500, response.getStatus()); + response = target(uri).request(MEDIA_TYPE).post(entity); + assertEquals(500, 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