Bug 8153: Enforce check-style rules for netconf - sal-netconf-connector
[netconf.git] / netconf / sal-netconf-connector / src / test / java / org / opendaylight / netconf / sal / connect / netconf / listener / NetconfSessionPreferencesTest.java
1 /*
2  * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.netconf.sal.connect.netconf.listener;
10
11 import static org.hamcrest.CoreMatchers.hasItem;
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertFalse;
14 import static org.junit.Assert.assertThat;
15 import static org.junit.Assert.assertTrue;
16
17 import com.google.common.collect.Lists;
18 import java.util.List;
19 import org.junit.Test;
20 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
21 import org.opendaylight.yangtools.yang.common.QName;
22
23 public class NetconfSessionPreferencesTest {
24
25     @Test
26     public void testMerge() throws Exception {
27         final List<String> caps1 = Lists.newArrayList(
28                 "namespace:1?module=module1&revision=2012-12-12",
29                 "namespace:2?module=module2&amp;revision=2012-12-12",
30                 "urn:ietf:params:xml:ns:yang:"
31                         + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;revision=2010-10-04",
32                 "urn:ietf:params:netconf:base:1.0",
33                 "urn:ietf:params:netconf:capability:rollback-on-error:1.0"
34         );
35         final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
36         assertCaps(sessionCaps1, 2, 3);
37
38         final List<String> caps2 = Lists.newArrayList(
39                 "namespace:3?module=module3&revision=2012-12-12",
40                 "namespace:4?module=module4&revision=2012-12-12",
41                 "randomNonModuleCap"
42         );
43         final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
44         assertCaps(sessionCaps2, 1, 2);
45
46         final NetconfSessionPreferences merged = sessionCaps1.addModuleCaps(sessionCaps2);
47         assertCaps(merged, 2, 2 + 1 /*Preserved monitoring*/ + 2 /*already present*/);
48         for (final QName qualifiedName : sessionCaps2.getModuleBasedCaps()) {
49             assertThat(merged.getModuleBasedCaps(), hasItem(qualifiedName));
50         }
51         assertThat(merged.getModuleBasedCaps(), hasItem(NetconfMessageTransformUtil.IETF_NETCONF_MONITORING));
52
53         assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:base:1.0"));
54         assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:rollback-on-error:1.0"));
55     }
56
57     @Test
58     public void testReplace() throws Exception {
59         final List<String> caps1 = Lists.newArrayList(
60                 "namespace:1?module=module1&revision=2012-12-12",
61                 "namespace:2?module=module2&amp;revision=2012-12-12",
62                 "urn:ietf:params:xml:ns:yang:"
63                         + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;revision=2010-10-04",
64                 "urn:ietf:params:netconf:base:1.0",
65                 "urn:ietf:params:netconf:capability:rollback-on-error:1.0"
66         );
67         final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
68         assertCaps(sessionCaps1, 2, 3);
69
70         final List<String> caps2 = Lists.newArrayList(
71                 "namespace:3?module=module3&revision=2012-12-12",
72                 "namespace:4?module=module4&revision=2012-12-12",
73                 "randomNonModuleCap"
74         );
75         final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
76         assertCaps(sessionCaps2, 1, 2);
77
78         final NetconfSessionPreferences replaced = sessionCaps1.replaceModuleCaps(sessionCaps2);
79         assertCaps(replaced, 2, 2);
80     }
81
82     @Test
83     public void testNonModuleMerge() throws Exception {
84         final List<String> caps1 = Lists.newArrayList(
85                 "namespace:1?module=module1&revision=2012-12-12",
86                 "namespace:2?module=module2&amp;revision=2012-12-12",
87                 "urn:ietf:params:xml:ns:yang:"
88                         + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;revision=2010-10-04",
89                 "urn:ietf:params:netconf:base:1.0",
90                 "urn:ietf:params:netconf:capability:rollback-on-error:1.0",
91                 "urn:ietf:params:netconf:capability:candidate:1.0"
92         );
93         final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
94         assertCaps(sessionCaps1, 3, 3);
95         assertTrue(sessionCaps1.isCandidateSupported());
96
97         final List<String> caps2 = Lists.newArrayList(
98                 "namespace:3?module=module3&revision=2012-12-12",
99                 "namespace:4?module=module4&revision=2012-12-12",
100                 "urn:ietf:params:netconf:capability:writable-running:1.0",
101                 "urn:ietf:params:netconf:capability:notification:1.0"
102         );
103         final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
104         assertCaps(sessionCaps2, 2, 2);
105         assertTrue(sessionCaps2.isRunningWritable());
106
107         final NetconfSessionPreferences merged = sessionCaps1.addNonModuleCaps(sessionCaps2);
108
109         assertCaps(merged, 3 + 2, 3);
110         for (final String capability : sessionCaps2.getNonModuleCaps()) {
111             assertThat(merged.getNonModuleCaps(), hasItem(capability));
112         }
113
114         assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:base:1.0"));
115         assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:rollback-on-error:1.0"));
116         assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:writable-running:1.0"));
117         assertThat(merged.getNonModuleCaps(), hasItem("urn:ietf:params:netconf:capability:notification:1.0"));
118
119         assertTrue(merged.isCandidateSupported());
120         assertTrue(merged.isRunningWritable());
121     }
122
123     @Test
124     public void testNonmoduleReplace() throws Exception {
125         final List<String> caps1 = Lists.newArrayList(
126                 "namespace:1?module=module1&revision=2012-12-12",
127                 "namespace:2?module=module2&amp;revision=2012-12-12",
128                 "urn:ietf:params:xml:ns:yang:"
129                         + "ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;revision=2010-10-04",
130                 "urn:ietf:params:netconf:base:1.0",
131                 "urn:ietf:params:netconf:capability:rollback-on-error:1.0",
132                 "urn:ietf:params:netconf:capability:candidate:1.0"
133         );
134         final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
135         assertCaps(sessionCaps1, 3, 3);
136         assertTrue(sessionCaps1.isCandidateSupported());
137
138         final List<String> caps2 = Lists.newArrayList(
139                 "namespace:3?module=module3&revision=2012-12-12",
140                 "namespace:4?module=module4&revision=2012-12-12",
141                 "randomNonModuleCap",
142                 "urn:ietf:params:netconf:capability:writable-running:1.0"
143         );
144         final NetconfSessionPreferences sessionCaps2 = NetconfSessionPreferences.fromStrings(caps2);
145         assertCaps(sessionCaps2, 2, 2);
146         assertTrue(sessionCaps2.isRunningWritable());
147
148         final NetconfSessionPreferences replaced = sessionCaps1.replaceNonModuleCaps(sessionCaps2);
149         assertCaps(replaced, 2, 3);
150         assertFalse(replaced.isCandidateSupported());
151         assertTrue(replaced.isRunningWritable());
152     }
153
154     @Test
155     public void testCapabilityNoRevision() throws Exception {
156         final List<String> caps1 = Lists.newArrayList(
157                 "namespace:2?module=module2",
158                 "namespace:2?module=module2&amp;revision=2012-12-12",
159                 "namespace:2?module=module1&amp;RANDOMSTRING;revision=2013-12-12",
160                 // Revision parameter present, but no revision defined
161                 "namespace:2?module=module4&amp;RANDOMSTRING;revision=",
162                 // This one should be ignored(same as first), since revision is in wrong format
163                 "namespace:2?module=module2&amp;RANDOMSTRING;revision=2013-12-12"
164         );
165
166         final NetconfSessionPreferences sessionCaps1 = NetconfSessionPreferences.fromStrings(caps1);
167         assertCaps(sessionCaps1, 0, 4);
168     }
169
170     private static void assertCaps(final NetconfSessionPreferences sessionCaps1, final int nonModuleCaps,
171             final int moduleCaps) {
172         assertEquals(nonModuleCaps, sessionCaps1.getNonModuleCaps().size());
173         assertEquals(moduleCaps, sessionCaps1.getModuleBasedCaps().size());
174     }
175 }