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").
30 Suite Setup Setup_Everything
31 Suite Teardown Teardown_Everything
32 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
33 Library RequestsLibrary
35 Resource ${CURDIR}/../../../libraries/FailFast.robot
36 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
37 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
38 Resource ${CURDIR}/../../../libraries/Utils.robot
39 Variables ${CURDIR}/../../../variables/Variables.py
42 ${datadir} ${CURDIR}/../../../variables/netconf/MDSAL
47 Connect_To_ODL_Netconf
48 [Documentation] Connect to ODL Netconf and fail if that is not possible.
49 Create_ODL_Netconf_Connection
50 Open_ODL_Netconf_Connection
53 [Documentation] Make sure the configuration has only the default elements in it.
54 Check_Test_Objects_Not_Present_In_Config get-config
56 Missing_Message_ID_Attribute
57 [Documentation] Check that messages with missing "message-ID" attribute are rejected with the correct error (RFC 6241, section 4.1).
58 Perform_Test missing-attr
60 Additional_Attributes_In_Message
61 [Documentation] Check that additional attributes in messages are returned properly (RFC 6241, sections 4.1 and 4.2).
62 ${reply}= Load_And_Send_Message additional-attr
63 BuiltIn.Should_Contain ${reply} xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
64 BuiltIn.Should_Contain ${reply} message-id="1"
65 BuiltIn.Should_Contain ${reply} attribute="something"
66 BuiltIn.Should_Contain ${reply} additional="otherthing"
67 BuiltIn.Should_Contain ${reply} xmlns:prefix="http://www.example.com/my-schema-example.html"
69 Send_Stuff_In_Undefined_Namespace
70 [Documentation] Try to send something within an undefined namespace and check the reply complains about the nonexistent namespace and element.
71 ${reply}= Load_And_Send_Message merge-nonexistent-namespace
72 BuiltIn.Set_Test_Variable ${bugno} 5125
73 BuiltIn.Should_Not_Contain ${reply} java.lang.NullPointerException
74 BuiltIn.Set_Test_Variable ${bugno} ${EMPTY}
75 BuiltIn.Should_Contain ${reply} urn:this:is:in:a:nonexistent:namespace
76 BuiltIn.Should_Contain ${reply} <rpc-error>
77 [Teardown] BuiltIn.Run_Keyword_If '${bugno}' != '${EMPTY}' Utils.Report_Failure_Due_To_Bug 5125
79 Edit_Config_First_Batch_Merge
80 [Documentation] Request a "merge" operation adding an element in candidate configuration and check the reply.
83 Get_Config_Running_To_Confirm_No_Edit_Before_Commit
84 [Documentation] Make sure the running configuration is still unchanged as the change was not commited yet.
85 Check_Test_Objects_Not_Present_In_Config get-config-no-edit-before-commit
88 [Documentation] Commit the change and check the reply.
89 Perform_Test commit-edit
91 First_Batch_In_Config_Running_To_Confirm_Edit_After_Commit
92 [Documentation] Check that the change is now in the configuration.
93 ${reply}= Load_And_Send_Message get-config-edit-after-commit
94 Check_First_Batch_Data_Present ${reply}
96 Terminate_Connection_Gracefully
97 [Documentation] Close the session and disconnect.
98 Close_ODL_Netconf_Connection_Gracefully
100 Reconnect_To_ODL_Netconf_After_Graceful_Session_End
101 [Documentation] Reconnect to ODL Netconf and fail if that is not possible.
102 Open_ODL_Netconf_Connection
104 First_Batch_In_Config_Running_After_Reconnect
105 [Documentation] Check that the change is now in the configuration.
106 ${reply}= Load_And_Send_Message get-config-edit-after-commit
107 Check_First_Batch_Data_Present ${reply}
109 Edit_Config_Create_Shall_Fail_Now
110 [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").
114 [Documentation] Delete the created element from the candidate configuration and check the reply.
117 Get_Config_Running_To_Confirm_No_Delete_Before_Commit
118 [Documentation] Make sure the element is still present in the running configuration as the delete command was not committed yet.
119 ${reply}= Load_And_Send_Message get-config-no-delete-before-commit
120 Check_First_Batch_Data_Present ${reply}
123 [Documentation] Commit the deletion of the element and check the reply.
124 Perform_Test commit-delete
126 Get_Config_Running_To_Confirm_Delete_After_Commit
127 [Documentation] Check that the element is gone.
128 Check_Test_Objects_Not_Present_In_Config get-config-delete-after-commit
130 Commit_No_Transaction
131 [Documentation] Attempt to perform "commit" when there are no changes in the candidate configuration and check that it returns OK status.
132 Perform_Test commit-no-transaction
134 Edit_Config_Second_Batch_Merge
135 [Documentation] Create an element to be discarded and check the reply.
138 Get_And_Check_Config_Candidate_For_Discard
139 [Documentation] Check that the element to be discarded is present in the candidate configuration.
140 ${reply}= Load_And_Send_Message get-config-candidate
141 Check_First_Batch_Data_Not_Present ${reply}
142 Check_Second_Batch_Data_Present ${reply}
144 Discard_Changes_Using_Discard_Request
145 [Documentation] Ask the server to discard the candidate and check the reply.
146 Perform_Test commit-discard
148 Get_And_Check_Config_Candidate_To_Confirm_Discard
149 [Documentation] Check that the element was really discarded.
150 Check_Test_Objects_Not_Present_In_Config get-config-candidate-discard
152 Edit_Config_Multiple_Batch_Merge_Create
153 [Documentation] Use a create request with the third batch to create the infrastructure.
154 Perform_Test merge-multiple-create
156 Edit_Config_Multiple_Batch_Merge_Third
157 [Documentation] Use a create request with the third batch to create the infrastructure.
158 Perform_Test merge-multiple-1
160 Edit_Config_Multiple_Batch_Merge_Fourth
161 [Documentation] Use a merge request with the third batch to create the infrastructure.
162 Perform_Test merge-multiple-2
164 Edit_Config_Multiple_Batch_Merge_Fifth
165 [Documentation] Add a "name4" subelement to the element and check the reply.
166 Perform_Test merge-multiple-3
168 Commit_Multiple_Merge
169 [Documentation] Commit the changes and check the reply.
170 Perform_Test merge-multiple-commit
172 Multiple_Batch_Data_In_Running_Config
173 [Documentation] Check that the 3 subelements are now present in the running configuration.
174 ${reply}= Load_And_Send_Message merge-multiple-check
175 Check_Multiple_Batch_Data_Present ${reply}
177 Abort_Connection_To_Simulate_Session_Failure
178 [Documentation] Simulate session failure by disconnecting without terminating the session.
179 Abort_ODL_Netconf_Connection
181 Reconnect_To_ODL_Netconf_After_Session_Failure
182 [Documentation] Reconnect to ODL Netconf and fail if that is not possible.
183 Open_ODL_Netconf_Connection
185 Multiple_Batch_Data_In_Running_Config_After_Session_Failure
186 [Documentation] Check that the 3 subelements are now present in the running configuration.
187 ${reply}= Load_And_Send_Message merge-multiple-check
188 Check_Multiple_Batch_Data_Present ${reply}
190 Edit_Multiple_Merge_Data
191 [Documentation] Add another subelement named "test" to the element and check the reply.
192 Perform_Test merge-multiple-edit
194 Commit_Multiple_Modules_Merge_Edit
195 [Documentation] Commit the addition of the "test" subelement and check the reply.
196 Perform_Test merge-multiple-edit-commit
198 Check_Multiple_Modules_Merge_Edit
199 [Documentation] Check that the "test" subelement exists and has correct value for "port" subelement.
200 ${reply}= Load_And_Send_Message merge-multiple-edit-check
201 BuiltIn.Should_Contain ${reply} <id>test</id>
202 BuiltIn.Should_Contain ${reply} <model>Dixi</model>
203 BuiltIn.Should_Contain ${reply} <manufacturer>BMW</manufacturer>
204 BuiltIn.Should_Contain ${reply} <year>1928</year>
206 Update_Multiple_Modules_Merge
207 [Documentation] Update the value of the "port" subelement of the "test" subelement and check the reply.
208 Perform_Test merge-multiple-update
210 Commit_Multiple_Modules_Merge_Update
211 [Documentation] Commit the update and check the reply.
212 Perform_Test merge-multiple-update-commit
214 Check_Multiple_Modules_Merge_Update
215 [Documentation] Check that the value of the "port" was really updated.
216 ${reply}= Load_And_Send_Message merge-multiple-update-check
217 BuiltIn.Should_Contain ${reply} <id>test</id>
218 BuiltIn.Should_Contain ${reply} <model>Bentley Speed Six</model>
219 BuiltIn.Should_Contain ${reply} <manufacturer>Bentley</manufacturer>
220 BuiltIn.Should_Contain ${reply} <year>1930</year>
221 BuiltIn.Should_Not_Contain ${reply} <model>Dixi</model>
222 BuiltIn.Should_Not_Contain ${reply} <manufacturer>BMW</manufacturer>
223 BuiltIn.Should_Not_Contain ${reply} <year>1928</year>
225 Replace_Multiple_Modules_Merge
226 [Documentation] Replace the content of the "test" with another completely different and check the reply.
227 Perform_Test merge-multiple-replace
229 Commit_Multiple_Modules_Merge_Replace
230 [Documentation] Commit the replace and check the reply.
231 Perform_Test merge-multiple-replace-commit
233 Check_Multiple_Modules_Merge_Replace
234 [Documentation] Check that the new content is there and the old content is gone.
235 ${reply}= Load_And_Send_Message merge-multiple-replace-check
236 BuiltIn.Should_Contain ${reply} <id>REPLACE</id>
237 BuiltIn.Should_Contain ${reply} <manufacturer>FIAT</manufacturer>
238 BuiltIn.Should_Contain ${reply} <model>Panda</model>
239 BuiltIn.Should_Contain ${reply} <year>2003</year>
240 BuiltIn.Should_Contain ${reply} <car-id>REPLACE</car-id>
241 BuiltIn.Should_Not_Contain ${reply} <id>TOY001</id>
242 BuiltIn.Should_Not_Contain ${reply} <id>CUST001</id>
243 BuiltIn.Should_Not_Contain ${reply} <car-id>TOY001</car-id>
244 BuiltIn.Should_Not_Contain ${reply} <person-id>CUST001</person-id>
245 BuiltIn.Should_Not_Contain ${reply} <id>OLD001</id>
246 BuiltIn.Should_Not_Contain ${reply} <id>CUST002</id>
247 BuiltIn.Should_Not_Contain ${reply} <car-id>OLD001</car-id>
248 BuiltIn.Should_Not_Contain ${reply} <person-id>CUST002</person-id>
249 BuiltIn.Should_Not_Contain ${reply} <id>CAROLD</id>
250 BuiltIn.Should_Contain ${reply} <id>CUSTOLD</id>
251 BuiltIn.Should_Not_Contain ${reply} <car-id>CAROLD</car-id>
252 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTOLD</person-id>
253 BuiltIn.Should_Not_Contain ${reply} <id>CARYOUNG</id>
254 BuiltIn.Should_Contain ${reply} <id>CUSTYOUNG</id>
255 BuiltIn.Should_Not_Contain ${reply} <car-id>CARYOUNG</car-id>
256 BuiltIn.Should_Contain ${reply} <person-id>CUSTYOUNG</person-id>
257 BuiltIn.Should_Not_Contain ${reply} <id>CARMID</id>
258 BuiltIn.Should_Contain ${reply} <id>CUSTMID</id>
259 BuiltIn.Should_Not_Contain ${reply} <car-id>CARMID</car-id>
260 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTMID</person-id>
261 BuiltIn.Should_Not_Contain ${reply} <id>CAROLD2</id>
262 BuiltIn.Should_Contain ${reply} <id>CUSTOLD2</id>
263 BuiltIn.Should_Not_Contain ${reply} <car-id>CAROLD2</car-id>
264 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTOLD2</person-id>
265 BuiltIn.Should_Not_Contain ${reply} <id>CUSTBAD</id>
266 BuiltIn.Should_Not_Contain ${reply} <id>test</id>
269 [Documentation] Remove the testing elements and all their subelements and check the reply.
270 Perform_Test merge-multiple-remove
272 Commit_Test_Data_Removal
273 [Documentation] Commit the removal and check the reply.
274 Perform_Test merge-multiple-remove-commit
276 Delete_Not_Existing_Element
277 [Documentation] Attempt to delete the elements again and check that it fails with the correct error.
278 Perform_Test delete-not-existing
280 Commit_Delete_Not_Existing_Module
281 [Documentation] Attempt to commit and check the reply.
282 Perform_Test commit-no-transaction
284 Remove_Not_Existing_Module
285 [Documentation] Attempt to remove the "module" element again and check that the operation is "silently ignored".
286 Perform_Test remove-not-existing
288 Commit_Remove_Not_Existing_Module
289 [Documentation] Attempt to commit and check the reply.
290 Perform_Test remove-not-existing-commit
293 [Documentation] Close the session and check that it was closed properly.
294 Perform_Test close-session
299 [Documentation] Load the specified data from the data directory and return it.
300 ${data}= OperatingSystem.Get_File ${datadir}${/}${name}.${dataext}
303 Create_ODL_Netconf_Connection
304 [Arguments] ${host}=${CONTROLLER} ${port}=${ODL_NETCONF_PORT} ${user}=${ODL_NETCONF_USER} ${password}=${ODL_NETCONF_PASSWORD}
305 [Documentation] Open a netconf connecion to the given machine.
306 # The "-s netconf" flag (see the "SSHLibrary.Write" line below) is not
307 # supported by SSHLibrary, therefore we need to use this elaborate and
308 # pretty tricky way to connect to the ODL Netconf port.
309 # TODO: Extract into NetconfKeywords as there are other tests that are
310 # going to need to use this operation (Netconf Performance and Scaling
311 # comes to my mind now as one of the things tested is the performance
312 # of the direct netconf connection.
313 # TODO: Make this keyword return a dictionary object with all the
314 # data about the prepared connection neatly packaged. Make all
315 # the other keywords handling the connection accept such an
316 # object and pull the data out of it rather than relying on
317 # global variables. This will allow for tracking more Netconf
318 # connections, increasing utility.
319 ${control}= SSHLibrary.Open_Connection ${host} prompt=${ODL_SYSTEM_PROMPT} timeout=10s
320 Utils.Flexible_Controller_Login
321 BuiltIn.Set_Suite_Variable ${ssh_control} ${control}
322 ${netconf}= SSHLibrary.Open_Connection ${host} prompt=${ODL_SYSTEM_PROMPT} timeout=10s
323 Utils.Flexible_Controller_Login
324 BuiltIn.Set_Suite_Variable ${ssh_netconf} ${netconf}
325 BuiltIn.Set_Suite_Variable ${ssh_port} ${port}
326 BuiltIn.Set_Suite_Variable ${ssh_user} ${user}
327 BuiltIn.Set_Suite_Variable ${ssh_password} ${password}
329 Reopen_ODL_Netconf_Connection
330 [Documentation] Reopen a closed netconf connection.
331 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
332 ${hello}= SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
333 SSHLibrary.Switch_Connection ${ssh_control}
334 ${pid}= SSHLibrary.Execute_Command ps -A | grep sshpass | cut -b 1-6
335 BuiltIn.Set_Suite_Variable ${ssh_netconf_pid} ${pid}
336 SSHLibrary.Switch_Connection ${ssh_netconf}
339 Open_ODL_Netconf_Connection
340 [Documentation] Open a prepared netconf connecion.
341 ${hello}= Reopen_ODL_Netconf_Connection
342 ${hello_message}= Get_Data hello
343 Transmit_Message ${hello_message}
347 [Arguments] ${message}
348 [Documentation] Transmit message to Netconf connection and discard the echo of the message.
349 SSHLibrary.Write ${message}
350 SSHLibrary.Write ${ODL_NETCONF_PROMPT}
351 SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
354 [Arguments] ${message}
355 [Documentation] Send message to Netconf connection and get the reply.
356 Transmit_Message ${message}
357 ${reply}= SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
361 [Arguments] ${searched_string}
362 [Documentation] Prepare the specified string for searching in Netconf connection replies.
363 ... The string passed to this keyword is coming from a data
364 ... file which has different end of line conventions than
365 ... the actual Netconf reply. This keyword patches the string
366 ... to match what Netconf actually returns.
367 ${result}= BuiltIn.Evaluate "\\r\\n".join("""${searched_string}""".split("\\n"))
370 Load_And_Send_Message
372 [Documentation] Load a message from the data file set, send it to Netconf and return the reply.
373 ${request}= Get_Data ${name}-request
374 ${reply}= Send_Message ${request}
379 [Documentation] Load the expected reply from the data file set and return it.
380 ${expected_reply}= Get_Data ${name}-reply
381 ${expected}= Prepare_For_Search ${expected_reply}
384 Abort_ODL_Netconf_Connection
385 [Documentation] Correctly close the Netconf connection and make sure it is really dead.
386 BuiltIn.Return_From_Keyword_If ${ssh_netconf_pid} == -1
387 ${kill_command}= BuiltIn.Set_Variable kill ${ssh_netconf_pid}
388 BuiltIn.Set_Suite_Variable ${ssh_netconf_pid} -1
389 SSHLibrary.Switch_Connection ${ssh_control}
390 SSHLibrary.Write ${kill_command}
391 SSHLibrary.Read_Until_Prompt
392 SSHLibrary.Switch_Connection ${ssh_netconf}
393 SSHLibrary.Read_Until_Prompt
395 Close_ODL_Netconf_Connection_Gracefully
396 Perform_Test close-session
397 Abort_ODL_Netconf_Connection
400 [Documentation] Setup resources and create session for Restconf checking.
401 SetupUtils.Setup_Utils_For_Setup_And_Teardown
402 RequestsLibrary.Create_Session config http://${CONTROLLER}:${RESTCONFPORT}${CONFIG_API} auth=${AUTH}
405 [Documentation] Close the Netconf connection and destroy all sessions in the requests library.
406 Abort_ODL_Netconf_Connection
407 RequestsLibrary.Delete_All_Sessions
409 Check_First_Batch_Data
410 [Arguments] ${reply} ${keyword}
411 BuiltIn.RunKeyword ${keyword} ${reply} <id>TOY001</id>
412 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUST001</id>
413 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>TOY001</car-id>
414 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUST001</person-id>
416 Check_First_Batch_Data_Present
418 Check_First_Batch_Data ${reply} BuiltIn.Should_Contain
420 Check_First_Batch_Data_Not_Present
422 Check_First_Batch_Data ${reply} BuiltIn.Should_Not_Contain
424 Check_Second_Batch_Data
425 [Arguments] ${reply} ${keyword}
426 BuiltIn.RunKeyword ${keyword} ${reply} <id>OLD001</id>
427 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUST002</id>
428 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>OLD001</car-id>
429 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUST002</person-id>
431 Check_Second_Batch_Data_Present
433 Check_Second_Batch_Data ${reply} BuiltIn.Should_Contain
435 Check_Multiple_Batch_Data
436 [Arguments] ${reply} ${keyword}
437 BuiltIn.RunKeyword ${keyword} ${reply} <id>CAROLD</id>
438 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTOLD</id>
439 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CAROLD</car-id>
440 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTOLD</person-id>
441 BuiltIn.RunKeyword ${keyword} ${reply} <id>CARYOUNG</id>
442 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTYOUNG</id>
443 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CARYOUNG</car-id>
444 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTYOUNG</person-id>
445 BuiltIn.RunKeyword ${keyword} ${reply} <id>CARMID</id>
446 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTMID</id>
447 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CARMID</car-id>
448 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTMID</person-id>
449 BuiltIn.RunKeyword ${keyword} ${reply} <id>CAROLD2</id>
450 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTOLD2</id>
451 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CAROLD2</car-id>
452 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTOLD2</person-id>
454 Check_Multiple_Batch_Data_Absent
456 Check_Multiple_Batch_Data ${reply} BuiltIn.Should_not_Contain
458 Check_Multiple_Batch_Data_Present
460 Check_Multiple_Batch_Data ${reply} BuiltIn.Should_Contain
463 [Arguments] ${reply} ${keyword}
464 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTBAD</id>
465 BuiltIn.RunKeyword ${keyword} ${reply} <id>test</id>
467 Check_Test_Objects_Absent
469 Check_First_Batch_Data_Not_Present ${reply}
470 Check_Second_Batch_Data ${reply} BuiltIn.Should_not_Contain
471 Check_Multiple_Batch_Data_Absent ${reply}
472 Check_Auxiliary_Data ${reply} BuiltIn.Should_not_Contain
473 BuiltIn.Should_not_Contain ${reply} <id>test</id>
475 Check_Test_Objects_Not_Present_In_Config
477 [Documentation] Use dataset with the specified name to get the configuration and check that none of our test objects are there.
478 ${reply}= Load_And_Send_Message ${name}
479 Check_Test_Objects_Absent ${reply}
480 BuiltIn.Should_not_Contain ${reply} <id>REPLACE</id>
485 [Documentation] Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.
486 ${actual}= Load_And_Send_Message ${name}
487 ${expected}= Load_Expected_Reply ${name}
488 ${newline}= BuiltIn.Evaluate "\\r\\n"
489 BuiltIn.Should_Be_Equal ${newline}${expected}${ODL_NETCONF_PROMPT} ${actual}
493 [Arguments] ${name} ${expected}
494 ${actual}= Load_And_Send_Message ${name}
495 BuiltIn.Should_Be_Equal ${expected} ${actual}