X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2FNetconfMappingTest.java;h=388a131a5611642d58cb046d45b1b6da4fe9a967;hb=1f43b99185e388e435f68bd494d91936f61cf3cf;hp=f95e13dd01180e3ce91c78d78eab14045c1d12b7;hpb=94f5e0bdeae5ff0cc0a601d243b2912c6117f24c;p=controller.git diff --git a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java index f95e13dd01..388a131a56 100644 --- a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java +++ b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java @@ -9,6 +9,8 @@ package org.opendaylight.controller.netconf.confignetconfconnector; import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -17,6 +19,7 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; @@ -47,6 +50,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; import javax.management.ObjectName; @@ -57,7 +62,6 @@ import org.custommonkey.xmlunit.NodeTestException; import org.custommonkey.xmlunit.NodeTester; import org.custommonkey.xmlunit.XMLAssert; import org.custommonkey.xmlunit.XMLUnit; -import org.hamcrest.CoreMatchers; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -85,6 +89,9 @@ import org.opendaylight.controller.config.yang.test.impl.Peers; import org.opendaylight.controller.config.yang.test.impl.TestImplModuleFactory; import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorType; import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.confignetconfconnector.operations.Commit; import org.opendaylight.controller.netconf.confignetconfconnector.operations.DiscardChanges; @@ -215,7 +222,29 @@ public class NetconfMappingTest extends AbstractConfigTest { edit("netconfMessages/editConfig_identities.xml"); commit(); - getConfigRunning(); + Document configRunning = getConfigRunning(); + String asString = XmlUtil.toString(configRunning); + assertThat(asString, containsString("test-identity2")); + assertThat(asString, containsString("test-identity1")); + assertEquals(2, countSubstringOccurence(asString, "")); + + edit("netconfMessages/editConfig_identities_inner_replace.xml"); + commit(); + configRunning = getConfigRunning(); + asString = XmlUtil.toString(configRunning); + // test-identity1 was removed by replace + assertThat(asString, not(containsString("test-identity2"))); + // now only 1 identities entry is present + assertEquals(1, countSubstringOccurence(asString, "")); + } + + private int countSubstringOccurence(final String string, final String substring) { + final Matcher matches = Pattern.compile(substring).matcher(string); + int count = 0; + while (matches.find()) { + count++; + } + return count; } @Override @@ -256,6 +285,21 @@ public class NetconfMappingTest extends AbstractConfigTest { "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", "ref_from_code_to_instance-from-code_1", "ref_dep_user_another")); + edit("netconfMessages/editConfig_removeServiceNameOnTest.xml"); + config = getConfigCandidate(); + assertCorrectServiceNames(config, Sets.newHashSet("user_to_instance_from_code", "ref_dep_user", + "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", + "ref_from_code_to_instance-from-code_1")); + + try { + edit("netconfMessages/editConfig_removeServiceNameOnTest.xml"); + fail("Should've failed, non-existing service instance"); + } catch (NetconfDocumentedException e) { + assertEquals(e.getErrorSeverity(), ErrorSeverity.error); + assertEquals(e.getErrorTag(), ErrorTag.operation_failed); + assertEquals(e.getErrorType(), ErrorType.application); + } + edit("netconfMessages/editConfig_replace_default.xml"); config = getConfigCandidate(); assertCorrectServiceNames(config, Collections.emptySet()); @@ -594,7 +638,32 @@ public class NetconfMappingTest extends AbstractConfigTest { @Test public void testEx2() throws Exception { + //check abort before tx creation assertContainsElement(discard(), readXmlToElement("")); + + //check abort after tx creation + edit("netconfMessages/editConfig.xml"); + assertContainsElement(discard(), readXmlToElement("")); + } + + @Test + public void testFailedDiscardChangesAbort() throws Exception { + + TransactionProvider mockedTxProvider = mock(TransactionProvider.class); + doThrow(new RuntimeException("Mocked runtime exception, Abort has to fail")).when(mockedTxProvider).abortTransaction(); + doReturn(Optional.of(ObjectName.getInstance("dummyDomain", "DummyKey", "DummyValue"))).when(mockedTxProvider).getTransaction(); + + DiscardChanges discardOp = new DiscardChanges(mockedTxProvider, configRegistryClient, NETCONF_SESSION_ID); + + try { + executeOp(discardOp, "netconfMessages/discardChanges.xml"); + fail("Should've failed, abort on mocked is supposed to throw RuntimeException"); + } catch (NetconfDocumentedException e) { + assertTrue(e.getErrorTag() == ErrorTag.operation_failed); + assertTrue(e.getErrorSeverity() == ErrorSeverity.error); + assertTrue(e.getErrorType() == ErrorType.application); + } + } private Document discard() throws ParserConfigurationException, SAXException, IOException, NetconfDocumentedException { @@ -623,7 +692,7 @@ public class NetconfMappingTest extends AbstractConfigTest { } private void assertContainsString(String string, String substring) { - assertThat(string, CoreMatchers.containsString(substring)); + assertThat(string, containsString(substring)); } private void checkEnum(final Document response) throws Exception {