Added more thorough CRUD testing
[integration/test.git] / csit / libraries / NetconfViaRestconf.robot
index 83619c6f19f06c244731410c9d66880b0cebc79f..947dd3e2c7d22b027b484aa543a933b921ccbe89 100644 (file)
@@ -6,8 +6,20 @@ Documentation     Access Netconf via Restconf.
 ...               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
+...
+...               FIXME: This whole thing needs to be refactored and merged with
+...               "ConfigViaRestconf.robot" which contains nearly identical (or even completely
+...               identical) pieces of code.
+...
+...               FIXME: This module (along with "ConfigViaRestconf.robot") uses the deprecated
+...               "RequestsLibrary.Put" keyword to issue requests to the ODL. Convert these
+...               statements to use "RequestsLibrary.Put_Request" instead. Similarly for
+...               "RequestsLibrary.Post" and "RequestsLibrary.Delete". It might be best to do
+...               this change after the code duplication in these two modules is removed (see
+...               the previous FIXME).
 Library           RequestsLibrary
 Library           OperatingSystem
+Resource          Utils.robot
 
 *** Variables ***
 @{allowed_status_codes}    ${200}    ${201}    ${204}    # List of integers, not strings. Used by both PUT and DELETE.
@@ -38,7 +50,7 @@ FIXME__POLISH_THIS
     #    strange name clashes when using both in a suite.
 
 Setup_Netconf_Via_Restconf
-    [Documentation]    Creates Requests session to be used by subsequent keywords.
+    [Documentation]    Creates a default requests session to be used by subsequent keywords.
     # Do not append slash at the end uf URL, Requests would add another, resulting in error.
     Create_NVR_Session    nvr_session    ${ODL_SYSTEM_IP}
     Activate_NVR_Session    nvr_session
@@ -64,6 +76,14 @@ Resolve_Xml_Data_From_Template_Folder
     ${xml_data}=    Strip_Endline_And_Apply_Substitutions_From_Mapping    ${data_template}    ${mapping_as_string}
     [Return]    ${xml_data}
 
+Resolve_Json_Data_From_Template_Folder
+    [Arguments]    ${folder}    ${mapping_as_string}
+    [Documentation]    Read data template from folder, strip endline, make changes according to mapping, return the result.
+    ${data_template}=    OperatingSystem.Get_File    ${folder}${/}data.json
+    BuiltIn.Log    ${data_template}
+    ${json_data}=    Strip_Endline_And_Apply_Substitutions_From_Mapping    ${data_template}    ${mapping_as_string}
+    [Return]    ${json_data}
+
 Strip_Endline_And_Apply_Substitutions_From_Mapping
     [Arguments]    ${template_as_string}    ${mapping_as_string}
     [Documentation]    Strip endline, apply substitutions, Log and return the result.
@@ -82,7 +102,7 @@ Post_Xml_Via_Restconf
     # As seen in previous two Keywords, Post does not need long specific URI.
     # But during Lithium development, Post ceased to do merge, so those Keywords do not work anymore.
     # This Keyword can still be used with specific URI to create a new container and fail if a container was already present.
-    ${response}=    RequestsLibrary.Post    ${NetconfViaRestconf__active_session}    ${uri_part}    data=${xml_data}
+    ${response}=    RequestsLibrary.Post Request    ${NetconfViaRestconf__active_config_session}    ${uri_part}    data=${xml_data}
     BuiltIn.Log    ${response.text}
     BuiltIn.Should_Be_Empty    ${response.text}
     BuiltIn.Should_Be_Equal_As_Strings    ${response.status_code}    204
@@ -94,12 +114,32 @@ Post_Xml_Template_Folder_Via_Restconf
     ${xml_data}=    Resolve_Xml_Data_From_Template_Folder    ${folder}    ${mapping_as_string}
     Post_Xml_Via_Restconf    ${uri_part}    ${xml_data}
 
+Post_Json_Via_Restconf
+    [Arguments]    ${uri_part}    ${json_data}
+    [Documentation]    Post JSON data to given controller-config URI, check reponse text is empty and status_code is 204.
+    BuiltIn.Log    ${uri_part}
+    BuiltIn.Log    ${json_data}
+    # As seen in previous two Keywords, Post does not need long specific URI.
+    # But during Lithium development, Post ceased to do merge, so those Keywords do not work anymore.
+    # This Keyword can still be used with specific URI to create a new container and fail if a container was already present.
+    ${response}=    RequestsLibrary.Post    ${NetconfViaRestconf__active_config_session}    ${uri_part}    data=${json_data}    headers=${HEADERS_YANG_JSON}
+    BuiltIn.Log    ${response.text}
+    BuiltIn.Should_Be_Empty    ${response.text}
+    BuiltIn.Should_Be_Equal_As_Strings    ${response.status_code}    204
+
+Post_Json_Template_Folder_Via_Restconf
+    [Arguments]    ${folder}    ${mapping_as_string}={}
+    [Documentation]    Resolve URI and data from folder, POST to restconf.
+    ${uri_part}=    Resolve_URI_From_Template_Folder    ${folder}    ${mapping_as_string}
+    ${json_data}=    Resolve_Json_Data_From_Template_Folder    ${folder}    ${mapping_as_string}
+    Post_Json_Via_Restconf    ${uri_part}    ${json_data}
+
 Put_Xml_Via_Restconf
     [Arguments]    ${uri_part}    ${xml_data}
     [Documentation]    Put XML data to given controller-config URI, check reponse text is empty and status_code is one of allowed ones.
     BuiltIn.Log    ${uri_part}
     BuiltIn.Log    ${xml_data}
-    ${response}=    RequestsLibrary.Put    ${NetconfViaRestconf__active_session}    ${uri_part}    data=${xml_data}
+    ${response}=    RequestsLibrary.Put Request    ${NetconfViaRestconf__active_config_session}    ${uri_part}    data=${xml_data}
     BuiltIn.Log    ${response.text}
     BuiltIn.Log    ${response.status_code}
     BuiltIn.Should_Be_Empty    ${response.text}
@@ -112,11 +152,29 @@ Put_Xml_Template_Folder_Via_Restconf
     ${xml_data}=    Resolve_Xml_Data_From_Template_Folder    ${folder}    ${mapping_as_string}
     Put_Xml_Via_Restconf    ${uri_part}    ${xml_data}
 
+Put_Json_Via_Restconf
+    [Arguments]    ${uri_part}    ${json_data}
+    [Documentation]    Put JSON data to given controller-config URI, check reponse text is empty and status_code is one of allowed ones.
+    BuiltIn.Log    ${uri_part}
+    BuiltIn.Log    ${json_data}
+    ${response}=    RequestsLibrary.Put Request    ${NetconfViaRestconf__active_config_session}    ${uri_part}    data=${json_data}    headers=${HEADERS_YANG_JSON}
+    BuiltIn.Log    ${response.text}
+    BuiltIn.Log    ${response.status_code}
+    BuiltIn.Should_Be_Empty    ${response.text}
+    BuiltIn.Should_Contain    ${allowed_status_codes}    ${response.status_code}
+
+Put_Json_Template_Folder_Via_Restconf
+    [Arguments]    ${folder}    ${mapping_as_string}={}
+    [Documentation]    Resolve URI and data from folder, PUT to controller config.
+    ${uri_part}=    Resolve_URI_From_Template_Folder    ${folder}    ${mapping_as_string}
+    ${json_data}=    Resolve_Json_Data_From_Template_Folder    ${folder}    ${mapping_as_string}
+    Put_Json_Via_Restconf    ${uri_part}    ${json_data}
+
 Delete_Via_Restconf
     [Arguments]    ${uri_part}
     [Documentation]    Delete resource at controller-config URI, check reponse text is empty and status_code is 204.
     BuiltIn.Log    ${uri_part}
-    ${response}=    RequestsLibrary.Delete    ${NetconfViaRestconf__active_session}    ${uri_part}
+    ${response}=    RequestsLibrary.Delete Request    ${NetconfViaRestconf__active_config_session}    ${uri_part}
     BuiltIn.Log    ${response.text}
     BuiltIn.Should_Be_Empty    ${response.text}
     BuiltIn.Should_Contain    ${allowed_status_codes}    ${response.status_code}
@@ -131,12 +189,24 @@ Create_NVR_Session
     [Arguments]    ${name}    ${host}
     [Documentation]    Create a Netconf Via Restconf session pointing to the given host with the given name. The new session is NOT made active.
     RequestsLibrary.Create_Session    ${name}    http://${host}:${RESTCONFPORT}${CONFIG_API}    headers=${HEADERS_XML}    auth=${AUTH}
+    RequestsLibrary.Create_Session    ${name}_operational    http://${host}:${RESTCONFPORT}${OPERATIONAL_API}    headers=${HEADERS_XML}    auth=${AUTH}
 
 Get_Active_NVR_Session
     [Documentation]    Get the name of the currently active NVR session.
-    [Return]    ${NetconfViaRestconf__active_session}
+    [Return]    ${NetconfViaRestconf__active_config_session}
 
 Activate_NVR_Session
     [Arguments]    ${name}
     [Documentation]    Activate the given NVR session.
-    BuiltIn.Set_Suite_Variable    ${NetconfViaRestconf__active_session}    ${name}
+    BuiltIn.Set_Suite_Variable    ${NetconfViaRestconf__active_config_session}    ${name}
+    BuiltIn.Set_Suite_Variable    ${NetconfViaRestconf__active_operational_session}    ${name}_operational
+
+Get_Config_Data_From_URI
+    [Arguments]    ${uri}    ${headers}=${NONE}
+    ${data}=    Utils.Get_Data_From_URI    ${NetconfViaRestconf__active_config_session}    ${uri}    ${headers}
+    [Return]    ${data}
+
+Get_Operational_Data_From_URI
+    [Arguments]    ${uri}    ${headers}=${NONE}
+    ${data}=    Utils.Get_Data_From_URI    ${NetconfViaRestconf__active_operational_session}    ${uri}    ${headers}
+    [Return]    ${data}