2 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.sal.connect.netconf.listener;
10 import static org.hamcrest.CoreMatchers.hasItem;
11 import static org.hamcrest.MatcherAssert.assertThat;
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertFalse;
14 import static org.junit.Assert.assertTrue;
16 import com.google.common.collect.Lists;
17 import java.util.List;
18 import org.junit.Test;
19 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
20 import org.opendaylight.yangtools.yang.common.QName;
22 public class NetconfSessionPreferencesTest {
25 public void testMerge() throws Exception {
26 final List<String> caps1 = Lists.newArrayList(
27 "namespace:1?module=module1&revision=2012-12-12",
28 "namespace:2?module=module2&revision=2012-12-12",
29 "urn:ietf:params:xml:ns:yang:"
30 + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04",
31 "urn:ietf:params:netconf:base:1.0",
32 "urn:ietf:params:netconf:capability:rollback-on-error:1.0"
34 final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
35 assertCaps(sessionCaps1, 2, 3);
37 final List<String> caps2 = Lists.newArrayList(
38 "namespace:3?module=module3&revision=2012-12-12",
39 "namespace:4?module=module4&revision=2012-12-12",
42 final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
43 assertCaps(sessionCaps2, 1, 2);
45 final NetconfSessionPreferences merged = sessionCaps1.addModuleCaps(sessionCaps2);
46 assertCaps(merged, 2, 2 + 1 /*Preserved monitoring*/ + 2 /*already present*/);
47 for (final QName qualifiedName : sessionCaps2.getModuleBasedCaps()) {
48 assertThat(merged.getModuleBasedCaps(), hasItem(qualifiedName));
50 assertThat(merged.getModuleBasedCaps(), hasItem(NetconfMessageTransformUtil.IETF_NETCONF_MONITORING));
52 assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:base:1.0"));
53 assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:rollback-on-error:1.0"));
57 public void testReplace() throws Exception {
58 final List<String> caps1 = Lists.newArrayList(
59 "namespace:1?module=module1&revision=2012-12-12",
60 "namespace:2?module=module2&revision=2012-12-12",
61 "urn:ietf:params:xml:ns:yang:"
62 + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04",
63 "urn:ietf:params:netconf:base:1.0",
64 "urn:ietf:params:netconf:capability:rollback-on-error:1.0"
66 final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
67 assertCaps(sessionCaps1, 2, 3);
69 final List<String> caps2 = Lists.newArrayList(
70 "namespace:3?module=module3&revision=2012-12-12",
71 "namespace:4?module=module4&revision=2012-12-12",
74 final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
75 assertCaps(sessionCaps2, 1, 2);
77 final NetconfSessionPreferences replaced = sessionCaps1.replaceModuleCaps(sessionCaps2);
78 assertCaps(replaced, 2, 2);
82 public void testNonModuleMerge() throws Exception {
83 final List<String> caps1 = Lists.newArrayList(
84 "namespace:1?module=module1&revision=2012-12-12",
85 "namespace:2?module=module2&revision=2012-12-12",
86 "urn:ietf:params:xml:ns:yang:"
87 + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04",
88 "urn:ietf:params:netconf:base:1.0",
89 "urn:ietf:params:netconf:capability:rollback-on-error:1.0",
90 "urn:ietf:params:netconf:capability:candidate:1.0"
92 final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
93 assertCaps(sessionCaps1, 3, 3);
94 assertTrue(sessionCaps1.isCandidateSupported());
96 final List<String> caps2 = Lists.newArrayList(
97 "namespace:3?module=module3&revision=2012-12-12",
98 "namespace:4?module=module4&revision=2012-12-12",
99 "urn:ietf:params:netconf:capability:writable-running:1.0",
100 "urn:ietf:params:netconf:capability:notification:1.0"
102 final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
103 assertCaps(sessionCaps2, 2, 2);
104 assertTrue(sessionCaps2.isRunningWritable());
106 final NetconfSessionPreferences merged = sessionCaps1.addNonModuleCaps(sessionCaps2);
108 assertCaps(merged, 3 + 2, 3);
109 for (final String capability : sessionCaps2.getNonModuleCaps()) {
110 assertThat(merged.getNonModuleCaps(), hasItem(capability));
113 assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:base:1.0"));
114 assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:rollback-on-error:1.0"));
115 assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:writable-running:1.0"));
116 assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:notification:1.0"));
118 assertTrue(merged.isCandidateSupported());
119 assertTrue(merged.isRunningWritable());
123 public void testNonmoduleReplace() throws Exception {
124 final List<String> caps1 = Lists.newArrayList(
125 "namespace:1?module=module1&revision=2012-12-12",
126 "namespace:2?module=module2&revision=2012-12-12",
127 "urn:ietf:params:xml:ns:yang:"
128 + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04",
129 "urn:ietf:params:netconf:base:1.0",
130 "urn:ietf:params:netconf:capability:rollback-on-error:1.0",
131 "urn:ietf:params:netconf:capability:candidate:1.0"
133 final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
134 assertCaps(sessionCaps1, 3, 3);
135 assertTrue(sessionCaps1.isCandidateSupported());
137 final List<String> caps2 = Lists.newArrayList(
138 "namespace:3?module=module3&revision=2012-12-12",
139 "namespace:4?module=module4&revision=2012-12-12",
140 "randomNonModuleCap",
141 "urn:ietf:params:netconf:capability:writable-running:1.0"
143 final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
144 assertCaps(sessionCaps2, 2, 2);
145 assertTrue(sessionCaps2.isRunningWritable());
147 final NetconfSessionPreferences replaced = sessionCaps1.replaceNonModuleCaps(sessionCaps2);
148 assertCaps(replaced, 2, 3);
149 assertFalse(replaced.isCandidateSupported());
150 assertTrue(replaced.isRunningWritable());
154 public void testCapabilityNoRevision() throws Exception {
155 final List<String> caps1 = Lists.newArrayList(
156 "namespace:2?module=module2",
157 "namespace:2?module=module2&revision=2012-12-12",
158 "namespace:2?module=module1&RANDOMSTRING;revision=2013-12-12",
159 // Revision parameter present, but no revision defined
160 "namespace:2?module=module4&RANDOMSTRING;revision=",
161 // This one should be ignored(same as first), since revision is in wrong format
162 "namespace:2?module=module2&RANDOMSTRING;revision=2013-12-12"
165 final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
166 assertCaps(sessionCaps1, 0, 4);
169 private static void assertCaps(final NetconfSessionPreferences sessionCaps1, final int nonModuleCaps,
170 final int moduleCaps) {
171 assertEquals(nonModuleCaps, sessionCaps1.getNonModuleCaps().size());
172 assertEquals(moduleCaps, sessionCaps1.getModuleBasedCaps().size());