2 Documentation Metconf MDSAL Northbound test suite.
4 ... Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
6 ... This program and the accompanying materials are made available under the
7 ... terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ... and is available at http://www.eclipse.org/legal/epl-v10.html
11 ... The request produced by test cases "Get Config Running", "Get Config Running
12 ... To Confirm No_Edit Before Commit", "Get Config Running To Confirm Delete
13 ... After Commit" and "Get Config Candidate To Confirm Discard" all use the same
14 ... message id ("empty") for their requests. This is possible because the
15 ... requests produced by this suite are strictly serialized. The RFC 6241 does
16 ... not state that these IDs are unique, it only requires that each ID used is
17 ... "XML attribute normalized" if the client wants it to be returned unmodified.
18 ... The RFC specifically says that "the content of this attribute is not
19 ... interpreted in any way, it only is stored to be returned with the reply to
20 ... the request. The reuse of the "empty" string for the 4 test cases was chosen
23 ... TODO: Change the 4 testcases to use unique message IDs.
25 ... TODO: There are many sections with too many "Should_[Not_]Contain" keyword
26 ... invocations (see Check_Multiple_Modules_Merge_Replace for a particularly bad
27 ... example). Create a resource that will be able to extract the data from the
28 ... requests and search for them in the response, then convert to usage of this
29 ... resource (think "Thou shall not repeat yourself"). The following resource was
30 ... found when doing research on this:
31 ... http://robotframework.org/robotframework/latest/libraries/XML.html
32 Suite Setup Setup_Everything
33 Suite Teardown Teardown_Everything
34 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
35 Library RequestsLibrary
37 Resource ${CURDIR}/../../../libraries/FailFast.robot
38 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
39 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
40 Resource ${CURDIR}/../../../libraries/Utils.robot
41 Variables ${CURDIR}/../../../variables/Variables.py
44 ${datadir} ${CURDIR}/../../../variables/netconf/MDSAL
49 Connect_To_ODL_Netconf
50 [Documentation] Connect to ODL Netconf and fail if that is not possible.
51 Create_ODL_Netconf_Connection
52 Open_ODL_Netconf_Connection
55 [Documentation] Make sure the configuration has only the default elements in it.
56 Check_Test_Objects_Not_Present_In_Config get-config
58 Missing_Message_ID_Attribute
59 [Documentation] Check that messages with missing "message-ID" attribute are rejected with the correct error (RFC 6241, section 4.1).
60 Perform_Test missing-attr
62 Additional_Attributes_In_Message
63 [Documentation] Check that additional attributes in messages are returned properly (RFC 6241, sections 4.1 and 4.2).
64 ${reply}= Load_And_Send_Message additional-attr
65 BuiltIn.Should_Contain ${reply} xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
66 BuiltIn.Should_Contain ${reply} message-id="1"
67 BuiltIn.Should_Contain ${reply} attribute="something"
68 BuiltIn.Should_Contain ${reply} additional="otherthing"
69 BuiltIn.Should_Contain ${reply} xmlns:prefix="http://www.example.com/my-schema-example.html"
71 Send_Stuff_In_Undefined_Namespace
72 [Documentation] Try to send something within an undefined namespace and check the reply complains about the nonexistent namespace and element.
73 ${reply}= Load_And_Send_Message merge-nonexistent-namespace
74 BuiltIn.Set_Test_Variable ${bugno} 5125
75 BuiltIn.Should_Not_Contain ${reply} java.lang.NullPointerException
76 BuiltIn.Set_Test_Variable ${bugno} ${EMPTY}
77 BuiltIn.Should_Contain ${reply} urn:this:is:in:a:nonexistent:namespace
78 BuiltIn.Should_Contain ${reply} <rpc-error>
79 [Teardown] BuiltIn.Run_Keyword_If '${bugno}' != '${EMPTY}' Utils.Report_Failure_Due_To_Bug 5125
81 Edit_Config_First_Batch_Merge
82 [Documentation] Request a "merge" operation adding an element in candidate configuration and check the reply.
85 Get_Config_Running_To_Confirm_No_Edit_Before_Commit
86 [Documentation] Make sure the running configuration is still unchanged as the change was not commited yet.
87 Check_Test_Objects_Not_Present_In_Config get-config-no-edit-before-commit
90 [Documentation] Commit the change and check the reply.
91 Perform_Test commit-edit
93 First_Batch_In_Config_Running_To_Confirm_Edit_After_Commit
94 [Documentation] Check that the change is now in the configuration.
95 ${reply}= Load_And_Send_Message get-config-edit-after-commit
96 Check_First_Batch_Data_Present ${reply}
98 Terminate_Connection_Gracefully
99 [Documentation] Close the session and disconnect.
100 Close_ODL_Netconf_Connection_Gracefully
102 Reconnect_To_ODL_Netconf_After_Graceful_Session_End
103 [Documentation] Reconnect to ODL Netconf and fail if that is not possible.
104 Open_ODL_Netconf_Connection
106 First_Batch_In_Config_Running_After_Reconnect
107 [Documentation] Check that the change is now in the configuration.
108 ${reply}= Load_And_Send_Message get-config-edit-after-commit
109 Check_First_Batch_Data_Present ${reply}
111 Edit_Config_Create_Shall_Fail_Now
112 [Documentation] Request a "create" operation of an element that already exists and check that it fails with the correct error (RFC 6241, section 7.2, operation "create").
116 [Documentation] Delete the created element from the candidate configuration and check the reply.
119 Get_Config_Running_To_Confirm_No_Delete_Before_Commit
120 [Documentation] Make sure the element is still present in the running configuration as the delete command was not committed yet.
121 ${reply}= Load_And_Send_Message get-config-no-delete-before-commit
122 Check_First_Batch_Data_Present ${reply}
125 [Documentation] Commit the deletion of the element and check the reply.
126 Perform_Test commit-delete
128 Get_Config_Running_To_Confirm_Delete_After_Commit
129 [Documentation] Check that the element is gone.
130 Check_Test_Objects_Not_Present_In_Config get-config-delete-after-commit
132 Commit_No_Transaction
133 [Documentation] Attempt to perform "commit" when there are no changes in the candidate configuration and check that it returns OK status.
134 Perform_Test commit-no-transaction
136 Edit_Config_Second_Batch_Merge
137 [Documentation] Create an element to be discarded and check the reply.
140 Get_And_Check_Config_Candidate_For_Discard
141 [Documentation] Check that the element to be discarded is present in the candidate configuration.
142 ${reply}= Load_And_Send_Message get-config-candidate
143 Check_First_Batch_Data_Not_Present ${reply}
144 Check_Second_Batch_Data_Present ${reply}
146 Discard_Changes_Using_Discard_Request
147 [Documentation] Ask the server to discard the candidate and check the reply.
148 Perform_Test commit-discard
150 Get_And_Check_Config_Candidate_To_Confirm_Discard
151 [Documentation] Check that the element was really discarded.
152 Check_Test_Objects_Not_Present_In_Config get-config-candidate-discard
154 Edit_Config_Multiple_Batch_Merge_Create
155 [Documentation] Use a create request with the third batch to create the infrastructure.
156 Perform_Test merge-multiple-create
158 Edit_Config_Multiple_Batch_Merge_Third
159 [Documentation] Use a create request with the third batch to create the infrastructure.
160 Perform_Test merge-multiple-1
162 Edit_Config_Multiple_Batch_Merge_Fourth
163 [Documentation] Use a merge request with the third batch to create the infrastructure.
164 Perform_Test merge-multiple-2
166 Edit_Config_Multiple_Batch_Merge_Fifth
167 [Documentation] Add a "name4" subelement to the element and check the reply.
168 Perform_Test merge-multiple-3
170 Commit_Multiple_Merge
171 [Documentation] Commit the changes and check the reply.
172 Perform_Test merge-multiple-commit
174 Multiple_Batch_Data_In_Running_Config
175 [Documentation] Check that the 3 subelements are now present in the running configuration.
176 ${reply}= Load_And_Send_Message merge-multiple-check
177 Check_Multiple_Batch_Data_Present ${reply}
179 Abort_Connection_To_Simulate_Session_Failure
180 [Documentation] Simulate session failure by disconnecting without terminating the session.
181 Abort_ODL_Netconf_Connection
183 Reconnect_To_ODL_Netconf_After_Session_Failure
184 [Documentation] Reconnect to ODL Netconf and fail if that is not possible.
185 Open_ODL_Netconf_Connection
187 Multiple_Batch_Data_In_Running_Config_After_Session_Failure
188 [Documentation] Check that the 3 subelements are now present in the running configuration.
189 ${reply}= Load_And_Send_Message merge-multiple-check
190 Check_Multiple_Batch_Data_Present ${reply}
192 Edit_Multiple_Merge_Data
193 [Documentation] Add another subelement named "test" to the element and check the reply.
194 Perform_Test merge-multiple-edit
196 Commit_Multiple_Modules_Merge_Edit
197 [Documentation] Commit the addition of the "test" subelement and check the reply.
198 Perform_Test merge-multiple-edit-commit
200 Check_Multiple_Modules_Merge_Edit
201 [Documentation] Check that the "test" subelement exists and has correct value for "port" subelement.
202 ${reply}= Load_And_Send_Message merge-multiple-edit-check
203 BuiltIn.Should_Contain ${reply} <id>test</id>
204 BuiltIn.Should_Contain ${reply} <model>Dixi</model>
205 BuiltIn.Should_Contain ${reply} <manufacturer>BMW</manufacturer>
206 BuiltIn.Should_Contain ${reply} <year>1928</year>
208 Update_Multiple_Modules_Merge
209 [Documentation] Update the value of the "port" subelement of the "test" subelement and check the reply.
210 Perform_Test merge-multiple-update
212 Commit_Multiple_Modules_Merge_Update
213 [Documentation] Commit the update and check the reply.
214 Perform_Test merge-multiple-update-commit
216 Check_Multiple_Modules_Merge_Update
217 [Documentation] Check that the value of the "port" was really updated.
218 ${reply}= Load_And_Send_Message merge-multiple-update-check
219 BuiltIn.Should_Contain ${reply} <id>test</id>
220 BuiltIn.Should_Contain ${reply} <model>Bentley Speed Six</model>
221 BuiltIn.Should_Contain ${reply} <manufacturer>Bentley</manufacturer>
222 BuiltIn.Should_Contain ${reply} <year>1930</year>
223 BuiltIn.Should_Not_Contain ${reply} <model>Dixi</model>
224 BuiltIn.Should_Not_Contain ${reply} <manufacturer>BMW</manufacturer>
225 BuiltIn.Should_Not_Contain ${reply} <year>1928</year>
227 Replace_Multiple_Modules_Merge
228 [Documentation] Replace the content of the "test" with another completely different and check the reply.
229 Perform_Test merge-multiple-replace
231 Commit_Multiple_Modules_Merge_Replace
232 [Documentation] Commit the replace and check the reply.
233 Perform_Test merge-multiple-replace-commit
235 Check_Multiple_Modules_Merge_Replace
236 [Documentation] Check that the new content is there and the old content is gone.
237 ${reply}= Load_And_Send_Message merge-multiple-replace-check
238 BuiltIn.Should_Contain ${reply} <id>REPLACE</id>
239 BuiltIn.Should_Contain ${reply} <manufacturer>FIAT</manufacturer>
240 BuiltIn.Should_Contain ${reply} <model>Panda</model>
241 BuiltIn.Should_Contain ${reply} <year>2003</year>
242 BuiltIn.Should_Contain ${reply} <car-id>REPLACE</car-id>
243 BuiltIn.Should_Not_Contain ${reply} <id>TOY001</id>
244 BuiltIn.Should_Not_Contain ${reply} <id>CUST001</id>
245 BuiltIn.Should_Not_Contain ${reply} <car-id>TOY001</car-id>
246 BuiltIn.Should_Not_Contain ${reply} <person-id>CUST001</person-id>
247 BuiltIn.Should_Not_Contain ${reply} <id>OLD001</id>
248 BuiltIn.Should_Not_Contain ${reply} <id>CUST002</id>
249 BuiltIn.Should_Not_Contain ${reply} <car-id>OLD001</car-id>
250 BuiltIn.Should_Not_Contain ${reply} <person-id>CUST002</person-id>
251 BuiltIn.Should_Not_Contain ${reply} <id>CAROLD</id>
252 BuiltIn.Should_Contain ${reply} <id>CUSTOLD</id>
253 BuiltIn.Should_Not_Contain ${reply} <car-id>CAROLD</car-id>
254 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTOLD</person-id>
255 BuiltIn.Should_Not_Contain ${reply} <id>CARYOUNG</id>
256 BuiltIn.Should_Contain ${reply} <id>CUSTYOUNG</id>
257 BuiltIn.Should_Not_Contain ${reply} <car-id>CARYOUNG</car-id>
258 BuiltIn.Should_Contain ${reply} <person-id>CUSTYOUNG</person-id>
259 BuiltIn.Should_Not_Contain ${reply} <id>CARMID</id>
260 BuiltIn.Should_Contain ${reply} <id>CUSTMID</id>
261 BuiltIn.Should_Not_Contain ${reply} <car-id>CARMID</car-id>
262 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTMID</person-id>
263 BuiltIn.Should_Not_Contain ${reply} <id>CAROLD2</id>
264 BuiltIn.Should_Contain ${reply} <id>CUSTOLD2</id>
265 BuiltIn.Should_Not_Contain ${reply} <car-id>CAROLD2</car-id>
266 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTOLD2</person-id>
267 BuiltIn.Should_Not_Contain ${reply} <id>CUSTBAD</id>
268 BuiltIn.Should_Not_Contain ${reply} <id>test</id>
271 [Documentation] Remove the testing elements and all their subelements and check the reply.
272 Perform_Test merge-multiple-remove
274 Commit_Test_Data_Removal
275 [Documentation] Commit the removal and check the reply.
276 Perform_Test merge-multiple-remove-commit
278 Delete_Not_Existing_Element
279 [Documentation] Attempt to delete the elements again and check that it fails with the correct error.
280 Perform_Test delete-not-existing
282 Commit_Delete_Not_Existing_Module
283 [Documentation] Attempt to commit and check the reply.
284 Perform_Test commit-no-transaction
286 Remove_Not_Existing_Module
287 [Documentation] Attempt to remove the "module" element again and check that the operation is "silently ignored".
288 Perform_Test remove-not-existing
290 Commit_Remove_Not_Existing_Module
291 [Documentation] Attempt to commit and check the reply.
292 Perform_Test remove-not-existing-commit
295 [Documentation] Close the session and check that it was closed properly.
296 Perform_Test close-session
301 [Documentation] Load the specified data from the data directory and return it.
302 ${data}= OperatingSystem.Get_File ${datadir}${/}${name}.${dataext}
305 Create_ODL_Netconf_Connection
306 [Arguments] ${host}=${CONTROLLER} ${port}=${ODL_NETCONF_PORT} ${user}=${ODL_NETCONF_USER} ${password}=${ODL_NETCONF_PASSWORD}
307 [Documentation] Open a netconf connecion to the given machine.
308 # The "-s netconf" flag (see the "SSHLibrary.Write" line below) is not
309 # supported by SSHLibrary, therefore we need to use this elaborate and
310 # pretty tricky way to connect to the ODL Netconf port.
311 # TODO: Extract into NetconfKeywords as there are other tests that are
312 # going to need to use this operation (Netconf Performance and Scaling
313 # comes to my mind now as one of the things tested is the performance
314 # of the direct netconf connection.
315 # TODO: Make this keyword return a dictionary object with all the
316 # data about the prepared connection neatly packaged. Make all
317 # the other keywords handling the connection accept such an
318 # object and pull the data out of it rather than relying on
319 # global variables. This will allow for tracking more Netconf
320 # connections, increasing utility.
321 ${control}= SSHLibrary.Open_Connection ${host} prompt=${ODL_SYSTEM_PROMPT} timeout=10s
322 Utils.Flexible_Controller_Login
323 BuiltIn.Set_Suite_Variable ${ssh_control} ${control}
324 ${netconf}= SSHLibrary.Open_Connection ${host} prompt=${ODL_SYSTEM_PROMPT} timeout=10s
325 Utils.Flexible_Controller_Login
326 BuiltIn.Set_Suite_Variable ${ssh_netconf} ${netconf}
327 BuiltIn.Set_Suite_Variable ${ssh_port} ${port}
328 BuiltIn.Set_Suite_Variable ${ssh_user} ${user}
329 BuiltIn.Set_Suite_Variable ${ssh_password} ${password}
331 Reopen_ODL_Netconf_Connection
332 [Documentation] Reopen a closed netconf connection.
333 SSHLibrary.Write sshpass -p ${ssh_password} ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${ssh_user}\@127.0.0.1 -p ${ssh_port} -s netconf
334 ${hello}= SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
335 SSHLibrary.Switch_Connection ${ssh_control}
336 ${pid}= SSHLibrary.Execute_Command ps -A | grep sshpass | cut -b 1-6
337 BuiltIn.Set_Suite_Variable ${ssh_netconf_pid} ${pid}
338 SSHLibrary.Switch_Connection ${ssh_netconf}
341 Open_ODL_Netconf_Connection
342 [Documentation] Open a prepared netconf connecion.
343 ${hello}= Reopen_ODL_Netconf_Connection
344 ${hello_message}= Get_Data hello
345 Transmit_Message ${hello_message}
349 [Arguments] ${message}
350 [Documentation] Transmit message to Netconf connection and discard the echo of the message.
351 SSHLibrary.Write ${message}
352 SSHLibrary.Write ${ODL_NETCONF_PROMPT}
353 SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
356 [Arguments] ${message}
357 [Documentation] Send message to Netconf connection and get the reply.
358 Transmit_Message ${message}
359 ${reply}= SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
363 [Arguments] ${searched_string}
364 [Documentation] Prepare the specified string for searching in Netconf connection replies.
365 ... The string passed to this keyword is coming from a data
366 ... file which has different end of line conventions than
367 ... the actual Netconf reply. This keyword patches the string
368 ... to match what Netconf actually returns.
369 ${result}= BuiltIn.Evaluate "\\r\\n".join("""${searched_string}""".split("\\n"))
372 Load_And_Send_Message
374 [Documentation] Load a message from the data file set, send it to Netconf and return the reply.
375 ${request}= Get_Data ${name}-request
376 ${reply}= Send_Message ${request}
381 [Documentation] Load the expected reply from the data file set and return it.
382 ${expected_reply}= Get_Data ${name}-reply
383 ${expected}= Prepare_For_Search ${expected_reply}
386 Abort_ODL_Netconf_Connection
387 [Documentation] Correctly close the Netconf connection and make sure it is really dead.
388 BuiltIn.Return_From_Keyword_If ${ssh_netconf_pid} == -1
389 ${kill_command}= BuiltIn.Set_Variable kill ${ssh_netconf_pid}
390 BuiltIn.Set_Suite_Variable ${ssh_netconf_pid} -1
391 SSHLibrary.Switch_Connection ${ssh_control}
392 SSHLibrary.Write ${kill_command}
393 SSHLibrary.Read_Until_Prompt
394 SSHLibrary.Switch_Connection ${ssh_netconf}
395 SSHLibrary.Read_Until_Prompt
397 Close_ODL_Netconf_Connection_Gracefully
398 Perform_Test close-session
399 Abort_ODL_Netconf_Connection
402 [Documentation] Setup resources and create session for Restconf checking.
403 SetupUtils.Setup_Utils_For_Setup_And_Teardown
404 RequestsLibrary.Create_Session config http://${CONTROLLER}:${RESTCONFPORT}${CONFIG_API} auth=${AUTH}
407 [Documentation] Close the Netconf connection and destroy all sessions in the requests library.
408 Abort_ODL_Netconf_Connection
409 RequestsLibrary.Delete_All_Sessions
411 Check_First_Batch_Data
412 [Arguments] ${reply} ${keyword}
413 BuiltIn.RunKeyword ${keyword} ${reply} <id>TOY001</id>
414 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUST001</id>
415 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>TOY001</car-id>
416 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUST001</person-id>
418 Check_First_Batch_Data_Present
420 Check_First_Batch_Data ${reply} BuiltIn.Should_Contain
422 Check_First_Batch_Data_Not_Present
424 Check_First_Batch_Data ${reply} BuiltIn.Should_Not_Contain
426 Check_Second_Batch_Data
427 [Arguments] ${reply} ${keyword}
428 BuiltIn.RunKeyword ${keyword} ${reply} <id>OLD001</id>
429 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUST002</id>
430 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>OLD001</car-id>
431 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUST002</person-id>
433 Check_Second_Batch_Data_Present
435 Check_Second_Batch_Data ${reply} BuiltIn.Should_Contain
437 Check_Multiple_Batch_Data
438 [Arguments] ${reply} ${keyword}
439 BuiltIn.RunKeyword ${keyword} ${reply} <id>CAROLD</id>
440 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTOLD</id>
441 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CAROLD</car-id>
442 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTOLD</person-id>
443 BuiltIn.RunKeyword ${keyword} ${reply} <id>CARYOUNG</id>
444 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTYOUNG</id>
445 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CARYOUNG</car-id>
446 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTYOUNG</person-id>
447 BuiltIn.RunKeyword ${keyword} ${reply} <id>CARMID</id>
448 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTMID</id>
449 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CARMID</car-id>
450 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTMID</person-id>
451 BuiltIn.RunKeyword ${keyword} ${reply} <id>CAROLD2</id>
452 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTOLD2</id>
453 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CAROLD2</car-id>
454 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTOLD2</person-id>
456 Check_Multiple_Batch_Data_Absent
458 Check_Multiple_Batch_Data ${reply} BuiltIn.Should_not_Contain
460 Check_Multiple_Batch_Data_Present
462 Check_Multiple_Batch_Data ${reply} BuiltIn.Should_Contain
465 [Arguments] ${reply} ${keyword}
466 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTBAD</id>
467 BuiltIn.RunKeyword ${keyword} ${reply} <id>test</id>
469 Check_Test_Objects_Absent
471 Check_First_Batch_Data_Not_Present ${reply}
472 Check_Second_Batch_Data ${reply} BuiltIn.Should_not_Contain
473 Check_Multiple_Batch_Data_Absent ${reply}
474 Check_Auxiliary_Data ${reply} BuiltIn.Should_not_Contain
475 BuiltIn.Should_not_Contain ${reply} <id>test</id>
477 Check_Test_Objects_Not_Present_In_Config
479 [Documentation] Use dataset with the specified name to get the configuration and check that none of our test objects are there.
480 ${reply}= Load_And_Send_Message ${name}
481 Check_Test_Objects_Absent ${reply}
482 BuiltIn.Should_not_Contain ${reply} <id>REPLACE</id>
487 [Documentation] Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.
488 ${actual}= Load_And_Send_Message ${name}
489 ${expected}= Load_Expected_Reply ${name}
490 ${newline}= BuiltIn.Evaluate "\\r\\n"
491 BuiltIn.Should_Be_Equal ${newline}${expected}${ODL_NETCONF_PROMPT} ${actual}
495 [Arguments] ${name} ${expected}
496 ${actual}= Load_And_Send_Message ${name}
497 BuiltIn.Should_Be_Equal ${expected} ${actual}