2  * Copyright © 2017-2018 AT&T Intellectual Property.
 
   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
 
   8  *     http://www.apache.org/licenses/LICENSE-2.0
 
  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.
 
  16 package org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.utils
 
  18 import org.junit.Assert
 
  19 import org.junit.Assert.assertTrue
 
  21 import org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.api.NetconfException
 
  22 import kotlin.test.fail
 
  24 class RpcMessageUtilsTest {
 
  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>")
 
  33         val messageId = "Test-Message-ID"
 
  34         val configType = NetconfDatastore.CANDIDATE.datastore
 
  35         val filterContent = "Test-Filter-Content"
 
  38                 NetconfMessageUtils.getConfig(messageId, configType, filterContent).replace("[\n\r\t]".toRegex(), "")
 
  40         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
  41         Assert.assertEquals(checkString, result)
 
  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>")
 
  52         val messageId = "Test-Message-ID"
 
  53         val configType = NetconfDatastore.CANDIDATE.datastore
 
  54         val filterContent = "Test-Filter-Content"
 
  55         val defaultOperation = "Test-Default-Operation"
 
  58                 NetconfMessageUtils.editConfig(messageId, configType, defaultOperation, filterContent).replace("[\n\r\t]".toRegex(), "")
 
  60         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
  61         Assert.assertEquals(checkString, result)
 
  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>")
 
  70         val messageId = "Test-Message-ID"
 
  71         val configType = NetconfDatastore.CANDIDATE.datastore
 
  73         val result = NetconfMessageUtils.validate(messageId, configType).replace("[\n\r\t]".toRegex(), "")
 
  75         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
  76         Assert.assertEquals(checkString, result)
 
  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\">" +
 
  85                         "<persist-id>1234</persist-id>" +
 
  86                         "</cancel-commit></rpc>")
 
  88         val messageId = "Test-Message-ID"
 
  90         val cancelCommitPersistId =
 
  91                 NetconfMessageUtils.cancelCommit(messageId, "1234").replace("[\n\r\t]".toRegex(), "")
 
  93         assertTrue(NetconfMessageUtils.validateRPCXML(cancelCommitPersistId))
 
  94         Assert.assertEquals(checkString, cancelCommitPersistId)
 
  98     fun cancelCommitNoPersistId() {
 
 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\">" +
 
 103                         "</cancel-commit></rpc>")
 
 105         val messageId = "Test-Message-ID"
 
 107         val cancelCommitNoPersistId = NetconfMessageUtils.cancelCommit(messageId, "").replace("[\n\r\t]".toRegex(), "")
 
 109         assertTrue(NetconfMessageUtils.validateRPCXML(cancelCommitNoPersistId))
 
 110         Assert.assertEquals(checkString, cancelCommitNoPersistId)
 
 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>")
 
 119         val messageId = "Test-Message-ID"
 
 121         val commit = NetconfMessageUtils.commit(messageId, false, 0, "", "").replace("[\n\r\t]".toRegex(), "")
 
 123         val commitWithPersistButNotConfirmed =
 
 124                 NetconfMessageUtils.commit(messageId, false, 0, "1234", "").replace("[\n\r\t]".toRegex(), "")
 
 126         assertTrue(NetconfMessageUtils.validateRPCXML(commit))
 
 127         Assert.assertEquals(checkString, commit)
 
 128         Assert.assertEquals(checkString, commitWithPersistButNotConfirmed)
 
 133     fun commitPersistId() {
 
 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\">" +
 
 138                         "<persist-id>1234</persist-id>" +
 
 141         val messageId = "Test-Message-ID"
 
 143         val result = NetconfMessageUtils.commit(messageId, false, 30, "", "1234").replace("[\n\r\t]".toRegex(), "")
 
 144         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
 145         Assert.assertEquals(checkString, result)
 
 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.",
 
 159     fun commitPersist() {
 
 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\">" +
 
 165                         "<confirm-timeout>30</confirm-timeout>" +
 
 166                         "<persist>1234</persist>" +
 
 169         val messageId = "Test-Message-ID"
 
 171         val result = NetconfMessageUtils.commit(messageId, true, 30, "1234", "").replace("[\n\r\t]".toRegex(), "")
 
 173         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
 174         Assert.assertEquals(checkString, result)
 
 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.",
 
 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>")
 
 192         val messageId = "Test-Message-ID"
 
 193         val configType = NetconfDatastore.CANDIDATE.datastore
 
 195         val result = NetconfMessageUtils.unlock(messageId, configType).replace("[\n\r\t]".toRegex(), "")
 
 197         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
 198         Assert.assertEquals(checkString, result)
 
 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>")
 
 207         val messageId = "Test-Message-ID"
 
 208         val netconfTargetConfig = NetconfDatastore.CANDIDATE.datastore
 
 210         val result = NetconfMessageUtils.deleteConfig(messageId, netconfTargetConfig).replace("[\n\r\t]".toRegex(), "")
 
 212         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
 213         Assert.assertEquals(checkString, result)
 
 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>")
 
 222         val messageId = "Test-Message-ID"
 
 224         val result = NetconfMessageUtils.discardChanges(messageId).replace("[\n\r\t]".toRegex(), "")
 
 226         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
 227         Assert.assertEquals(checkString, result)
 
 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>")
 
 236         val messageId = "Test-Message-ID"
 
 237         val configType = NetconfDatastore.CANDIDATE.datastore
 
 238         val result = NetconfMessageUtils.lock(messageId, configType).replace("[\n\r\t]".toRegex(), "")
 
 240         assertTrue(NetconfMessageUtils.validateRPCXML(result))
 
 241         Assert.assertEquals(checkString, result)
 
 246         val checkString = ("testmessage")
 
 248         var messageId = "message-id=\"testmessage\""
 
 249         var result = NetconfMessageUtils.getMsgId(messageId).replace("[\n\r\t]".toRegex(), "")
 
 250         Assert.assertEquals(checkString, result)
 
 252         messageId = "message-id=\"hello\""
 
 253         result = NetconfMessageUtils.getMsgId(messageId).replace("[\n\r\t]".toRegex(), "")
 
 254         Assert.assertEquals("hello", result)
 
 256         messageId = "message-id"
 
 257         result = NetconfMessageUtils.getMsgId(messageId).replace("[\n\r\t]".toRegex(), "")
 
 258         Assert.assertEquals("", result)
 
 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>]]>]]>")
 
 266         val capability = listOf<String>("hi", "hello")
 
 268         val result = NetconfMessageUtils.createHelloString(capability).replace("[\n\r\t]".toRegex(), "")
 
 269         Assert.assertEquals(checkString, result)
 
 273     fun validateChunkedFraming() {
 
 274         val reply = ("hello")
 
 275         val result = NetconfMessageUtils.validateChunkedFraming(reply)
 
 276         Assert.assertFalse(result)
 
 281         assertTrue(NetconfMessageUtils.checkReply("ok"))
 
 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>" +
 
 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>]]>]]>")
 
 293         val messageId = "Test-Message-ID"
 
 295         val capabilities = setOf<String>("hi", "hello","urn:ietf:params:netconf:base:1.1")
 
 297         val result = NetconfMessageUtils.formatRPCRequest(request,messageId,capabilities).replace("[\n\r\t]".toRegex(), "")
 
 298         Assert.assertEquals(checkString, result)