Skip to content

Commit 35c43b0

Browse files
authored
Merge pull request #65 from DMTF/Fix55-Task-Handling
Added method to poll tasks for tests using PATCH, POST, and DELETE
2 parents 938a1e0 + 9c14538 commit 35c43b0

10 files changed

+132
-67
lines changed

redfish_protocol_validator/accounts.py

+18-19
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def add_account_via_patch(sut: SystemUnderTest, session, user, role, password,
154154
if role:
155155
payload['RoleId'] = role
156156
headers = utils.get_etag_header(sut, session, uri)
157-
response = session.patch(sut.rhost + uri, json=payload, headers=headers)
157+
response = sut.patch(uri, json=payload, headers=headers, session=session)
158158
sut.add_response(uri, response, resource_type=ResourceType.MANAGER_ACCOUNT,
159159
request_type=request_type)
160160
success = response.status_code == requests.codes.OK
@@ -166,8 +166,7 @@ def add_account_via_patch(sut: SystemUnderTest, session, user, role, password,
166166
if 'Enabled' in data and data['Enabled'] is False:
167167
headers = utils.get_etag_header(sut, session, uri)
168168
payload = {'Enabled': True}
169-
session.patch(sut.rhost + uri, json=payload,
170-
headers=headers)
169+
sut.patch(uri, json=payload, headers=headers, session=session)
171170
sut.add_response(uri, response,
172171
resource_type=ResourceType.MANAGER_ACCOUNT,
173172
request_type=request_type)
@@ -199,7 +198,7 @@ def add_account(sut: SystemUnderTest, session,
199198
payload = {'UserName': user, 'Password': password}
200199
if role:
201200
payload['RoleId'] = role
202-
response = session.post(sut.rhost + sut.accounts_uri, json=payload)
201+
response = sut.post(sut.accounts_uri, json=payload, session=session)
203202
sut.add_response(sut.accounts_uri, response, request_type=request_type)
204203

205204
new_acct_uri = None
@@ -229,8 +228,8 @@ def patch_account(sut: SystemUnderTest, session, acct_uri,
229228
pwd = new_password(sut)
230229
payload = {'Password': pwd, 'BogusProp': 'foo'}
231230
headers = utils.get_etag_header(sut, session, acct_uri)
232-
response = session.patch(sut.rhost + acct_uri, json=payload,
233-
headers=headers)
231+
response = sut.patch(acct_uri, json=payload, headers=headers,
232+
session=session)
234233
if response.ok:
235234
new_pwd = pwd
236235
sut.add_response(acct_uri, response,
@@ -239,8 +238,8 @@ def patch_account(sut: SystemUnderTest, session, acct_uri,
239238
# patch a single property that can never be updated
240239
payload = {'BogusProp': 'foo'}
241240
headers = utils.get_etag_header(sut, session, acct_uri)
242-
response = session.patch(sut.rhost + acct_uri, json=payload,
243-
headers=headers)
241+
response = sut.patch(acct_uri, json=payload, headers=headers,
242+
session=session)
244243
sut.add_response(acct_uri, response,
245244
resource_type=ResourceType.MANAGER_ACCOUNT,
246245
request_type=RequestType.PATCH_BAD_PROP)
@@ -249,8 +248,8 @@ def patch_account(sut: SystemUnderTest, session, acct_uri,
249248
else acct_uri + '/')
250249
payload = {'@odata.id': odata_id}
251250
headers = utils.get_etag_header(sut, session, acct_uri)
252-
response = session.patch(sut.rhost + acct_uri, json=payload,
253-
headers=headers)
251+
response = sut.patch(acct_uri, json=payload, headers=headers,
252+
session=session)
254253
sut.add_response(acct_uri, response,
255254
resource_type=ResourceType.MANAGER_ACCOUNT,
256255
request_type=RequestType.PATCH_ODATA_PROPS)
@@ -260,8 +259,8 @@ def patch_account(sut: SystemUnderTest, session, acct_uri,
260259
pwd = new_password(sut)
261260
payload = {'Password': pwd}
262261
headers = utils.get_etag_header(sut, session, acct_uri)
263-
response = session.patch(sut.rhost + acct_uri, json=payload,
264-
headers=headers)
262+
response = sut.patch(acct_uri, json=payload, headers=headers,
263+
session=session)
265264
if response.ok:
266265
new_pwd = pwd
267266
sut.add_response(acct_uri, response,
@@ -273,8 +272,8 @@ def patch_account(sut: SystemUnderTest, session, acct_uri,
273272
payload = {'Password': pwd}
274273
new_headers = utils.get_etag_header(sut, session, acct_uri)
275274
bad_headers = {'If-Match': new_headers['If-Match'] + 'foobar'}
276-
r = session.patch(sut.rhost + acct_uri, json=payload,
277-
headers=bad_headers)
275+
r = sut.patch(acct_uri, json=payload, headers=bad_headers,
276+
session=session)
278277
if r.ok:
279278
new_pwd = pwd
280279
sut.add_response(acct_uri, r,
@@ -293,8 +292,8 @@ def delete_account_via_patch(sut: SystemUnderTest, session, user, acct_uri,
293292
if data.get('Enabled', False):
294293
payload['Enabled'] = False
295294
headers = utils.get_etag_header(sut, session, acct_uri)
296-
response = session.patch(sut.rhost + acct_uri, json=payload,
297-
headers=headers)
295+
response = sut.patch(acct_uri, json=payload, headers=headers,
296+
session=session)
298297
sut.add_response(acct_uri, response,
299298
resource_type=ResourceType.MANAGER_ACCOUNT,
300299
request_type=request_type)
@@ -318,7 +317,7 @@ def delete_account(sut: SystemUnderTest, session, user, acct_uri,
318317
delete_account_via_patch(sut, session, user, acct_uri,
319318
request_type=request_type)
320319
return
321-
response = session.delete(sut.rhost + acct_uri)
320+
response = sut.delete(acct_uri, session=session)
322321
sut.add_response(acct_uri, response,
323322
resource_type=ResourceType.MANAGER_ACCOUNT,
324323
request_type=request_type)
@@ -340,8 +339,8 @@ def password_change_required(sut: SystemUnderTest, session, user, password,
340339
if not account_enabled:
341340
payload['Enabled'] = True
342341
headers = {'If-Match': etag} if etag else {}
343-
response = session.patch(sut.rhost + uri, json=payload,
344-
headers=headers)
342+
response = sut.patch(uri, json=payload, headers=headers,
343+
session=session)
345344
sut.add_response(uri, response,
346345
resource_type=ResourceType.MANAGER_ACCOUNT)
347346
if not response.ok:

redfish_protocol_validator/resources.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,7 @@ def patch_session(sut: SystemUnderTest, session_uri):
271271
"""PATCH a session; should fail, sessions are not updatable"""
272272
payload = {'UserName': 'pRoToVAl'}
273273
headers = utils.get_etag_header(sut, sut.session, session_uri)
274-
response = sut.session.patch(sut.rhost + session_uri, json=payload,
275-
headers=headers)
274+
response = sut.patch(session_uri, json=payload, headers=headers)
276275
sut.add_response(session_uri, response,
277276
request_type=RequestType.PATCH_RO_RESOURCE)
278277

@@ -281,8 +280,7 @@ def patch_collection(sut: SystemUnderTest, collection_uri):
281280
"""PATCH a collection; should fail, collections are not updatable"""
282281
payload = {'Name': 'My Collection'}
283282
headers = utils.get_etag_header(sut, sut.session, collection_uri)
284-
response = sut.session.patch(sut.rhost + collection_uri, json=payload,
285-
headers=headers)
283+
response = sut.patch(collection_uri, json=payload, headers=headers)
286284
sut.add_response(collection_uri, response,
287285
request_type=RequestType.PATCH_COLLECTION)
288286

redfish_protocol_validator/security_details.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,7 @@ def test_session_termination_side_effects(sut: SystemUnderTest):
645645
Assertion.SEC_SESSION_TERMINATION_SIDE_EFFECTS, msg)
646646
elif response.ok:
647647
# delete the session
648-
r = session.delete(sut.rhost + new_session_uri)
648+
r = sut.delete(new_session_uri, session=session)
649649
if r.ok:
650650
# read from the SSE stream
651651
try:
@@ -952,8 +952,7 @@ def test_priv_predefined_roles_not_modifiable(sut: SystemUnderTest):
952952
# PATCH the test privileges
953953
payload = {'AssignedPrivileges': test_priv}
954954
headers = utils.get_etag_header(sut, sut.session, uri)
955-
response = sut.session.patch(sut.rhost + uri, json=payload,
956-
headers=headers)
955+
response = sut.patch(uri, json=payload, headers=headers)
957956
if response.ok:
958957
msg = ('PATCH request to %s to modify the AssignedPrivileges '
959958
'of predefined role %s succeeded with status %s; '
@@ -968,8 +967,7 @@ def test_priv_predefined_roles_not_modifiable(sut: SystemUnderTest):
968967
payload = {'AssignedPrivileges': privs}
969968
etag = r.headers.get('ETag')
970969
headers = {'If-Match': etag} if etag else {}
971-
sut.session.patch(sut.rhost + uri, json=payload,
972-
headers=headers)
970+
sut.patch(uri, json=payload, headers=headers)
973971
else:
974972
sut.log(Result.PASS, 'PATCH', response.status_code, uri,
975973
Assertion.SEC_PRIV_PREDEFINED_ROLE_NOT_MODIFIABLE,

redfish_protocol_validator/service_details.py

+10-14
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ def test_event_service_subscription(sut: SystemUnderTest):
2323
'Protocol': 'Redfish',
2424
'Destination': 'https://192.168.1.50/Destination1'
2525
}
26-
response = sut.session.post(sut.rhost + sut.subscriptions_uri,
27-
json=payload)
26+
response = sut.post(sut.subscriptions_uri, json=payload)
2827
sut.add_response(sut.subscriptions_uri, response,
2928
request_type=RequestType.SUBSCRIPTION)
3029
if response.status_code == requests.codes.CREATED:
@@ -35,7 +34,7 @@ def test_event_service_subscription(sut: SystemUnderTest):
3534
Assertion.SERV_EVENT_POST_RESP, 'Test passed')
3635
# cleanup
3736
uri = urlparse(location).path
38-
r = sut.session.delete(sut.rhost + uri)
37+
r = sut.delete(uri)
3938
sut.add_response(uri, r, request_type=RequestType.SUBSCRIPTION)
4039
else:
4140
msg = ('Response from event subscription POST request to %s '
@@ -74,8 +73,7 @@ def test_event_error_on_bad_request(sut: SystemUnderTest):
7473
'Protocol': 'FTP', # invalid EventDestinationProtocol
7574
'Destination': 'https://192.168.1.50/Destination1'
7675
}
77-
response = sut.session.post(sut.rhost + sut.subscriptions_uri,
78-
json=payload)
76+
response = sut.post(sut.subscriptions_uri, json=payload)
7977
sut.add_response(sut.subscriptions_uri, response,
8078
request_type=RequestType.SUBSCRIPTION)
8179
if response.ok:
@@ -90,7 +88,7 @@ def test_event_error_on_bad_request(sut: SystemUnderTest):
9088
if location:
9189
# cleanup
9290
uri = urlparse(location).path
93-
r = sut.session.delete(sut.rhost + uri)
91+
r = sut.delete(uri)
9492
sut.add_response(uri, r, request_type=RequestType.SUBSCRIPTION)
9593
elif response.status_code == requests.codes.BAD_REQUEST:
9694
sut.log(Result.PASS, response.request.method,
@@ -126,8 +124,7 @@ def test_event_error_on_mutually_excl_props(sut: SystemUnderTest):
126124
'Base.1.0.GeneralError'
127125
]
128126
}
129-
response = sut.session.post(sut.rhost + sut.subscriptions_uri,
130-
json=payload)
127+
response = sut.post(sut.subscriptions_uri, json=payload)
131128
sut.add_response(sut.subscriptions_uri, response,
132129
request_type=RequestType.SUBSCRIPTION)
133130
if response.ok:
@@ -143,7 +140,7 @@ def test_event_error_on_mutually_excl_props(sut: SystemUnderTest):
143140
if location:
144141
# cleanup
145142
uri = urlparse(location).path
146-
r = sut.session.delete(sut.rhost + uri)
143+
r = sut.delete(uri)
147144
sut.add_response(uri, r, request_type=RequestType.SUBSCRIPTION)
148145
elif response.status_code == requests.codes.BAD_REQUEST:
149146
sut.log(Result.PASS, response.request.method,
@@ -215,8 +212,8 @@ def test_ssdp_can_be_disabled(sut: SystemUnderTest):
215212
payload = {'SSDP': {'ProtocolEnabled': False}}
216213
etag = r.headers.get('ETag')
217214
headers = {'If-Match': etag} if etag else {}
218-
r = sut.session.patch(sut.rhost + sut.mgr_net_proto_uri,
219-
json=payload, headers=headers)
215+
r = sut.patch(sut.mgr_net_proto_uri, json=payload, headers=headers)
216+
r = utils.poll_task(sut, r)
220217
if r.ok:
221218
services = utils.discover_ssdp(search_target=SSDP_REDFISH)
222219
uuids = services.keys()
@@ -235,8 +232,7 @@ def test_ssdp_can_be_disabled(sut: SystemUnderTest):
235232
payload = {'SSDP': {'ProtocolEnabled': True}}
236233
etag = r.headers.get('ETag')
237234
headers = {'If-Match': etag} if etag else {}
238-
sut.session.patch(sut.rhost + sut.mgr_net_proto_uri,
239-
json=payload, headers=headers)
235+
sut.patch(sut.mgr_net_proto_uri, json=payload, headers=headers)
240236
else:
241237
msg = 'Attempt to disable SSDP failed'
242238
sut.log(Result.FAIL, 'PATCH', r.status_code,
@@ -842,7 +838,7 @@ def test_sse_close_connection_if_event_dest_deleted(
842838
Assertion.SERV_SSE_CLOSE_CONNECTION_IF_EVENT_DEST_DELETED, msg)
843839
return
844840

845-
r = sut.session.delete(sut.rhost + event_dest_uri)
841+
r = sut.delete(event_dest_uri)
846842
if r.ok:
847843
# give the service up to 5 seconds to close the stream
848844
for _ in range(5):

redfish_protocol_validator/service_requests.py

+10-17
Original file line numberDiff line numberDiff line change
@@ -848,12 +848,10 @@ def test_patch_array_element_remove(sut: SystemUnderTest):
848848
}
849849
uri = sut.mgr_net_proto_uri
850850
headers = utils.get_etag_header(sut, sut.session, uri)
851-
response = sut.session.patch(sut.rhost + uri,
852-
json=payload1, headers=headers)
851+
response = sut.patch(uri, json=payload1, headers=headers)
853852
if response.ok:
854853
headers = utils.get_etag_header(sut, sut.session, uri)
855-
response = sut.session.patch(
856-
sut.rhost + uri, json=payload2, headers=headers)
854+
response = sut.patch(uri, json=payload2, headers=headers)
857855
if response.ok:
858856
get_resp = sut.session.get(sut.rhost + uri)
859857
if get_resp.ok:
@@ -913,12 +911,10 @@ def test_patch_array_element_unchanged(sut: SystemUnderTest):
913911
}
914912
uri = sut.mgr_net_proto_uri
915913
headers = utils.get_etag_header(sut, sut.session, uri)
916-
response = sut.session.patch(sut.rhost + uri,
917-
json=payload1, headers=headers)
914+
response = sut.patch(uri, json=payload1, headers=headers)
918915
if response.ok:
919916
headers = utils.get_etag_header(sut, sut.session, uri)
920-
response = sut.session.patch(
921-
sut.rhost + uri, json=payload2, headers=headers)
917+
response = sut.patch(uri, json=payload2, headers=headers)
922918
if response.ok:
923919
get_resp = sut.session.get(sut.rhost + uri)
924920
if get_resp.ok:
@@ -986,12 +982,10 @@ def test_patch_array_truncate(sut: SystemUnderTest):
986982
expected_array = ['time-b-b.nist.gov']
987983
uri = sut.mgr_net_proto_uri
988984
headers = utils.get_etag_header(sut, sut.session, uri)
989-
response = sut.session.patch(sut.rhost + uri, json=payload1,
990-
headers=headers)
985+
response = sut.patch(uri, json=payload1, headers=headers)
991986
if response.ok:
992987
headers = utils.get_etag_header(sut, sut.session, uri)
993-
response = sut.session.patch(
994-
sut.rhost + uri, json=payload2, headers=headers)
988+
response = sut.patch(uri, json=payload2, headers=headers)
995989
if response.ok:
996990
get_resp = sut.session.get(sut.rhost + uri)
997991
if get_resp.ok:
@@ -1045,8 +1039,7 @@ def patch_array_restore(sut: SystemUnderTest, array):
10451039
}
10461040
}
10471041
headers = utils.get_etag_header(sut, sut.session, uri)
1048-
response = sut.session.patch(sut.rhost + uri,
1049-
json=payload, headers=headers)
1042+
response = sut.patch(uri, json=payload, headers=headers)
10501043
if not response.ok:
10511044
logging.warning('Attempt to PATCH %s to restore the original '
10521045
'NTPServers array failed with status %s; PATCH '
@@ -1124,7 +1117,7 @@ def test_post_create_to_members_prop(sut: SystemUnderTest):
11241117
if location and isinstance(location, str):
11251118
session_uri = urlparse(location).path
11261119
if session_uri:
1127-
sut.session.delete(sut.rhost + session_uri)
1120+
sut.delete(session_uri)
11281121
else:
11291122
msg = ('POST to Members property URI %s failed with status %s; '
11301123
'extended error: %s' %
@@ -1228,15 +1221,15 @@ def test_post_create_not_idempotent(sut: SystemUnderTest):
12281221
Assertion.REQ_POST_CREATE_NOT_IDEMPOTENT, msg)
12291222
# clean-up the created session
12301223
if session_uri2 and loc1 != loc2:
1231-
sut.session.delete(sut.rhost + session_uri2)
1224+
sut.delete(session_uri2)
12321225
else:
12331226
msg = ('Second POST request to %s failed with status code %s'
12341227
% (uri, r2.status_code))
12351228
sut.log(Result.WARN, 'POST', r2.status_code, uri,
12361229
Assertion.REQ_POST_CREATE_NOT_IDEMPOTENT, msg)
12371230
# clean-up the created session
12381231
if session_uri1:
1239-
sut.session.delete(sut.rhost + session_uri1)
1232+
sut.delete(session_uri1)
12401233
else:
12411234
msg = ('POST request to %s failed with status code %s; unable to test '
12421235
'this assertion' % (uri, r1.status_code))

redfish_protocol_validator/sessions.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def create_session(sut: SystemUnderTest):
6363

6464
def delete_session(sut: SystemUnderTest, session, session_uri,
6565
request_type=RequestType.NORMAL):
66-
response = session.delete(sut.rhost + session_uri)
66+
response = sut.delete(session_uri, session=session)
6767
sut.add_response(session_uri, response, request_type=request_type)
6868
return response
6969

0 commit comments

Comments
 (0)