Moving from a searching a string for capabilities to a Set.

ONOS-5947 ONOS-5948

Change-Id: Icac65263691e624dc74cfbc03c27e3974b935da2
diff --git a/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/NetconfSessionImplTest.java b/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/NetconfSessionImplTest.java
index 2dcb14f..86822a6 100644
--- a/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/NetconfSessionImplTest.java
+++ b/protocols/netconf/ctl/src/test/java/org/onosproject/netconf/ctl/NetconfSessionImplTest.java
@@ -15,7 +15,9 @@
  */
 package org.onosproject.netconf.ctl;
 
+import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.junit.Assert.assertFalse;
@@ -24,6 +26,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.Callable;
@@ -52,6 +55,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
+
 /**
  * Unit tests for NetconfSession.
  *
@@ -86,6 +91,20 @@
                     + "</edit-config>\n"
                     + "</rpc>]]>]]>";
 
+    static final List<String> DEFAULT_CAPABILITIES = ImmutableList.<String>builder()
+            .add("urn:ietf:params:netconf:base:1.0")
+            .add("urn:ietf:params:netconf:base:1.1")
+            .add("urn:ietf:params:netconf:capability:writable-running:1.0")
+            .add("urn:ietf:params:netconf:capability:candidate:1.0")
+            .add("urn:ietf:params:netconf:capability:startup:1.0")
+            .add("urn:ietf:params:netconf:capability:rollback-on-error:1.0")
+            .add("urn:ietf:params:netconf:capability:interleave:1.0")
+            .add("urn:ietf:params:netconf:capability:notification:1.0")
+            .add("urn:ietf:params:netconf:capability:validate:1.0")
+            .add("urn:ietf:params:netconf:capability:validate:1.1")
+            .build();
+
+
     private static NetconfSession session1;
     private static NetconfSession session2;
     private static SshServer sshServerNetconf;
@@ -93,7 +112,7 @@
     @BeforeClass
     public static void setUp() throws Exception {
         sshServerNetconf = SshServer.setUpDefaultServer();
-        List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
+        List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<>();
         userAuthFactories.add(new UserAuthPassword.Factory());
         sshServerNetconf.setUserAuthFactories(userAuthFactories);
         sshServerNetconf.setPasswordAuthenticator(
@@ -120,11 +139,13 @@
         log.info("Started NETCONF Session {} with test SSHD server in Unit Test", session1.getSessionId());
         assertTrue("Incorrect sessionId", !session1.getSessionId().equalsIgnoreCase("-1"));
         assertTrue("Incorrect sessionId", !session1.getSessionId().equalsIgnoreCase("0"));
+        assertThat(session1.getDeviceCapabilitiesSet(), containsInAnyOrder(DEFAULT_CAPABILITIES.toArray()));
 
         session2 = new NetconfSessionImpl(deviceInfo);
         log.info("Started NETCONF Session {} with test SSHD server in Unit Test", session2.getSessionId());
         assertTrue("Incorrect sessionId", !session2.getSessionId().equalsIgnoreCase("-1"));
         assertTrue("Incorrect sessionId", !session2.getSessionId().equalsIgnoreCase("0"));
+        assertThat(session2.getDeviceCapabilitiesSet(), containsInAnyOrder(DEFAULT_CAPABILITIES.toArray()));
     }
 
     @AfterClass
@@ -262,8 +283,8 @@
         NCCopyConfigCallable testCopyConfig1 = new NCCopyConfigCallable(session1, RUNNING, "candidate");
         NCCopyConfigCallable testCopyConfig2 = new NCCopyConfigCallable(session1, RUNNING, "startup");
 
-        FutureTask<Boolean> futureCopyConfig1 = new FutureTask<Boolean>(testCopyConfig1);
-        FutureTask<Boolean> futureCopyConfig2 = new FutureTask<Boolean>(testCopyConfig2);
+        FutureTask<Boolean> futureCopyConfig1 = new FutureTask<>(testCopyConfig1);
+        FutureTask<Boolean> futureCopyConfig2 = new FutureTask<>(testCopyConfig2);
 
         ExecutorService executor = Executors.newFixedThreadPool(2);
         log.info("Starting concurrent execution of copy-config through same session");
@@ -288,8 +309,8 @@
         NCCopyConfigCallable testCopySession1 = new NCCopyConfigCallable(session1, RUNNING, "candidate");
         NCCopyConfigCallable testCopySession2 = new NCCopyConfigCallable(session2, RUNNING, "candidate");
 
-        FutureTask<Boolean> futureCopySession1 = new FutureTask<Boolean>(testCopySession1);
-        FutureTask<Boolean> futureCopySession2 = new FutureTask<Boolean>(testCopySession2);
+        FutureTask<Boolean> futureCopySession1 = new FutureTask<>(testCopySession1);
+        FutureTask<Boolean> futureCopySession2 = new FutureTask<>(testCopySession2);
 
         ExecutorService executor = Executors.newFixedThreadPool(2);
         log.info("Starting concurrent execution of copy-config through 2 different sessions");
@@ -311,20 +332,17 @@
 
 
     public static String getTestHelloReply(Optional<Long> sessionId) {
+        return getTestHelloReply(DEFAULT_CAPABILITIES, sessionId);
+    }
+
+    public static String getTestHelloReply(Collection<String> capabilities, Optional<Long> sessionId) {
         StringBuffer sb = new StringBuffer();
 
         sb.append("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">");
         sb.append("<capabilities>");
-        sb.append("<capability>urn:ietf:params:netconf:base:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:base:1.1</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:startup:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:interleave:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:notification:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:validate:1.0</capability>");
-        sb.append("<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>");
+        capabilities.forEach(capability -> {
+            sb.append("<capability>").append(capability).append("</capability>");
+        });
         sb.append("</capabilities>");
         if (sessionId.isPresent()) {
             sb.append("<session-id>");