[ONOS-3253/3144] Insert support for Netconf device configuration, set and get controllers commands

Change-Id: I99188aa18207b9d0b0d935b9f9e61e547f4ddab1
diff --git a/drivers/src/test/java/org/onosproject/driver/netconf/XmlConfigParserTest.java b/drivers/src/test/java/org/onosproject/driver/netconf/XmlConfigParserTest.java
new file mode 100644
index 0000000..d8b695c
--- /dev/null
+++ b/drivers/src/test/java/org/onosproject/driver/netconf/XmlConfigParserTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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.driver.netconf;
+
+import org.junit.Test;
+import org.onlab.packet.IpAddress;
+import org.onosproject.net.behaviour.ControllerInfo;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.assertTrue;
+import static org.onosproject.driver.netconf.XmlConfigParser.*;
+
+//import static org.junit.Assert.*;
+
+/**
+ * Test the XML document Parsing for netconf configuration.
+ */
+public class XmlConfigParserTest {
+
+
+    @Test
+    public void basics() throws IOException {
+        InputStream stream = getClass().getResourceAsStream("testConfig.xml");
+        List<ControllerInfo> controllers = parseStreamControllers(loadXml(stream));
+        assertTrue(controllers.get(0).equals(new ControllerInfo(
+                IpAddress.valueOf("10.128.12.1"), 6653, "tcp")));
+        assertTrue(controllers.get(1).equals(new ControllerInfo(
+                IpAddress.valueOf("10.128.12.2"), 6654, "tcp")));
+
+    }
+
+    @Test
+    public void switchId() {
+        InputStream stream = getClass().getResourceAsStream("testConfig.xml");
+        String switchId = parseSwitchId(loadXml(stream));
+        assertTrue(switchId.equals("ofc-bridge"));
+    }
+
+    @Test
+    public void capableSwitchId() {
+        InputStream stream = getClass().getResourceAsStream("testConfig.xml");
+        String capableSwitchId = parseCapableSwitchId(loadXml(stream));
+        assertTrue(capableSwitchId.equals("openvswitch"));
+    }
+
+    @Test
+    public void controllersConfig() {
+        InputStream streamOrig = getClass().getResourceAsStream("testConfig.xml");
+        InputStream streamCFG = XmlConfigParser.class
+                .getResourceAsStream("controllers.xml");
+        String config = createControllersConfig(loadXml(streamCFG),
+                                                loadXml(streamOrig), "running", "merge",
+                                                "create", new ArrayList<>(Arrays.asList(
+                        new ControllerInfo(IpAddress.valueOf("192.168.1.1"),
+                                           5000, "tcp"))));
+        assertTrue(config.contains("192.168.1.1"));
+        assertTrue(config.contains("tcp"));
+        assertTrue(config.contains("5000"));
+
+    }
+}
\ No newline at end of file
diff --git a/drivers/src/test/resources/org/onosproject/driver/netconf/testConfig.xml b/drivers/src/test/resources/org/onosproject/driver/netconf/testConfig.xml
new file mode 100644
index 0000000..88d1a3a
--- /dev/null
+++ b/drivers/src/test/resources/org/onosproject/driver/netconf/testConfig.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7">
+    <data>
+        <capable-switch xmlns="urn:onf:config:yang">
+            <id>openvswitch</id>
+            <resources>
+                <port>
+                    <name>ofc-bridge</name>
+                    <requested-number>666</requested-number>
+                    <configuration>
+                        <admin-state>down</admin-state>
+                        <no-receive>false</no-receive>
+                        <no-forward>false</no-forward>
+                        <no-packet-in>false</no-packet-in>
+                    </configuration>
+                </port>
+            </resources>
+            <logical-switches>
+                <switch>
+                    <id>ofc-bridge</id>
+                    <datapath-id>00:01:02:03:04:05:06:07</datapath-id>
+                    <lost-connection-behavior>failSecureMode</lost-connection-behavior>
+                    <controllers>
+                        <controller>
+                            <id>(null)</id>
+                            <ip-address>10.128.12.1</ip-address>
+                            <port>6653</port>
+                            <protocol>tcp</protocol>
+                        </controller>
+                        <controller>
+                            <id>(null)</id>
+                            <ip-address>10.128.12.2</ip-address>
+                            <port>6654</port>
+                            <protocol>tcp</protocol>
+                        </controller>
+                    </controllers>
+                    <resources>
+                        <port>ofc-bridge</port>
+                    </resources>
+                </switch>
+            </logical-switches>
+        </capable-switch>
+    </data>
+</rpc-reply>
\ No newline at end of file