Netconf CRUD on mounted device data 05/26505/26
authorJozef Behran <jbehran@cisco.com>
Fri, 4 Sep 2015 09:33:57 +0000 (11:33 +0200)
committerVratko Polák <vrpolak@cisco.com>
Tue, 3 Nov 2015 11:35:49 +0000 (11:35 +0000)
Tests the basic operations (Create, Read, Update, Delete) on
device data exported via a netconf mount. Uses testtool to
simulate the netconf mounted device.

Change-Id: If8d94d5b9d37f1db50d963224dc948b51ffeb5ba
Signed-off-by: Jozef Behran <jbehran@cisco.com>
csit/suites/netconf/CRUD/CRUD.robot [new file with mode: 0644]
csit/testplans/netconf-userfeatures.txt [new file with mode: 0644]
csit/variables/netconf/CRUD/datadel/config.uri [new file with mode: 0644]
csit/variables/netconf/CRUD/datamod1/config.uri [new file with mode: 0644]
csit/variables/netconf/CRUD/datamod1/data.xml [new file with mode: 0644]
csit/variables/netconf/CRUD/dataorig/config.uri [new file with mode: 0644]
csit/variables/netconf/CRUD/dataorig/data.xml [new file with mode: 0644]
csit/variables/netconf/CRUD/schemas/test@2014-10-18.yang [new file with mode: 0644]

diff --git a/csit/suites/netconf/CRUD/CRUD.robot b/csit/suites/netconf/CRUD/CRUD.robot
new file mode 100644 (file)
index 0000000..2629259
--- /dev/null
@@ -0,0 +1,127 @@
+*** Settings ***
+Documentation     netconf-connector CRUD test suite.
+...
+...               Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+...
+...               This program and the accompanying materials are made available under the
+...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
+...               and is available at http://www.eclipse.org/legal/epl-v10.html
+...
+...
+...               Perform basic operations (Create, Read, Update and Delete or CRUD) on device
+...               data mounted onto a netconf connector and see if they work.
+Suite Setup       Setup_Everything
+Suite Teardown    Teardown_Everything
+Test Setup        SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
+Test Teardown     FailFast.Start_Failing_Fast_If_This_Failed
+Library           Collections
+Library           RequestsLibrary
+Library           OperatingSystem
+Library           String
+Library           SSHLibrary    prompt=${MININET_PROMPT}    timeout=10s
+Resource          ${CURDIR}/../../../libraries/FailFast.robot
+Resource          ${CURDIR}/../../../libraries/KarafKeywords.robot
+Resource          ${CURDIR}/../../../libraries/NetconfKeywords.robot
+Resource          ${CURDIR}/../../../libraries/NetconfViaRestconf.robot
+Resource          ${CURDIR}/../../../libraries/SetupUtils.robot
+Resource          ${CURDIR}/../../../libraries/Utils.robot
+Variables         ${CURDIR}/../../../variables/Variables.py
+
+*** Variables ***
+${DIRECTORY_WITH_TEMPLATE_FOLDERS}    ${CURDIR}/../../../variables/netconf/CRUD
+${device_name}    netconf-test-device
+
+*** Test Cases ***
+Check_Device_Is_Not_Mounted_At_Beginning
+    [Documentation]    Sanity check making sure our device is not there. Fail if found.
+    [Tags]    critical
+    NetconfKeywords.Check_Device_Has_No_Netconf_Connector    ${device_name}
+
+Mount_Device_On_Netconf
+    [Documentation]    Make request to mount a testtool device on Netconf connector
+    [Tags]    critical
+    NetconfKeywords.Configure_Device_In_Netconf    ${device_name}
+
+Check_ODL_Has_Netconf_Connector_For_Device
+    [Documentation]    Get the list of mounts and search for our device there. Fail if not found.
+    [Tags]    critical
+    ${count}    NetconfKeywords.Count_Netconf_Connectors_For_Device    ${device_name}
+    Builtin.Should_Be_Equal_As_Strings    ${count}    1
+
+Wait_For_Device_To_Become_Mounted
+    [Documentation]    Wait until the device becomes available through Netconf.
+    NetconfKeywords.Wait_Device_Connected    ${device_name}
+
+Check_Device_Data_Is_Empty
+    [Documentation]    Get the device data and make sure it is empty.
+    Check_Config_Data    <data xmlns="${ODL_NETCONF_NAMESPACE}"></data>
+
+Create_Device_Data
+    [Documentation]    Send some sample test data into the device and check that the request went OK.
+    ${template_as_string}=    BuiltIn.Set_Variable    {'DEVICE_NAME': '${device_name}'}
+    NetconfViaRestconf.Post_Xml_Template_Folder_Via_Restconf    ${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}dataorig    ${template_as_string}
+
+Check_Device_Data_Is_Created
+    [Documentation]    Get the device data and make sure it contains the created content.
+    Check_Config_Data    <data xmlns="${ODL_NETCONF_NAMESPACE}"><cont xmlns="urn:opendaylight:test:netconf:crud" xmlns:a="${ODL_NETCONF_NAMESPACE}" a:operation="replace"><l>Content</l></cont></data>
+
+Modify_Device_Data
+    [Documentation]    Send a request to change the sample test data and check that the request went OK.
+    ${template_as_string}=    BuiltIn.Set_Variable    {'DEVICE_NAME': '${device_name}'}
+    NetconfViaRestconf.Put_Xml_Template_Folder_Via_Restconf    ${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}datamod1    ${template_as_string}
+
+Check_Device_Data_Is_Modified
+    [Documentation]    Get the device data and make sure it contains the created content.
+    Check_Config_Data    <data xmlns="${ODL_NETCONF_NAMESPACE}"><cont xmlns="urn:opendaylight:test:netconf:crud" xmlns:a="${ODL_NETCONF_NAMESPACE}" a:operation="replace"><l>Modified Content</l></cont></data>
+
+Delete_Device_Data
+    [Documentation]    Send a request to delete the sample test data on the device and check that the request went OK.
+    ${template_as_string}=    BuiltIn.Set_Variable    {'DEVICE_NAME': '${device_name}'}
+    NetconfViaRestconf.Delete_Xml_Template_Folder_Via_Restconf    ${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}datamod1    ${template_as_string}
+
+Check_Device_Data_Is_Deleted
+    [Documentation]    Get the device data and make sure it is empty again.
+    Check_Config_Data    <data xmlns="${ODL_NETCONF_NAMESPACE}"></data>
+
+Remove_Device_From_Netconf
+    [Documentation]    Make request to unmount a testtool device on Netconf connector.
+    [Tags]    critical
+    [Setup]    SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+    NetconfKeywords.Remove_Device_From_Netconf    ${device_name}
+
+Check_Device_Going_To_Be_Gone_After_Delete
+    [Documentation]    Check that the device is really going to be gone. Fail
+    ...    if found after one minute. This is an expected behavior as the
+    ...    delete request is sent to the config subsystem which then triggers
+    ...    asynchronous destruction of the netconf connector referring to the
+    ...    device and the device's data. This test makes sure this
+    ...    asynchronous operation does not take unreasonable amount of time
+    ...    by making sure that both the netconf connector and the device's
+    ...    data is gone before reporting success.
+    [Tags]    critical
+    NetconfKeywords.Wait_Device_Fully_Removed    ${device_name}
+
+*** Keywords ***
+Setup_Everything
+    [Documentation]    Setup everything needed for the test cases.
+    # Setup resources used by the suite.
+    SetupUtils.Setup_Utils_For_Setup_And_Teardown
+    RequestsLibrary.Create_Session    operational    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${OPERATIONAL_API}    auth=${AUTH}
+    NetconfKeywords.Setup_Netconf_Keywords
+    # Connect to the Mininet machine
+    SSHLibrary.Open_Connection    ${TOOLS_SYSTEM_IP}
+    Utils.Flexible_Mininet_Login
+    NetconfKeywords.Install_And_Start_Testtool    device-count=10    schemas=${CURDIR}/../../../variables/netconf/CRUD/schemas
+
+Teardown_Everything
+    [Documentation]    Teardown the test infrastructure, perform cleanup and release all resources.
+    Teardown_Netconf_Via_Restconf
+    RequestsLibrary.Delete_All_Sessions
+    BuiltIn.Run_Keyword_And_Ignore_Error    NetconfKeywords.Stop_Testtool
+
+Check_Config_Data
+    [Arguments]    ${expected}    ${contains}=False
+    ${url}=    Builtin.Set_Variable    network-topology:network-topology/topology/topology-netconf/node/${device_name}/yang-ext:mount
+    ${data}=    Utils.Get_Data_From_URI    nvr_session    ${url}    headers=${ACCEPT_XML}
+    BuiltIn.Run_Keyword_Unless    ${contains}    BuiltIn.Should_Be_Equal_As_Strings    ${data}    ${expected}
+    BuiltIn.Run_Keyword_If    ${contains}    BuiltIn.Should_Contain    ${data}    ${expected}
diff --git a/csit/testplans/netconf-userfeatures.txt b/csit/testplans/netconf-userfeatures.txt
new file mode 100644 (file)
index 0000000..7cdbf3d
--- /dev/null
@@ -0,0 +1,9 @@
+# Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v1.0 which accompanies this distribution,
+# and is available at http://www.eclipse.org/legal/epl-v10.html
+
+# Place the suites in run order:
+integration/test/csit/suites/netconf/ready
+integration/test/csit/suites/netconf/CRUD
diff --git a/csit/variables/netconf/CRUD/datadel/config.uri b/csit/variables/netconf/CRUD/datadel/config.uri
new file mode 100644 (file)
index 0000000..41fb71a
--- /dev/null
@@ -0,0 +1 @@
+network-topology:network-topology/topology/topology-netconf/node/$DEVICE_NAME/yang-ext:mount/test:cont
diff --git a/csit/variables/netconf/CRUD/datamod1/config.uri b/csit/variables/netconf/CRUD/datamod1/config.uri
new file mode 100644 (file)
index 0000000..41fb71a
--- /dev/null
@@ -0,0 +1 @@
+network-topology:network-topology/topology/topology-netconf/node/$DEVICE_NAME/yang-ext:mount/test:cont
diff --git a/csit/variables/netconf/CRUD/datamod1/data.xml b/csit/variables/netconf/CRUD/datamod1/data.xml
new file mode 100644 (file)
index 0000000..f62fe19
--- /dev/null
@@ -0,0 +1,3 @@
+<cont xmlns="urn:opendaylight:test:netconf:crud">
+<l>Modified Content</l>
+</cont>
diff --git a/csit/variables/netconf/CRUD/dataorig/config.uri b/csit/variables/netconf/CRUD/dataorig/config.uri
new file mode 100644 (file)
index 0000000..e06ec93
--- /dev/null
@@ -0,0 +1 @@
+network-topology:network-topology/topology/topology-netconf/node/$DEVICE_NAME/yang-ext:mount
diff --git a/csit/variables/netconf/CRUD/dataorig/data.xml b/csit/variables/netconf/CRUD/dataorig/data.xml
new file mode 100644 (file)
index 0000000..4477832
--- /dev/null
@@ -0,0 +1,3 @@
+<cont xmlns="urn:opendaylight:test:netconf:crud">
+<l>Content</l>
+</cont>
diff --git a/csit/variables/netconf/CRUD/schemas/test@2014-10-18.yang b/csit/variables/netconf/CRUD/schemas/test@2014-10-18.yang
new file mode 100644 (file)
index 0000000..63ab588
--- /dev/null
@@ -0,0 +1,13 @@
+module test {
+  yang-version 1;
+  namespace "urn:opendaylight:test:netconf:crud";
+  prefix "tt";
+
+  revision "2014-10-18";
+
+  container cont {
+    leaf l {
+      type string;
+    }
+  }
+}