X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2FNetconfMappingTest.java;h=c78c80fe2bb849b97650061b87ab038f9d52321f;hp=e1ffcdddffc679e33ccd823322ba2dce8cfdf199;hb=f783b9873b0efedd5f757ed7300f4671c0e77bdd;hpb=919145b1bf7d68e436efa9b22c174965005a174a;ds=sidebyside
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 e1ffcdddff..c78c80fe2b 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;
@@ -26,10 +28,13 @@ import static org.opendaylight.controller.netconf.util.xml.XmlUtil.readXmlToElem
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import io.netty.channel.Channel;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
@@ -44,6 +49,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;
@@ -54,7 +61,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;
@@ -91,15 +97,19 @@ import org.opendaylight.controller.netconf.confignetconfconnector.operations.edi
import org.opendaylight.controller.netconf.confignetconfconnector.operations.get.Get;
import org.opendaylight.controller.netconf.confignetconfconnector.operations.getconfig.GetConfig;
import org.opendaylight.controller.netconf.confignetconfconnector.operations.runtimerpc.RuntimeRpc;
+import org.opendaylight.controller.netconf.confignetconfconnector.osgi.EnumResolver;
import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreContext;
import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreService;
import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
+import org.opendaylight.controller.netconf.impl.NetconfServerSession;
+import org.opendaylight.controller.netconf.impl.NetconfServerSessionListener;
import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultCloseSession;
import org.opendaylight.controller.netconf.impl.osgi.AggregatedNetconfOperationServiceFactory;
import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouter;
import org.opendaylight.controller.netconf.mapping.api.HandlingPriority;
import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
import org.opendaylight.controller.netconf.mapping.api.NetconfOperationChainedExecution;
+import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader;
import org.opendaylight.controller.netconf.util.messages.NetconfMessageUtil;
import org.opendaylight.controller.netconf.util.test.XmlFileLoader;
import org.opendaylight.controller.netconf.util.xml.XmlUtil;
@@ -158,6 +168,19 @@ public class NetconfMappingTest extends AbstractConfigTest {
doReturn(getMbes()).when(this.yangStoreSnapshot).getModuleMXBeanEntryMap();
doReturn(getModules()).when(this.yangStoreSnapshot).getModules();
+ doReturn(new EnumResolver() {
+ @Override
+ public String fromYang(final String enumType, final String enumYangValue) {
+ return Preconditions.checkNotNull(getEnumMapping().get(enumYangValue),
+ "Unable to resolve enum value %s, for enum %s with mappings %s", enumYangValue, enumType, getEnumMapping());
+ }
+
+ @Override
+ public String toYang(final String enumType, final String enumYangValue) {
+ return Preconditions.checkNotNull(getEnumMapping().inverse().get(enumYangValue),
+ "Unable to resolve enum value %s, for enum %s with mappings %s", enumYangValue, enumType, getEnumMapping().inverse());
+ }
+ }).when(this.yangStoreSnapshot).getEnumResolver();
this.factory = new NetconfTestImplModuleFactory();
this.factory2 = new DepTestImplModuleFactory();
@@ -195,7 +218,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
@@ -387,7 +432,14 @@ public class NetconfMappingTest extends AbstractConfigTest {
private void closeSession() throws NetconfDocumentedException, ParserConfigurationException, SAXException,
IOException {
+ final Channel channel = mock(Channel.class);
+ doReturn("channel").when(channel).toString();
+ final NetconfServerSessionListener listener = mock(NetconfServerSessionListener.class);
+ final NetconfServerSession session =
+ new NetconfServerSession(listener, channel, 1L,
+ NetconfHelloMessageAdditionalHeader.fromString("[netconf;10.12.0.102:48528;ssh;;;;;;]"));
DefaultCloseSession closeOp = new DefaultCloseSession(NETCONF_SESSION_ID, sessionCloseable);
+ closeOp.setNetconfSession(session);
executeOp(closeOp, "netconfMessages/closeSession.xml");
}
@@ -590,18 +642,18 @@ public class NetconfMappingTest extends AbstractConfigTest {
// Default
assertContainsElement(response, readXmlToElement("2"));
- assertContainsElement(response, readXmlToElement("TWO"));
+ assertContainsElement(response, readXmlToElement("two"));
// Default
- assertContainsElement(response, readXmlToElement("ONE"));
+ assertContainsElement(response, readXmlToElement("one"));
}
private void assertContainsString(String string, String substring) {
- assertThat(string, CoreMatchers.containsString(substring));
+ assertThat(string, containsString(substring));
}
private void checkEnum(final Document response) throws Exception {
- String expectedEnumContent = "TWO";
+ String expectedEnumContent = "two";
XMLAssert.assertXpathEvaluatesTo(expectedEnumContent,
getXpathForNetconfImplSubnode(INSTANCE_NAME,"extended-enum"),
@@ -646,11 +698,24 @@ public class NetconfMappingTest extends AbstractConfigTest {
return schemaContext ;
}
}, mockedContext);
+ final BindingRuntimeContext bindingRuntimeContext = mock(BindingRuntimeContext.class);
+ doReturn(getEnumMapping()).when(bindingRuntimeContext).getEnumMapping(any(Class.class));
+ yangStoreService.refresh(bindingRuntimeContext);
mBeanEntries.putAll(yangStoreService.getModuleMXBeanEntryMap());
return mBeanEntries;
}
+ private BiMap getEnumMapping() {
+ final HashBiMap enumBiMap = HashBiMap.create();
+ // Enum constants mapping from yang -> Java and back
+ enumBiMap.put("one", "One");
+ enumBiMap.put("two", "Two");
+ enumBiMap.put("version1", "Version1");
+ enumBiMap.put("version2", "Version2");
+ return enumBiMap;
+ }
+
private Set getModules() throws Exception {
SchemaContext resolveSchemaContext = getSchemaContext();
return resolveSchemaContext.getModules();