Skip to content

Commit f10d149

Browse files
User mapping rule performs operator validation for all updates to prevent NoneType errors (#188)
Co-authored-by: Bhavneet-Sharma <[email protected]>
1 parent fee6175 commit f10d149

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

plugins/modules/user_mapping_rule.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,10 +495,11 @@ def form_rule_for_operations_update(self, update_rule, new_rule_data, do_update)
495495
def form_rule_for_user_update(self, key, update_rule, new_rule_data, do_update):
496496
"""
497497
Check and form rule for user update
498+
:param key: The key to check in the rules
498499
:param update_rule: Updated rule data
499500
:param new_rule_data: New rule data.
500501
:param do_update: Is update required.
501-
:return: True if update is needed and and the new updated rule.
502+
:return: True if update is needed and the new updated rule.
502503
"""
503504
if 'domain' in new_rule_data[key] and new_rule_data[key]['domain'] != update_rule[key]['domain']:
504505
update_rule[key]['domain'] = new_rule_data[key]['domain']
@@ -536,6 +537,7 @@ def check_and_form_rule_for_update(self, new_rule_params, rule_details):
536537
do_update = False
537538
new_rule_data = new_rule_params['rule']
538539
if new_rule_data:
540+
self.validate_for_specific_operators(new_rule_data)
539541
if 'operator' in new_rule_data and new_rule_data['operator'] is not None and new_rule_data['operator'] != rule_details['operator']:
540542
update_rule['operator'] = new_rule_data['operator']
541543
update_rule = self.form_rule_for_operator_update(update_rule, new_rule_data, rule_details)
@@ -544,7 +546,7 @@ def check_and_form_rule_for_update(self, new_rule_params, rule_details):
544546
do_update, update_rule = self.form_rule_for_operations_update(update_rule, new_rule_data, do_update)
545547
if 'user1' in new_rule_data and new_rule_data['user1'] is not None:
546548
do_update, update_rule = self.form_rule_for_user_update('user1', update_rule, new_rule_data, do_update)
547-
if 'user2' in new_rule_data and new_rule_data['user1'] is not None:
549+
if 'user2' in new_rule_data and new_rule_data['user2'] is not None:
548550
do_update, update_rule = self.form_rule_for_user_update('user2', update_rule, new_rule_data, do_update)
549551
if 'new_order' in new_rule_params and new_rule_params['new_order'] is not None:
550552
do_update = self.check_new_order_update(new_rule_params['apply_order'], new_rule_params['new_order'], do_update)

tests/unit/plugins/modules/test_usermappingrules.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,33 @@ def test_update_trim_usermappingrule_exception(self, powerscale_module_mock):
227227
self.capture_fail_json_call(MockUserMappingRuleApi.get_error_responses('trim_update_error'),
228228
powerscale_module_mock)
229229

230+
def test_update_trim_usermappingrule_user_exception(self, powerscale_module_mock):
231+
usermappingrules_details = MockUserMappingRuleApi.GET_USERMAPPINGRULE_RESPONSE_FOR_TRIM
232+
usermappingrules_details['rules']['rules'].append(usermappingrules_details['rules']['rules'][0])
233+
usermappingrules_details_after_update = copy.deepcopy(usermappingrules_details)
234+
new_rule = copy.deepcopy(usermappingrules_details['rules']['rules'][0])
235+
new_rule['rule'] = {
236+
'operator': 'trim',
237+
'options': {
238+
'groups': True
239+
}
240+
}
241+
usermappingrules_details_after_update['rules']['rules'][0] = new_rule
242+
self.usermappingrules_args.update({
243+
'apply_order': 2,
244+
'new_order': 1,
245+
'rule': new_rule['rule'],
246+
'state': 'present'
247+
})
248+
mock_none_response = MagicMock(return_value=None)
249+
powerscale_module_mock.module.params = self.usermappingrules_args
250+
powerscale_module_mock.auth_api.get_mapping_users_rules = MagicMock(
251+
side_effect=[MockSDKResponse(usermappingrules_details),
252+
MockSDKResponse(usermappingrules_details)])
253+
powerscale_module_mock.auth_api.update_mapping_users_rules = mock_none_response
254+
self.capture_fail_json_call(MockUserMappingRuleApi.get_error_responses('trim_user_error'),
255+
powerscale_module_mock)
256+
230257
def test_update_usermappingrule_exception(self, powerscale_module_mock):
231258
usermappingrules_details = MockUserMappingRuleApi.GET_USERMAPPINGRULE_RESPONSE
232259
usermappingrules_details['rules']['rules'].append(usermappingrules_details['rules']['rules'][0])

0 commit comments

Comments
 (0)