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 Test Teardown SetupUtils.Teardown_Test_Show_Bugs_If_Test_Failed
36 Library RequestsLibrary
40 Resource ${CURDIR}/../../../libraries/CompareStream.robot
41 Resource ${CURDIR}/../../../libraries/FailFast.robot
42 Resource ${CURDIR}/../../../libraries/SetupUtils.robot
43 Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
44 Resource ${CURDIR}/../../../libraries/Utils.robot
45 Variables ${CURDIR}/../../../variables/Variables.py
48 ${datadir} ${CURDIR}/../../../variables/netconf/MDSAL
53 Connect_To_ODL_Netconf
54 [Documentation] Connect to ODL Netconf and fail if that is not possible.
55 Create_ODL_Netconf_Connection
56 Open_ODL_Netconf_Connection
59 [Documentation] Make sure the configuration has only the default elements in it.
60 Check_Test_Objects_Not_Present_In_Config get-config
62 Missing_Message_ID_Attribute
63 [Documentation] Check that messages with missing "message-ID" attribute are rejected with the correct error (RFC 6241, section 4.1).
64 Perform_Test missing-attr
66 Additional_Attributes_In_Message
67 [Documentation] Check that additional attributes in messages are returned properly (RFC 6241, sections 4.1 and 4.2).
68 ${reply}= Load_And_Send_Message additional-attr
69 BuiltIn.Should_Contain ${reply} xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
70 BuiltIn.Should_Contain ${reply} message-id="1"
71 BuiltIn.Should_Contain ${reply} attribute="something"
72 BuiltIn.Should_Contain ${reply} additional="otherthing"
73 BuiltIn.Should_Contain ${reply} xmlns:prefix="http://www.example.com/my-schema-example.html"
75 Send_Stuff_In_Undefined_Namespace
76 [Documentation] Try to send something within an undefined namespace and check the reply complains about the nonexistent namespace and element.
77 ${reply}= Load_And_Send_Message merge-nonexistent-namespace
78 SetupUtils.Set_Known_Bug_Id 5125
79 BuiltIn.Should_Not_Contain ${reply} java.lang.NullPointerException
80 SetupUtils.Set_Unknown_Bug_Id
81 BuiltIn.Should_Contain ${reply} urn:this:is:in:a:nonexistent:namespace
82 BuiltIn.Should_Contain ${reply} <rpc-error>
84 Edit_Config_First_Batch_Merge
85 [Documentation] Request a "merge" operation adding an element in candidate configuration and check the reply.
88 Get_Config_Running_To_Confirm_No_Edit_Before_Commit
89 [Documentation] Make sure the running configuration is still unchanged as the change was not commited yet.
90 Check_Test_Objects_Not_Present_In_Config get-config-no-edit-before-commit
93 [Documentation] Commit the change and check the reply.
94 Perform_Test commit-edit
96 First_Batch_In_Config_Running_To_Confirm_Edit_After_Commit
97 [Documentation] Check that the change is now in the configuration.
98 ${reply}= Load_And_Send_Message get-config-edit-after-commit
99 Check_First_Batch_Data_Present ${reply}
101 Terminate_Connection_Gracefully
102 [Documentation] Close the session and disconnect.
103 Close_ODL_Netconf_Connection_Gracefully
105 Reconnect_To_ODL_Netconf_After_Graceful_Session_End
106 [Documentation] Reconnect to ODL Netconf and fail if that is not possible.
107 Open_ODL_Netconf_Connection
109 First_Batch_In_Config_Running_After_Reconnect
110 [Documentation] Check that the change is now in the configuration.
111 ${reply}= Load_And_Send_Message get-config-edit-after-commit
112 Check_First_Batch_Data_Present ${reply}
114 Edit_Config_Create_Shall_Fail_Now
115 [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").
119 [Documentation] Delete the created element from the candidate configuration and check the reply.
122 Get_Config_Running_To_Confirm_No_Delete_Before_Commit
123 [Documentation] Make sure the element is still present in the running configuration as the delete command was not committed yet.
124 ${reply}= Load_And_Send_Message get-config-no-delete-before-commit
125 Check_First_Batch_Data_Present ${reply}
128 [Documentation] Commit the deletion of the element and check the reply.
129 Perform_Test commit-delete
131 Get_Config_Running_To_Confirm_Delete_After_Commit
132 [Documentation] Check that the element is gone.
133 Check_Test_Objects_Not_Present_In_Config get-config-delete-after-commit
135 Commit_No_Transaction
136 [Documentation] Attempt to perform "commit" when there are no changes in the candidate configuration and check that it returns OK status.
137 Perform_Test commit-no-transaction
138 [Teardown] Utils.Report_Failure_Due_To_Bug 4455
140 Edit_Config_Second_Batch_Merge
141 [Documentation] Create an element to be discarded and check the reply.
144 Get_And_Check_Config_Candidate_For_Discard
145 [Documentation] Check that the element to be discarded is present in the candidate configuration.
146 ${reply}= Load_And_Send_Message get-config-candidate
147 Check_First_Batch_Data_Not_Present ${reply}
148 Check_Second_Batch_Data_Present ${reply}
150 Discard_Changes_Using_Discard_Request
151 [Documentation] Ask the server to discard the candidate and check the reply.
152 Perform_Test commit-discard
154 Get_And_Check_Config_Candidate_To_Confirm_Discard
155 [Documentation] Check that the element was really discarded.
156 Check_Test_Objects_Not_Present_In_Config get-config-candidate-discard
158 Edit_Config_Multiple_Batch_Merge_Create
159 [Documentation] Use a create request with the third batch to create the infrastructure.
160 Perform_Test merge-multiple-create
162 Edit_Config_Multiple_Batch_Merge_Third
163 [Documentation] Use a create request with the third batch to create the infrastructure.
164 Perform_Test merge-multiple-1
166 Edit_Config_Multiple_Batch_Merge_Fourth
167 [Documentation] Use a merge request with the third batch to create the infrastructure.
168 Perform_Test merge-multiple-2
170 Edit_Config_Multiple_Batch_Merge_Fifth
171 [Documentation] Add a "name4" subelement to the element and check the reply.
172 Perform_Test merge-multiple-3
174 Commit_Multiple_Merge
175 [Documentation] Commit the changes and check the reply.
176 Perform_Test merge-multiple-commit
178 Multiple_Batch_Data_In_Running_Config
179 [Documentation] Check that the 3 subelements are now present in the running configuration.
180 ${reply}= Load_And_Send_Message merge-multiple-check
181 Check_Multiple_Batch_Data_Present ${reply}
183 Abort_Connection_To_Simulate_Session_Failure
184 [Documentation] Simulate session failure by disconnecting without terminating the session.
185 Abort_ODL_Netconf_Connection
187 Reconnect_To_ODL_Netconf_After_Session_Failure
188 [Documentation] Reconnect to ODL Netconf and fail if that is not possible.
189 Open_ODL_Netconf_Connection
191 Multiple_Batch_Data_In_Running_Config_After_Session_Failure
192 [Documentation] Check that the 3 subelements are now present in the running configuration.
193 ${reply}= Load_And_Send_Message merge-multiple-check
194 Check_Multiple_Batch_Data_Present ${reply}
196 Edit_Multiple_Merge_Data
197 [Documentation] Add another subelement named "test" to the element and check the reply.
198 Perform_Test merge-multiple-edit
200 Commit_Multiple_Modules_Merge_Edit
201 [Documentation] Commit the addition of the "test" subelement and check the reply.
202 Perform_Test merge-multiple-edit-commit
204 Check_Multiple_Modules_Merge_Edit
205 [Documentation] Check that the "test" subelement exists and has correct value for "port" subelement.
206 ${reply}= Load_And_Send_Message merge-multiple-edit-check
207 BuiltIn.Should_Contain ${reply} <id>test</id>
208 BuiltIn.Should_Contain ${reply} <model>Dixi</model>
209 BuiltIn.Should_Contain ${reply} <manufacturer>BMW</manufacturer>
210 BuiltIn.Should_Contain ${reply} <year>1928</year>
212 Update_Multiple_Modules_Merge
213 [Documentation] Update the value of the "port" subelement of the "test" subelement and check the reply.
214 Perform_Test merge-multiple-update
216 Commit_Multiple_Modules_Merge_Update
217 [Documentation] Commit the update and check the reply.
218 Perform_Test merge-multiple-update-commit
220 Check_Multiple_Modules_Merge_Update
221 [Documentation] Check that the value of the "port" was really updated.
222 ${reply}= Load_And_Send_Message merge-multiple-update-check
223 BuiltIn.Should_Contain ${reply} <id>test</id>
224 BuiltIn.Should_Contain ${reply} <model>Bentley Speed Six</model>
225 BuiltIn.Should_Contain ${reply} <manufacturer>Bentley</manufacturer>
226 BuiltIn.Should_Contain ${reply} <year>1930</year>
227 BuiltIn.Should_Not_Contain ${reply} <model>Dixi</model>
228 BuiltIn.Should_Not_Contain ${reply} <manufacturer>BMW</manufacturer>
229 BuiltIn.Should_Not_Contain ${reply} <year>1928</year>
231 Replace_Multiple_Modules_Merge
232 [Documentation] Replace the content of the "test" with another completely different and check the reply.
233 Perform_Test merge-multiple-replace
235 Commit_Multiple_Modules_Merge_Replace
236 [Documentation] Commit the replace and check the reply.
237 Perform_Test merge-multiple-replace-commit
239 Check_Multiple_Modules_Merge_Replace
240 [Documentation] Check that the new content is there and the old content is gone.
241 ${reply}= Load_And_Send_Message merge-multiple-replace-check
242 BuiltIn.Should_Contain ${reply} <id>REPLACE</id>
243 BuiltIn.Should_Contain ${reply} <manufacturer>FIAT</manufacturer>
244 BuiltIn.Should_Contain ${reply} <model>Panda</model>
245 BuiltIn.Should_Contain ${reply} <year>2003</year>
246 BuiltIn.Should_Contain ${reply} <car-id>REPLACE</car-id>
247 BuiltIn.Should_Not_Contain ${reply} <id>TOY001</id>
248 BuiltIn.Should_Not_Contain ${reply} <id>CUST001</id>
249 BuiltIn.Should_Not_Contain ${reply} <car-id>TOY001</car-id>
250 BuiltIn.Should_Not_Contain ${reply} <person-id>CUST001</person-id>
251 BuiltIn.Should_Not_Contain ${reply} <id>OLD001</id>
252 BuiltIn.Should_Not_Contain ${reply} <id>CUST002</id>
253 BuiltIn.Should_Not_Contain ${reply} <car-id>OLD001</car-id>
254 BuiltIn.Should_Not_Contain ${reply} <person-id>CUST002</person-id>
255 BuiltIn.Should_Not_Contain ${reply} <id>CAROLD</id>
256 BuiltIn.Should_Contain ${reply} <id>CUSTOLD</id>
257 BuiltIn.Should_Not_Contain ${reply} <car-id>CAROLD</car-id>
258 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTOLD</person-id>
259 BuiltIn.Should_Not_Contain ${reply} <id>CARYOUNG</id>
260 BuiltIn.Should_Contain ${reply} <id>CUSTYOUNG</id>
261 BuiltIn.Should_Not_Contain ${reply} <car-id>CARYOUNG</car-id>
262 BuiltIn.Should_Contain ${reply} <person-id>CUSTYOUNG</person-id>
263 BuiltIn.Should_Not_Contain ${reply} <id>CARMID</id>
264 BuiltIn.Should_Contain ${reply} <id>CUSTMID</id>
265 BuiltIn.Should_Not_Contain ${reply} <car-id>CARMID</car-id>
266 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTMID</person-id>
267 BuiltIn.Should_Not_Contain ${reply} <id>CAROLD2</id>
268 BuiltIn.Should_Contain ${reply} <id>CUSTOLD2</id>
269 BuiltIn.Should_Not_Contain ${reply} <car-id>CAROLD2</car-id>
270 BuiltIn.Should_Not_Contain ${reply} <person-id>CUSTOLD2</person-id>
271 BuiltIn.Should_Not_Contain ${reply} <id>CUSTBAD</id>
272 BuiltIn.Should_Not_Contain ${reply} <id>test</id>
275 [Documentation] Remove the testing elements and all their subelements and check the reply.
276 Perform_Test merge-multiple-remove
278 Commit_Test_Data_Removal
279 [Documentation] Commit the removal and check the reply.
280 Perform_Test merge-multiple-remove-commit
282 Connector_Simplified_Pattern
283 [Documentation] Several requests in a (simplified) pattern typical for requests from netconf-connector.
284 Perform_Test none-replace
285 Perform_Test commit-edit
287 Perform_Test commit-edit
290 [Documentation] Send (checking replies) series of netconf messages to trigger
291 ... https://bugs.opendaylight.org/show_bug.cgi?id=7791
292 Perform_Test bug7791-1
293 Perform_Test bug7791-2
294 Perform_Test commit-edit
296 Perform_Test commit-edit
297 [Teardown] Utils.Report_Failure_Due_To_Bug 7791
299 Delete_Not_Existing_Element
300 [Documentation] Attempt to delete the elements again and check that it fails with the correct error.
301 Perform_Test delete-not-existing
303 Commit_Delete_Not_Existing_Module
304 [Documentation] Attempt to commit and check the reply.
305 Perform_Test commit-no-transaction
306 [Teardown] Utils.Report_Failure_Due_To_Bug 4455
308 Remove_Not_Existing_Module
309 [Documentation] Attempt to remove the "module" element again and check that the operation is "silently ignored".
310 Perform_Test remove-not-existing
312 Commit_Remove_Not_Existing_Module
313 [Documentation] Attempt to commit and check the reply.
314 Perform_Test remove-not-existing-commit
315 [Teardown] Utils.Report_Failure_Due_To_Bug 4455
318 [Documentation] Close the session and check that it was closed properly.
319 Perform_Test close-session
324 [Documentation] Load the specified data from the data directory and return it.
325 ${data}= OperatingSystem.Get_File ${datadir}${/}${name}.${dataext}
328 Create_ODL_Netconf_Connection
329 [Arguments] ${host}=${ODL_SYSTEM_IP} ${port}=${ODL_NETCONF_MDSAL_PORT} ${user}=${ODL_NETCONF_USER} ${password}=${ODL_NETCONF_PASSWORD}
330 [Documentation] Open a netconf connecion to the given machine.
331 # The "-s netconf" flag (see the "SSHLibrary.Write" line below) is not
332 # supported by SSHLibrary, therefore we need to use this elaborate and
333 # pretty tricky way to connect to the ODL Netconf port.
334 # TODO: Extract into NetconfKeywords as there are other tests that are
335 # going to need to use this operation (Netconf Performance and Scaling
336 # comes to my mind now as one of the things tested is the performance
337 # of the direct netconf connection.
338 # TODO: Make this keyword return a dictionary object with all the
339 # data about the prepared connection neatly packaged. Make all
340 # the other keywords handling the connection accept such an
341 # object and pull the data out of it rather than relying on
342 # global variables. This will allow for tracking more Netconf
343 # connections, increasing utility.
344 ${control}= SSHLibrary.Open_Connection ${host} prompt=${ODL_SYSTEM_PROMPT} timeout=60s
345 SSHKeywords.Flexible_Controller_Login
346 BuiltIn.Set_Suite_Variable ${ssh_control} ${control}
347 ${netconf}= SSHLibrary.Open_Connection ${host} prompt=${ODL_SYSTEM_PROMPT} timeout=60s
348 SSHKeywords.Flexible_Controller_Login
349 BuiltIn.Set_Suite_Variable ${ssh_netconf} ${netconf}
350 BuiltIn.Set_Suite_Variable ${ssh_port} ${port}
351 BuiltIn.Set_Suite_Variable ${ssh_user} ${user}
352 BuiltIn.Set_Suite_Variable ${ssh_password} ${password}
354 Reopen_ODL_Netconf_Connection
355 [Documentation] Reopen a closed netconf connection.
356 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
357 ${hello}= SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
358 SSHLibrary.Switch_Connection ${ssh_control}
359 ${pid}= SSHLibrary.Execute_Command ps -A | grep sshpass | cut -b 1-6
360 BuiltIn.Set_Suite_Variable ${ssh_netconf_pid} ${pid}
361 SSHLibrary.Switch_Connection ${ssh_netconf}
364 Open_ODL_Netconf_Connection
365 [Documentation] Open a prepared netconf connecion.
366 ${hello}= Reopen_ODL_Netconf_Connection
367 ${hello_message}= Get_Data hello
368 Transmit_Message ${hello_message}
372 [Arguments] ${message}
373 [Documentation] Transmit message to Netconf connection and discard the echo of the message.
374 SSHLibrary.Write ${message}
375 SSHLibrary.Write ${ODL_NETCONF_PROMPT}
376 SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
379 [Arguments] ${message}
380 [Documentation] Send message to Netconf connection and get the reply.
381 Transmit_Message ${message}
382 ${reply}= SSHLibrary.Read_Until ${ODL_NETCONF_PROMPT}
386 [Arguments] ${searched_string}
387 [Documentation] Prepare the specified string for searching in Netconf connection replies.
388 ... The string passed to this keyword is coming from a data
389 ... file which has different end of line conventions than
390 ... the actual Netconf reply. This keyword patches the string
391 ... to match what Netconf actually returns.
392 ${result}= BuiltIn.Evaluate "\\r\\n".join("""${searched_string}""".split("\\n"))
395 Load_And_Send_Message
397 [Documentation] Load a message from the data file set, send it to Netconf and return the reply.
398 ${request}= Get_Data ${name}-request
399 ${reply}= Send_Message ${request}
404 [Documentation] Load the expected reply from the data file set and return it.
405 ${expected_reply}= Get_Data ${name}-reply
406 [Return] ${expected_reply}
408 Abort_ODL_Netconf_Connection
409 [Documentation] Correctly close the Netconf connection and make sure it is really dead.
410 BuiltIn.Return_From_Keyword_If ${ssh_netconf_pid} == -1
411 ${kill_command}= BuiltIn.Set_Variable kill ${ssh_netconf_pid}
412 BuiltIn.Set_Suite_Variable ${ssh_netconf_pid} -1
413 SSHLibrary.Switch_Connection ${ssh_control}
414 SSHLibrary.Write ${kill_command}
415 SSHLibrary.Read_Until_Prompt
416 SSHLibrary.Switch_Connection ${ssh_netconf}
417 SSHLibrary.Read_Until_Prompt
419 Close_ODL_Netconf_Connection_Gracefully
420 Perform_Test close-session
421 Abort_ODL_Netconf_Connection
424 [Documentation] Setup resources and create session for Restconf checking.
425 SetupUtils.Setup_Utils_For_Setup_And_Teardown
426 RequestsLibrary.Create_Session config http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${CONFIG_API} auth=${AUTH}
429 [Documentation] Close the Netconf connection and destroy all sessions in the requests library.
430 Abort_ODL_Netconf_Connection
431 RequestsLibrary.Delete_All_Sessions
433 Check_First_Batch_Data
434 [Arguments] ${reply} ${keyword}
435 BuiltIn.RunKeyword ${keyword} ${reply} <id>TOY001</id>
436 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUST001</id>
437 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>TOY001</car-id>
438 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUST001</person-id>
440 Check_First_Batch_Data_Present
442 Check_First_Batch_Data ${reply} BuiltIn.Should_Contain
444 Check_First_Batch_Data_Not_Present
446 Check_First_Batch_Data ${reply} BuiltIn.Should_Not_Contain
448 Check_Second_Batch_Data
449 [Arguments] ${reply} ${keyword}
450 BuiltIn.RunKeyword ${keyword} ${reply} <id>OLD001</id>
451 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUST002</id>
452 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>OLD001</car-id>
453 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUST002</person-id>
455 Check_Second_Batch_Data_Present
457 Check_Second_Batch_Data ${reply} BuiltIn.Should_Contain
459 Check_Multiple_Batch_Data
460 [Arguments] ${reply} ${keyword}
461 BuiltIn.RunKeyword ${keyword} ${reply} <id>CAROLD</id>
462 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTOLD</id>
463 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CAROLD</car-id>
464 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTOLD</person-id>
465 BuiltIn.RunKeyword ${keyword} ${reply} <id>CARYOUNG</id>
466 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTYOUNG</id>
467 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CARYOUNG</car-id>
468 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTYOUNG</person-id>
469 BuiltIn.RunKeyword ${keyword} ${reply} <id>CARMID</id>
470 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTMID</id>
471 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CARMID</car-id>
472 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTMID</person-id>
473 BuiltIn.RunKeyword ${keyword} ${reply} <id>CAROLD2</id>
474 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTOLD2</id>
475 BuiltIn.RunKeyword ${keyword} ${reply} <car-id>CAROLD2</car-id>
476 BuiltIn.RunKeyword ${keyword} ${reply} <person-id>CUSTOLD2</person-id>
478 Check_Multiple_Batch_Data_Absent
480 Check_Multiple_Batch_Data ${reply} BuiltIn.Should_not_Contain
482 Check_Multiple_Batch_Data_Present
484 Check_Multiple_Batch_Data ${reply} BuiltIn.Should_Contain
487 [Arguments] ${reply} ${keyword}
488 BuiltIn.RunKeyword ${keyword} ${reply} <id>CUSTBAD</id>
489 BuiltIn.RunKeyword ${keyword} ${reply} <id>test</id>
491 Check_Test_Objects_Absent
493 Check_First_Batch_Data_Not_Present ${reply}
494 Check_Second_Batch_Data ${reply} BuiltIn.Should_not_Contain
495 Check_Multiple_Batch_Data_Absent ${reply}
496 Check_Auxiliary_Data ${reply} BuiltIn.Should_not_Contain
497 BuiltIn.Should_not_Contain ${reply} <id>test</id>
499 Check_Test_Objects_Not_Present_In_Config
501 [Documentation] Use dataset with the specified name to get the configuration and check that none of our test objects are there.
502 ${reply}= Load_And_Send_Message ${name}
503 Check_Test_Objects_Absent ${reply}
504 BuiltIn.Should_not_Contain ${reply} <id>REPLACE</id>
509 [Documentation] Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.
510 ${actual}= Load_And_Send_Message ${name}
511 ${expected}= Load_Expected_Reply ${name}
512 ${actual}= String.Remove String ${actual} ]]>]]>
513 ${actual}= String.Strip String ${actual} mode=both
514 XML.Elements Should Be Equal ${actual} ${expected} normalize_whitespace=True
518 [Arguments] ${name} ${expected}
519 ${actual}= Load_And_Send_Message ${name}
520 BuiltIn.Should_Be_Equal ${expected} ${actual}