Migrate ccsdk/apps to ccsdk/cds
[ccsdk/cds.git] / ms / blueprintsprocessor / functions / netconf-executor / src / test / kotlin / org / onap / ccsdk / cds / blueprintsprocessor / functions / netconf / executor / utils / RpcMessageUtilsTest.kt
1 /*
2  * Copyright © 2017-2018 AT&T Intellectual Property.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.utils
17
18 import org.junit.Assert
19 import org.junit.Assert.assertTrue
20 import org.junit.Test
21 import org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.api.NetconfException
22 import kotlin.test.fail
23
24 class RpcMessageUtilsTest {
25
26     @Test
27     fun getConfig() {
28         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
29                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
30                 + "<get-config><source><candidate/></source><filter type=\"subtree\">Test-Filter-Content</filter>"
31                 + "</get-config></rpc>")
32
33         val messageId = "Test-Message-ID"
34         val configType = NetconfDatastore.CANDIDATE.datastore
35         val filterContent = "Test-Filter-Content"
36
37         val result =
38                 NetconfMessageUtils.getConfig(messageId, configType, filterContent).replace("[\n\r\t]".toRegex(), "")
39
40         assertTrue(NetconfMessageUtils.validateRPCXML(result))
41         Assert.assertEquals(checkString, result)
42     }
43
44
45     @Test
46     fun editConfig() {
47         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
48                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
49                 + "<edit-config><target><candidate/></target><default-operation>Test-Default-Operation</default-operation>"
50                 + "<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">Test-Filter-Content</config></edit-config></rpc>")
51
52         val messageId = "Test-Message-ID"
53         val configType = NetconfDatastore.CANDIDATE.datastore
54         val filterContent = "Test-Filter-Content"
55         val defaultOperation = "Test-Default-Operation"
56
57         val result =
58                 NetconfMessageUtils.editConfig(messageId, configType, defaultOperation, filterContent).replace("[\n\r\t]".toRegex(), "")
59
60         assertTrue(NetconfMessageUtils.validateRPCXML(result))
61         Assert.assertEquals(checkString, result)
62     }
63
64     @Test
65     fun validate() {
66         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
67                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
68                 + "<validate><source><candidate/></source></validate></rpc>")
69
70         val messageId = "Test-Message-ID"
71         val configType = NetconfDatastore.CANDIDATE.datastore
72
73         val result = NetconfMessageUtils.validate(messageId, configType).replace("[\n\r\t]".toRegex(), "")
74
75         assertTrue(NetconfMessageUtils.validateRPCXML(result))
76         Assert.assertEquals(checkString, result)
77     }
78
79     @Test
80     fun cancelCommit() {
81         val checkString =
82                 ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
83                         "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" +
84                         "<cancel-commit>" +
85                         "<persist-id>1234</persist-id>" +
86                         "</cancel-commit></rpc>")
87
88         val messageId = "Test-Message-ID"
89
90         val cancelCommitPersistId =
91                 NetconfMessageUtils.cancelCommit(messageId, "1234").replace("[\n\r\t]".toRegex(), "")
92
93         assertTrue(NetconfMessageUtils.validateRPCXML(cancelCommitPersistId))
94         Assert.assertEquals(checkString, cancelCommitPersistId)
95     }
96
97     @Test
98     fun cancelCommitNoPersistId() {
99         val checkString =
100                 ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
101                         "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" +
102                         "<cancel-commit>" +
103                         "</cancel-commit></rpc>")
104
105         val messageId = "Test-Message-ID"
106
107         val cancelCommitNoPersistId = NetconfMessageUtils.cancelCommit(messageId, "").replace("[\n\r\t]".toRegex(), "")
108
109         assertTrue(NetconfMessageUtils.validateRPCXML(cancelCommitNoPersistId))
110         Assert.assertEquals(checkString, cancelCommitNoPersistId)
111     }
112
113     @Test
114     fun commit() {
115         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
116                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
117                 + "<commit></commit></rpc>")
118
119         val messageId = "Test-Message-ID"
120
121         val commit = NetconfMessageUtils.commit(messageId, false, 0, "", "").replace("[\n\r\t]".toRegex(), "")
122
123         val commitWithPersistButNotConfirmed =
124                 NetconfMessageUtils.commit(messageId, false, 0, "1234", "").replace("[\n\r\t]".toRegex(), "")
125
126         assertTrue(NetconfMessageUtils.validateRPCXML(commit))
127         Assert.assertEquals(checkString, commit)
128         Assert.assertEquals(checkString, commitWithPersistButNotConfirmed)
129
130     }
131
132     @Test
133     fun commitPersistId() {
134         val checkString =
135                 ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
136                         "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" +
137                         "<commit>" +
138                         "<persist-id>1234</persist-id>" +
139                         "</commit></rpc>")
140
141         val messageId = "Test-Message-ID"
142
143         val result = NetconfMessageUtils.commit(messageId, false, 30, "", "1234").replace("[\n\r\t]".toRegex(), "")
144         assertTrue(NetconfMessageUtils.validateRPCXML(result))
145         Assert.assertEquals(checkString, result)
146
147         try {
148             NetconfMessageUtils.commit(messageId, true, 30, "", "1234").replace("[\n\r\t]".toRegex(), "")
149         } catch (e: NetconfException) {
150             Assert.assertEquals("Can't proceed <commit> with both confirmed flag and persistId(1234) specified. Only one should be specified.",
151                     e.message)
152             return
153         }
154
155         fail()
156     }
157
158     @Test
159     fun commitPersist() {
160         val checkString =
161                 ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
162                         "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" +
163                         "<commit>" +
164                         "<confirmed/>" +
165                         "<confirm-timeout>30</confirm-timeout>" +
166                         "<persist>1234</persist>" +
167                         "</commit></rpc>")
168
169         val messageId = "Test-Message-ID"
170
171         val result = NetconfMessageUtils.commit(messageId, true, 30, "1234", "").replace("[\n\r\t]".toRegex(), "")
172
173         assertTrue(NetconfMessageUtils.validateRPCXML(result))
174         Assert.assertEquals(checkString, result)
175
176         try {
177             NetconfMessageUtils.commit(messageId, false, 30, "1234", "1234").replace("[\n\r\t]".toRegex(), "")
178         } catch (e: NetconfException) {
179             Assert.assertEquals("Can't proceed <commit> with both persist(1234) and persistId(1234) specified. Only one should be specified.",
180                     e.message)
181             return
182         }
183         fail()
184     }
185
186     @Test
187     fun unlock() {
188         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
189                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
190                 + "<unlock><target><candidate/></target></unlock></rpc>")
191
192         val messageId = "Test-Message-ID"
193         val configType = NetconfDatastore.CANDIDATE.datastore
194
195         val result = NetconfMessageUtils.unlock(messageId, configType).replace("[\n\r\t]".toRegex(), "")
196
197         assertTrue(NetconfMessageUtils.validateRPCXML(result))
198         Assert.assertEquals(checkString, result)
199     }
200
201     @Test
202     fun deleteConfig() {
203         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
204                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
205                 + "<delete-config><target><candidate/></target></delete-config></rpc>")
206
207         val messageId = "Test-Message-ID"
208         val netconfTargetConfig = NetconfDatastore.CANDIDATE.datastore
209
210         val result = NetconfMessageUtils.deleteConfig(messageId, netconfTargetConfig).replace("[\n\r\t]".toRegex(), "")
211
212         assertTrue(NetconfMessageUtils.validateRPCXML(result))
213         Assert.assertEquals(checkString, result)
214     }
215
216     @Test
217     fun discardChanges() {
218         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
219                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
220                 + "<discard-changes/></rpc>")
221
222         val messageId = "Test-Message-ID"
223
224         val result = NetconfMessageUtils.discardChanges(messageId).replace("[\n\r\t]".toRegex(), "")
225
226         assertTrue(NetconfMessageUtils.validateRPCXML(result))
227         Assert.assertEquals(checkString, result)
228     }
229
230     @Test
231     fun lock() {
232         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
233                 + "<rpc message-id=\"Test-Message-ID\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
234                 + "<lock><target><candidate/></target></lock></rpc>")
235
236         val messageId = "Test-Message-ID"
237         val configType = NetconfDatastore.CANDIDATE.datastore
238         val result = NetconfMessageUtils.lock(messageId, configType).replace("[\n\r\t]".toRegex(), "")
239
240         assertTrue(NetconfMessageUtils.validateRPCXML(result))
241         Assert.assertEquals(checkString, result)
242     }
243
244     @Test
245     fun getMsgId() {
246         val checkString = ("testmessage")
247
248         var messageId = "message-id=\"testmessage\""
249         var result = NetconfMessageUtils.getMsgId(messageId).replace("[\n\r\t]".toRegex(), "")
250         Assert.assertEquals(checkString, result)
251
252         messageId = "message-id=\"hello\""
253         result = NetconfMessageUtils.getMsgId(messageId).replace("[\n\r\t]".toRegex(), "")
254         Assert.assertEquals("hello", result)
255
256         messageId = "message-id"
257         result = NetconfMessageUtils.getMsgId(messageId).replace("[\n\r\t]".toRegex(), "")
258         Assert.assertEquals("", result)
259     }
260
261     @Test
262     fun createHelloString() {
263         val checkString = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">  "
264                 +"<capabilities>    <capability>hi</capability>    <capability>hello</capability>  </capabilities></hello>]]>]]>")
265
266         val capability = listOf<String>("hi", "hello")
267
268         val result = NetconfMessageUtils.createHelloString(capability).replace("[\n\r\t]".toRegex(), "")
269         Assert.assertEquals(checkString, result)
270     }
271
272     @Test
273     fun validateChunkedFraming() {
274         val reply = ("hello")
275         val result = NetconfMessageUtils.validateChunkedFraming(reply)
276         Assert.assertFalse(result)
277     }
278
279     @Test
280     fun checkReply(){
281         assertTrue(NetconfMessageUtils.checkReply("ok"))
282     }
283
284     @Test
285     fun formatRPCRequest(){
286         val checkString = ("#199" +
287                 "<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">  <capabilities>    <capability>hi</capability>    <capability>hello</capability>  </capabilities></hello>" +
288                 "##")
289
290         val request = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">  "
291                 +"<capabilities>    <capability>hi</capability>    <capability>hello</capability>  </capabilities></hello>]]>]]>")
292
293         val messageId = "Test-Message-ID"
294
295         val capabilities = setOf<String>("hi", "hello","urn:ietf:params:netconf:base:1.1")
296
297         val result = NetconfMessageUtils.formatRPCRequest(request,messageId,capabilities).replace("[\n\r\t]".toRegex(), "")
298         Assert.assertEquals(checkString, result)
299
300
301     }
302
303
304
305
306 }