... 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.
# 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}
- BuiltIn.Set_Suite_Variable ${NetconfViaRestconf__active_session} nvr_session
+ Activate_NVR_Session nvr_session
Teardown_Netconf_Via_Restconf
[Documentation] Teardown to pair with Setup (otherwise no-op).
${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.
# 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
${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}
${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}
[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_config_session}
Activate_NVR_Session
[Arguments] ${name}
- [Documentation] Activate the given session and return the name of the previously active session.
- ${result}= BuiltIn.Set_Variable ${NetconfViaRestconf__active_session}
- BuiltIn.Set_Suite_Variable ${NetconfViaRestconf__active_session} ${name}
- [Return] ${result}
+ [Documentation] Activate the given NVR session.
+ 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}