From ee2df759da9610e469bd84eaaa1484633977b36f Mon Sep 17 00:00:00 2001 From: Elijah Swift Date: Wed, 25 Oct 2023 18:35:45 -0400 Subject: [PATCH] Added Extract to Add Function -Used preliminary extract to determine if add is valid (in user) -Updated unit testing framework to account for this -Moved checking of redacted secrets and debug logging to alter (for User) due to Add changes Signed-off-by: Elijah Swift --- pyracf/__init__.py | 1 + pyracf/common/add_operation_error.py | 24 ++ pyracf/common/logger.py | 2 +- pyracf/common/security_admin.py | 16 +- pyracf/common/security_request_error.py | 12 + pyracf/setropts/setropts_admin.py | 2 +- pyracf/user/user_admin.py | 25 +- ...tract_group_result_base_only_success.json} | 0 ...xtract_group_result_base_only_success.xml} | 0 tests/group/test_group_constants.py | 8 +- tests/group/test_group_getters.py | 16 +- tests/group/test_group_result_parser.py | 10 +- tests/user/test_user_constants.py | 151 +++++---- tests/user/test_user_debug_logging.py | 210 ++++++++----- tests/user/test_user_getters.py | 8 +- tests/user/test_user_request_builder.py | 6 +- tests/user/test_user_result_parser.py | 177 ++++++----- ...add_user_additional_secret_added_error.log | 120 ------- ...d_user_additional_secret_added_success.log | 120 ------- .../user/user_log_samples/add_user_error.log | 120 ------- ...add_user_passphrase_and_password_error.log | 130 -------- ...d_user_passphrase_and_password_success.log | 130 -------- .../add_user_passphrase_error.log | 125 -------- .../add_user_passphrase_success.log | 125 -------- .../add_user_password_error.log | 125 -------- .../add_user_password_success.log | 125 -------- .../user_log_samples/add_user_success.log | 120 ------- ...ter_user_additional_secret_added_error.log | 283 +++++++++++++++++ ...r_user_additional_secret_added_success.log | 275 ++++++++++++++++ .../user_log_samples/alter_user_error.log | 283 +++++++++++++++++ ...ter_user_passphrase_and_password_error.log | 293 ++++++++++++++++++ ...r_user_passphrase_and_password_success.log | 285 +++++++++++++++++ .../alter_user_passphrase_error.log | 288 +++++++++++++++++ .../alter_user_passphrase_success.log | 280 +++++++++++++++++ .../alter_user_password_error.log | 288 +++++++++++++++++ .../alter_user_password_success.log | 280 +++++++++++++++++ .../user_log_samples/alter_user_success.log | 260 ++++++++++++++++ .../add_user_result_error.json | 31 +- .../add_user_result_error.xml | 27 +- .../alter_user_result_error.json | 32 +- .../alter_user_result_error.xml | 24 +- .../alter_user_result_extended_success.xml | 14 + ...result_passphrase_and_password_error.json} | 15 +- ..._result_passphrase_and_password_error.xml} | 13 +- ...sult_passphrase_and_password_success.json} | 12 +- ...esult_passphrase_and_password_success.xml} | 8 +- ...> alter_user_result_passphrase_error.json} | 15 +- ...=> alter_user_result_passphrase_error.xml} | 13 +- ...alter_user_result_passphrase_success.json} | 12 +- ... alter_user_result_passphrase_success.xml} | 8 +- ... => alter_user_result_password_error.json} | 15 +- ...l => alter_user_result_password_error.xml} | 13 +- ...> alter_user_result_password_success.json} | 12 +- ...=> alter_user_result_password_success.xml} | 8 +- .../extract_user_result_base_only_error.json | 22 ++ .../extract_user_result_base_only_error.xml | 14 + ...xtract_user_result_base_only_success.json} | 2 +- ...extract_user_result_base_only_success.xml} | 4 +- .../extract_user_result_invattr_error.json | 19 ++ .../extract_user_result_invattr_error.xml | 15 + 60 files changed, 3421 insertions(+), 1650 deletions(-) create mode 100644 pyracf/common/add_operation_error.py rename tests/group/group_result_samples/{extract_group_result_base_only_no_omvs_success.json => extract_group_result_base_only_success.json} (100%) rename tests/group/group_result_samples/{extract_group_result_base_only_no_omvs_success.xml => extract_group_result_base_only_success.xml} (100%) delete mode 100644 tests/user/user_log_samples/add_user_additional_secret_added_error.log delete mode 100644 tests/user/user_log_samples/add_user_additional_secret_added_success.log delete mode 100644 tests/user/user_log_samples/add_user_error.log delete mode 100644 tests/user/user_log_samples/add_user_passphrase_and_password_error.log delete mode 100644 tests/user/user_log_samples/add_user_passphrase_and_password_success.log delete mode 100644 tests/user/user_log_samples/add_user_passphrase_error.log delete mode 100644 tests/user/user_log_samples/add_user_passphrase_success.log delete mode 100644 tests/user/user_log_samples/add_user_password_error.log delete mode 100644 tests/user/user_log_samples/add_user_password_success.log delete mode 100644 tests/user/user_log_samples/add_user_success.log create mode 100644 tests/user/user_log_samples/alter_user_additional_secret_added_error.log create mode 100644 tests/user/user_log_samples/alter_user_additional_secret_added_success.log create mode 100644 tests/user/user_log_samples/alter_user_error.log create mode 100644 tests/user/user_log_samples/alter_user_passphrase_and_password_error.log create mode 100644 tests/user/user_log_samples/alter_user_passphrase_and_password_success.log create mode 100644 tests/user/user_log_samples/alter_user_passphrase_error.log create mode 100644 tests/user/user_log_samples/alter_user_passphrase_success.log create mode 100644 tests/user/user_log_samples/alter_user_password_error.log create mode 100644 tests/user/user_log_samples/alter_user_password_success.log create mode 100644 tests/user/user_log_samples/alter_user_success.log create mode 100644 tests/user/user_result_samples/alter_user_result_extended_success.xml rename tests/user/user_result_samples/{add_user_result_passphrase_and_password_error.json => alter_user_result_passphrase_and_password_error.json} (56%) rename tests/user/user_result_samples/{add_user_result_passphrase_and_password_error.xml => alter_user_result_passphrase_and_password_error.xml} (57%) rename tests/user/user_result_samples/{add_user_result_passphrase_and_password_success.json => alter_user_result_passphrase_and_password_success.json} (68%) rename tests/user/user_result_samples/{add_user_result_passphrase_and_password_success.xml => alter_user_result_passphrase_and_password_success.xml} (72%) rename tests/user/user_result_samples/{add_user_result_passphrase_error.json => alter_user_result_passphrase_error.json} (57%) rename tests/user/user_result_samples/{add_user_result_passphrase_error.xml => alter_user_result_passphrase_error.xml} (58%) rename tests/user/user_result_samples/{add_user_result_passphrase_success.json => alter_user_result_passphrase_success.json} (67%) rename tests/user/user_result_samples/{add_user_result_passphrase_success.xml => alter_user_result_passphrase_success.xml} (71%) rename tests/user/user_result_samples/{add_user_result_password_error.json => alter_user_result_password_error.json} (57%) rename tests/user/user_result_samples/{add_user_result_password_error.xml => alter_user_result_password_error.xml} (59%) rename tests/user/user_result_samples/{add_user_result_password_success.json => alter_user_result_password_success.json} (67%) rename tests/user/user_result_samples/{add_user_result_password_success.xml => alter_user_result_password_success.xml} (71%) create mode 100644 tests/user/user_result_samples/extract_user_result_base_only_error.json create mode 100644 tests/user/user_result_samples/extract_user_result_base_only_error.xml rename tests/user/user_result_samples/{extract_user_result_base_only_no_omvs_success.json => extract_user_result_base_only_success.json} (96%) rename tests/user/user_result_samples/{extract_user_result_base_only_no_omvs_success.xml => extract_user_result_base_only_success.xml} (92%) create mode 100644 tests/user/user_result_samples/extract_user_result_invattr_error.json create mode 100644 tests/user/user_result_samples/extract_user_result_invattr_error.xml diff --git a/pyracf/__init__.py b/pyracf/__init__.py index 44409d47..7c686b12 100644 --- a/pyracf/__init__.py +++ b/pyracf/__init__.py @@ -1,5 +1,6 @@ """Make security admin subclasses available from package root.""" from .access.access_admin import AccessAdmin +from .common.add_operation_error import AddOperationError from .common.alter_operation_error import AlterOperationError from .common.invalid_segment_name_error import InvalidSegmentNameError from .common.invalid_segment_trait_error import InvalidSegmentTraitError diff --git a/pyracf/common/add_operation_error.py b/pyracf/common/add_operation_error.py new file mode 100644 index 00000000..57d7db15 --- /dev/null +++ b/pyracf/common/add_operation_error.py @@ -0,0 +1,24 @@ +"""Exception to use when Add operation would alter an existing profile.""" + + +class AddOperationError(Exception): + """ + Raised when a profile passed into an Add is successfully extracted. + """ + + def __init__(self, profile_name: str, class_name: str) -> None: + self.message = "Security request made to IRRSMO00 failed." + admin_types = ["USER", "GROUP", "DATASET"] + if class_name not in admin_types: + self.message += ( + "\n\nTarget profile " + + f"'{profile_name}' already exists as a profile in the {class_name} class." + ) + else: + self.message += ( + "\n\nTarget profile " + + f"'{profile_name}' already exists as a {class_name} profile." + ) + + def __str__(self) -> str: + return self.message diff --git a/pyracf/common/logger.py b/pyracf/common/logger.py index ed1f3dc8..07a491ae 100644 --- a/pyracf/common/logger.py +++ b/pyracf/common/logger.py @@ -166,7 +166,7 @@ def redact_result_xml( match = re.search(rf"{racf_key.upper()} +\(", xml_string) if not match: continue - xml_string = self.__redact_string(xml_string, match.end(), ") ") + xml_string = self.__redact_string(xml_string, match.end(), ")") return xml_string def __colorize_json(self, json_text: str) -> str: diff --git a/pyracf/common/security_admin.py b/pyracf/common/security_admin.py index 677de6d3..bc47eeb0 100644 --- a/pyracf/common/security_admin.py +++ b/pyracf/common/security_admin.py @@ -70,7 +70,7 @@ def __init__( self.__preserved_segment_traits = {} self._trait_map = {} self.__debug = debug - self.__generate_requests_only = generate_requests_only + self._generate_requests_only = generate_requests_only if update_existing_segment_traits is not None: self.__update_valid_segment_traits(update_existing_segment_traits) if replace_existing_segment_traits is not None: @@ -123,7 +123,7 @@ def _extract_and_check_result( ) -> dict: """Extract a RACF profile.""" result = self._make_request(security_request) - if self.__generate_requests_only: + if self._generate_requests_only: return result self._format_profile(result) if self.__debug: @@ -155,7 +155,7 @@ def _make_request( security_request.dump_request_xml(encoding="utf-8"), secret_traits=self.__secret_traits, ) - if self.__generate_requests_only: + if self._generate_requests_only: request_xml = self.__logger.redact_request_xml( security_request.dump_request_xml(encoding="utf-8"), secret_traits=self.__secret_traits, @@ -202,7 +202,7 @@ def _to_steps(self, results: Union[List[dict], dict, bytes]) -> Union[dict, byte """ if isinstance(results, dict) or isinstance(results, bytes): results = [results] - if self.__generate_requests_only: + if self._generate_requests_only: concatenated_xml = b"" for request_xml in results: if request_xml: @@ -320,8 +320,8 @@ def _get_profile( self, result: Union[dict, bytes], index: int = 0 ) -> Union[dict, bytes]: """Extract the profile section from a result dictionary.""" - if self.__generate_requests_only: - # Allows this function to work with "self.__generate_requests_only" mode. + if self._generate_requests_only: + # Allows this function to work with "self._generate_requests_only" mode. return result return result["securityResult"][self.__profile_type]["commands"][0]["profiles"][ index @@ -331,8 +331,8 @@ def _get_field( self, profile: Union[dict, bytes], segment: str, field: str ) -> Union[bytes, Any, None]: """Extract the value of a field from a segment in a profile.""" - if self.__generate_requests_only: - # Allows this function to work with "self.__generate_requests_only" mode. + if self._generate_requests_only: + # Allows this function to work with "self._generate_requests_only" mode. return profile try: return profile[segment][field] diff --git a/pyracf/common/security_request_error.py b/pyracf/common/security_request_error.py index d197a48b..97e61b7a 100644 --- a/pyracf/common/security_request_error.py +++ b/pyracf/common/security_request_error.py @@ -17,3 +17,15 @@ def __init__(self, result: dict) -> None: def __str__(self) -> str: return self.message + + def scan_for_error(self, security_definition_tag: str, error_id: str): + commands = self.result["securityResult"][security_definition_tag].get( + "commands" + ) + if not isinstance(commands, list): + return False + messages = commands[0].get("messages", []) + if error_id in "".join(messages): + return True + else: + return False diff --git a/pyracf/setropts/setropts_admin.py b/pyracf/setropts/setropts_admin.py index 677fefe7..bbcc17d2 100644 --- a/pyracf/setropts/setropts_admin.py +++ b/pyracf/setropts/setropts_admin.py @@ -136,7 +136,7 @@ def get_class_attributes(self, class_name: str) -> Union[list, bytes]: """Get RACF get attributes.""" profile = self.list_racf_options(options_only=True) if not isinstance(profile, dict): - # Allows this function to work with "self.__generate_requests_only" mode. + # Allows this function to work with "self._generate_requests_only" mode. return profile return [ class_type diff --git a/pyracf/user/user_admin.py b/pyracf/user/user_admin.py index 2860a817..f29c8aec 100644 --- a/pyracf/user/user_admin.py +++ b/pyracf/user/user_admin.py @@ -2,6 +2,7 @@ from typing import List, Union +from pyracf.common.add_operation_error import AddOperationError from pyracf.common.alter_operation_error import AlterOperationError from pyracf.common.security_admin import SecurityAdmin from pyracf.common.security_request_error import SecurityRequestError @@ -399,13 +400,29 @@ def set_omvs_program( # ============================================================================ def add(self, userid: str, traits: dict = {}) -> Union[dict, bytes]: """Create a new user.""" - self._build_segment_dictionaries(traits) - user_request = UserRequest(userid, "set") - self._build_xml_segments(user_request) - return self._make_request(user_request) + if self._generate_requests_only: + self._build_segment_dictionaries(traits) + user_request = UserRequest(userid, "set") + self._build_xml_segments(user_request) + return self._make_request(user_request) + try: + self.extract(userid) + except SecurityRequestError as exception: + if not exception.scan_for_error("user", "ICH30001I"): + raise exception + self._build_segment_dictionaries(traits) + user_request = UserRequest(userid, "set") + self._build_xml_segments(user_request) + return self._make_request(user_request) + raise AddOperationError(userid, "USER") def alter(self, userid: str, traits: dict = {}) -> Union[dict, bytes]: """Alter an existing user.""" + if self._generate_requests_only: + self._build_segment_dictionaries(traits) + user_request = UserRequest(userid, "set") + self._build_xml_segments(user_request, alter=True) + return self._make_request(user_request, irrsmo00_precheck=True) try: self.extract(userid) except SecurityRequestError: diff --git a/tests/group/group_result_samples/extract_group_result_base_only_no_omvs_success.json b/tests/group/group_result_samples/extract_group_result_base_only_success.json similarity index 100% rename from tests/group/group_result_samples/extract_group_result_base_only_no_omvs_success.json rename to tests/group/group_result_samples/extract_group_result_base_only_success.json diff --git a/tests/group/group_result_samples/extract_group_result_base_only_no_omvs_success.xml b/tests/group/group_result_samples/extract_group_result_base_only_success.xml similarity index 100% rename from tests/group/group_result_samples/extract_group_result_base_only_no_omvs_success.xml rename to tests/group/group_result_samples/extract_group_result_base_only_success.xml diff --git a/tests/group/test_group_constants.py b/tests/group/test_group_constants.py index 671ba3fc..9da4f7d6 100644 --- a/tests/group/test_group_constants.py +++ b/tests/group/test_group_constants.py @@ -42,11 +42,11 @@ def get_sample(sample_file: str) -> Union[str, bytes]: TEST_EXTRACT_GROUP_RESULT_BASE_OMVS_ERROR_DICTIONARY = get_sample( "extract_group_result_base_omvs_error.json" ) -TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML = get_sample( - "extract_group_result_base_only_no_omvs_success.xml" +TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML = get_sample( + "extract_group_result_base_only_success.xml" ) -TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_JSON = get_sample( - "extract_group_result_base_only_no_omvs_success.json" +TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_JSON = get_sample( + "extract_group_result_base_only_success.json" ) # Delete Group diff --git a/tests/group/test_group_getters.py b/tests/group/test_group_getters.py index a8e42493..25177201 100644 --- a/tests/group/test_group_getters.py +++ b/tests/group/test_group_getters.py @@ -27,7 +27,7 @@ def test_group_admin_has_group_special_authority_returns_true_when_group_special call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertTrue( self.group_admin.has_group_special_authority("TESTGRP0", "ESWIFT") @@ -63,7 +63,7 @@ def test_group_admin_has_group_operations_authority_returns_true_when_group_oper call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertTrue( self.group_admin.has_group_operations_authority("TESTGRP0", "LEONARD") @@ -99,7 +99,7 @@ def test_group_admin_has_group_auditor_authority_returns_true_when_group_auditor call_racf_mock: Mock, ): group_extract_auditor = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) group_extract_auditor = group_extract_auditor.replace( " CONNECT ATTRIBUTES=SPECIAL", @@ -115,7 +115,7 @@ def test_group_admin_has_group_auditor_authority_returns_false_when_not_group_au call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertFalse( self.group_admin.has_group_auditor_authority("TESTGRP0", "ESWIFT") @@ -140,7 +140,7 @@ def test_group_admin_has_group_access_attribute_returns_true_when_grpacc( call_racf_mock: Mock, ): group_extract_grpacc = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) group_extract_grpacc = group_extract_grpacc.replace( " CONNECT ATTRIBUTES=OPERATIONS", @@ -156,7 +156,7 @@ def test_group_admin_has_group_access_attribute_returns_false_when_not_grpacc( call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertFalse( self.group_admin.has_group_access_attribute("TESTGRP0", "LEONARD") @@ -201,7 +201,7 @@ def test_group_admin_get_omvs_gid_returns_none_when_no_omvs_segment_exists( call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertIsNone(self.group_admin.get_omvs_gid("TESTGRP0")) @@ -237,6 +237,6 @@ def test_group_admin_get_ovm_gid_returns_none_when_no_ovm_segment_exists( call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertIsNone(self.group_admin.get_ovm_gid("TESTGRP0")) diff --git a/tests/group/test_group_result_parser.py b/tests/group/test_group_result_parser.py index 650ed110..5762beb7 100644 --- a/tests/group/test_group_result_parser.py +++ b/tests/group/test_group_result_parser.py @@ -59,7 +59,7 @@ def test_group_admin_can_parse_alter_group_success_xml( call_racf_mock: Mock, ): call_racf_mock.side_effect = [ - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML, + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML, TestGroupConstants.TEST_ALTER_GROUP_RESULT_SUCCESS_XML, ] self.assertEqual( @@ -96,7 +96,7 @@ def test_group_admin_can_parse_alter_group_error_xml( call_racf_mock: Mock, ): call_racf_mock.side_effect = [ - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML, + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML, TestGroupConstants.TEST_ALTER_GROUP_RESULT_ERROR_XML, ] with self.assertRaises(SecurityRequestError) as exception: @@ -124,16 +124,16 @@ def test_group_admin_can_parse_extract_group_base_omvs_success_xml( TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_OMVS_SUCCESS_DICTIONARY, ) - def test_group_admin_can_parse_extract_group_base_only_no_omvs_success_xml( + def test_group_admin_can_parse_extract_group_base_only_success_xml( self, call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertEqual( self.group_admin.extract("TESTGRP0"), - TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_JSON, + TestGroupConstants.TEST_EXTRACT_GROUP_RESULT_BASE_ONLY_SUCCESS_JSON, ) # Error in environment, TESTGRP0 already deleted/not added diff --git a/tests/user/test_user_constants.py b/tests/user/test_user_constants.py index ac9bc6b3..8819cc92 100644 --- a/tests/user/test_user_constants.py +++ b/tests/user/test_user_constants.py @@ -20,48 +20,51 @@ def get_sample(sample_file: str) -> Union[str, bytes]: TEST_ADD_USER_RESULT_SUCCESS_DICTIONARY = get_sample("add_user_result_success.json") TEST_ADD_USER_RESULT_ERROR_XML = get_sample("add_user_result_error.xml") TEST_ADD_USER_RESULT_ERROR_DICTIONARY = get_sample("add_user_result_error.json") -TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_XML = get_sample( - "add_user_result_password_success.xml" + +# Alter User +TEST_ALTER_USER_RESULT_SUCCESS_XML = get_sample("alter_user_result_success.xml") +TEST_ALTER_USER_RESULT_SUCCESS_DICTIONARY = get_sample("alter_user_result_success.json") +TEST_ALTER_USER_RESULT_ERROR_XML = get_sample("alter_user_result_error.xml") +TEST_ALTER_USER_RESULT_ERROR_DICTIONARY = get_sample("alter_user_result_error.json") +TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_XML = get_sample( + "alter_user_result_password_success.xml" ) -TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_DICTIONARY = get_sample( - "add_user_result_password_success.json" +TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_DICTIONARY = get_sample( + "alter_user_result_password_success.json" ) -TEST_ADD_USER_PASSWORD_RESULT_ERROR_XML = get_sample( - "add_user_result_password_error.xml" +TEST_ALTER_USER_PASSWORD_RESULT_ERROR_XML = get_sample( + "alter_user_result_password_error.xml" ) -TEST_ADD_USER_PASSWORD_RESULT_ERROR_DICTIONARY = get_sample( - "add_user_result_password_error.json" +TEST_ALTER_USER_PASSWORD_RESULT_ERROR_DICTIONARY = get_sample( + "alter_user_result_password_error.json" ) -TEST_ADD_USER_PASSPHRASE_RESULT_SUCCESS_XML = get_sample( - "add_user_result_passphrase_success.xml" +TEST_ALTER_USER_PASSPHRASE_RESULT_SUCCESS_XML = get_sample( + "alter_user_result_passphrase_success.xml" ) -TEST_ADD_USER_PASSPHRASE_RESULT_SUCCESS_DICTIONARY = get_sample( - "add_user_result_passphrase_success.json" +TEST_ALTER_USER_PASSPHRASE_RESULT_SUCCESS_DICTIONARY = get_sample( + "alter_user_result_passphrase_success.json" ) -TEST_ADD_USER_PASSPHRASE_RESULT_ERROR_XML = get_sample( - "add_user_result_passphrase_error.xml" +TEST_ALTER_USER_PASSPHRASE_RESULT_ERROR_XML = get_sample( + "alter_user_result_passphrase_error.xml" ) -TEST_ADD_USER_PASSPHRASE_RESULT_ERROR_DICTIONARY = get_sample( - "add_user_result_passphrase_error.json" +TEST_ALTER_USER_PASSPHRASE_RESULT_ERROR_DICTIONARY = get_sample( + "alter_user_result_passphrase_error.json" ) -TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_XML = get_sample( - "add_user_result_passphrase_and_password_success.xml" +TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_XML = get_sample( + "alter_user_result_passphrase_and_password_success.xml" ) -TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_DICTIONARY = get_sample( - "add_user_result_passphrase_and_password_success.json" +TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_DICTIONARY = get_sample( + "alter_user_result_passphrase_and_password_success.json" ) -TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_XML = get_sample( - "add_user_result_passphrase_and_password_error.xml" +TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_XML = get_sample( + "alter_user_result_passphrase_and_password_error.xml" ) -TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_DICTIONARY = get_sample( - "add_user_result_passphrase_and_password_error.json" +TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_DICTIONARY = get_sample( + "alter_user_result_passphrase_and_password_error.json" +) +TEST_ALTER_USER_RESULT_EXTENDED_SUCCESS_XML = get_sample( + "alter_user_result_extended_success.xml" ) - -# Alter User -TEST_ALTER_USER_RESULT_SUCCESS_XML = get_sample("alter_user_result_success.xml") -TEST_ALTER_USER_RESULT_SUCCESS_DICTIONARY = get_sample("alter_user_result_success.json") -TEST_ALTER_USER_RESULT_ERROR_XML = get_sample("alter_user_result_error.xml") -TEST_ALTER_USER_RESULT_ERROR_DICTIONARY = get_sample("alter_user_result_error.json") # Extract User TEST_EXTRACT_USER_RESULT_BASE_OMVS_SUCCESS_XML = get_sample( @@ -76,11 +79,17 @@ def get_sample(sample_file: str) -> Union[str, bytes]: TEST_EXTRACT_USER_RESULT_BASE_OMVS_ERROR_DICTIONARY = get_sample( "extract_user_result_base_omvs_error.json" ) -TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML = get_sample( - "extract_user_result_base_only_no_omvs_success.xml" +TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML = get_sample( + "extract_user_result_base_only_success.xml" +) +TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_JSON = get_sample( + "extract_user_result_base_only_success.json" ) -TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_JSON = get_sample( - "extract_user_result_base_only_no_omvs_success.json" +TEST_EXTRACT_USER_RESULT_BASE_ONLY_ERROR_XML = get_sample( + "extract_user_result_base_only_error.xml" +) +TEST_EXTRACT_USER_RESULT_BASE_ONLY_ERROR_JSON = get_sample( + "extract_user_result_base_only_error.json" ) TEST_EXTRACT_USER_RESULT_WITH_CLASS_AUTHORIZATIONS = get_sample( "extract_user_result_with_class_authorizations.xml" @@ -88,6 +97,12 @@ def get_sample(sample_file: str) -> Union[str, bytes]: TEST_EXTRACT_USER_RESULT_WITH_COMMAND_AUDIT_TRAIL_XML = get_sample( "extract_user_result_with_command_audit_trail.xml" ) +TEST_EXTRACT_USER_RESULT_INVALID_ATTRIBUTE_XML = get_sample( + "extract_user_result_invattr_error.xml" +) +TEST_EXTRACT_USER_RESULT_INVALID_ATTRIBUTE_JSON = get_sample( + "extract_user_result_invattr_error.json" +) # Delete User TEST_DELETE_USER_RESULT_SUCCESS_XML = get_sample("delete_user_result_success.xml") @@ -116,19 +131,6 @@ def get_sample(sample_file: str) -> Union[str, bytes]: "omvs:home": "/u/squidwrd", "omvs:program": "/bin/sh", } -TEST_ADD_USER_REQUEST_TRAITS_PASSWORD = dict(TEST_ADD_USER_REQUEST_TRAITS) -TEST_ADD_USER_REQUEST_TRAITS_PASSWORD["base:password"] = "GIyTTqdF" -TEST_ADD_USER_REQUEST_TRAITS_PASSWORD_SIMPLE = dict(TEST_ADD_USER_REQUEST_TRAITS) -TEST_ADD_USER_REQUEST_TRAITS_PASSWORD_SIMPLE["base:password"] = "PASSWORD" -TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE = dict(TEST_ADD_USER_REQUEST_TRAITS) -TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE["base:passphrase"] = "PassPhrasesAreCool!" -TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD = dict( - TEST_ADD_USER_REQUEST_TRAITS -) -TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD["base:password"] = "GIyTTqdF" -TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD[ - "base:passphrase" -] = "PassPhrasesAreCool!" TEST_ADD_USER_REQUEST_INVALID_TRAITS = dict(TEST_ADD_USER_REQUEST_TRAITS) TEST_ADD_USER_REQUEST_INVALID_TRAITS["omvs:invalid_trait"] = "TESTING VALUE" @@ -139,6 +141,33 @@ def get_sample(sample_file: str) -> Union[str, bytes]: "omvs:home": "/u/clarinet", "omvs:program": False, } +TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED = { + "base:name": "Squidward", + "base:owner": "leonard", + "base:special": True, + "omvs:uid": "2424", + "omvs:home": "/u/squidwrd", + "omvs:program": "/bin/sh", +} +TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD = dict(TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED) +TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD["base:password"] = "GIyTTqdF" +TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD_SIMPLE = dict( + TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED +) +TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD_SIMPLE["base:password"] = "PASSWORD" +TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE = dict( + TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED +) +TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE["base:passphrase"] = "PassPhrasesAreCool!" +TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD = dict( + TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED +) +TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD["base:password"] = "GIyTTqdF" +TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD[ + "base:passphrase" +] = "PassPhrasesAreCool!" +TEST_ALTER_USER_REQUEST_TRAITS_UID_ERROR = dict(TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED) +TEST_ALTER_USER_REQUEST_TRAITS_UID_ERROR["omvs:uid"] = 90000000000 # Extract User TEST_EXTRACT_USER_REQUEST_BASE_OMVS_XML = get_sample( @@ -198,27 +227,27 @@ def get_sample(sample_file: str) -> Union[str, bytes]: # Debug Logging # ============================================================================ -TEST_ADD_USER_SUCCESS_LOG = get_sample("add_user_success.log") -TEST_ADD_USER_ERROR_LOG = get_sample("add_user_error.log") +TEST_ALTER_USER_SUCCESS_LOG = get_sample("alter_user_success.log") +TEST_ALTER_USER_ERROR_LOG = get_sample("alter_user_error.log") -TEST_ADD_USER_ADDITIONAL_SECRET_ADDED_SUCCESS_LOG = get_sample( - "add_user_additional_secret_added_success.log" +TEST_ALTER_USER_ADDITIONAL_SECRET_ADDED_SUCCESS_LOG = get_sample( + "alter_user_additional_secret_added_success.log" ) -TEST_ADD_USER_ADDITIONAL_SECRET_ADDED_ERROR_LOG = get_sample( - "add_user_additional_secret_added_error.log" +TEST_ALTER_USER_ADDITIONAL_SECRET_ADDED_ERROR_LOG = get_sample( + "alter_user_additional_secret_added_error.log" ) -TEST_ADD_USER_PASSWORD_SUCCESS_LOG = get_sample("add_user_password_success.log") -TEST_ADD_USER_PASSWORD_ERROR_LOG = get_sample("add_user_password_error.log") +TEST_ALTER_USER_PASSWORD_SUCCESS_LOG = get_sample("alter_user_password_success.log") +TEST_ALTER_USER_PASSWORD_ERROR_LOG = get_sample("alter_user_password_error.log") -TEST_ADD_USER_PASSPHRASE_SUCCESS_LOG = get_sample("add_user_passphrase_success.log") -TEST_ADD_USER_PASSPHRASE_ERROR_LOG = get_sample("add_user_passphrase_error.log") +TEST_ALTER_USER_PASSPHRASE_SUCCESS_LOG = get_sample("alter_user_passphrase_success.log") +TEST_ALTER_USER_PASSPHRASE_ERROR_LOG = get_sample("alter_user_passphrase_error.log") -TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_SUCCESS_LOG = get_sample( - "add_user_passphrase_and_password_success.log" +TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_SUCCESS_LOG = get_sample( + "alter_user_passphrase_and_password_success.log" ) -TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_ERROR_LOG = get_sample( - "add_user_passphrase_and_password_error.log" +TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_ERROR_LOG = get_sample( + "alter_user_passphrase_and_password_error.log" ) TEST_EXTRACT_USER_BASE_OMVS_SUCCESS_LOG = get_sample( diff --git a/tests/user/test_user_debug_logging.py b/tests/user/test_user_debug_logging.py index 615959fa..c845a9c2 100644 --- a/tests/user/test_user_debug_logging.py +++ b/tests/user/test_user_debug_logging.py @@ -27,252 +27,304 @@ class TestUserDebugLogging(unittest.TestCase): simple_password = "PASSWORD" # ============================================================================ - # Add User + # Alter User # ============================================================================ - def test_add_user_request_debug_log_works_on_success( + def test_alter_user_request_debug_log_works_on_success( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = TestUserConstants.TEST_ADD_USER_RESULT_SUCCESS_XML + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_RESULT_SUCCESS_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): - self.user_admin.add( + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS, ) success_log = self.ansi_escape.sub("", stdout.getvalue()) - self.assertEqual(success_log, TestUserConstants.TEST_ADD_USER_SUCCESS_LOG) + self.assertEqual(success_log, TestUserConstants.TEST_ALTER_USER_SUCCESS_LOG) - def test_add_user_request_debug_log_works_on_error( + def test_alter_user_request_debug_log_works_on_error( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = TestUserConstants.TEST_ADD_USER_RESULT_ERROR_XML + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_RESULT_ERROR_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): try: - self.user_admin.add( + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_UID_ERROR, ) except SecurityRequestError: pass error_log = self.ansi_escape.sub("", stdout.getvalue()) - self.assertEqual(error_log, TestUserConstants.TEST_ADD_USER_ERROR_LOG) + self.assertEqual(error_log, TestUserConstants.TEST_ALTER_USER_ERROR_LOG) # ============================================================================ # Secrets Redaction # ============================================================================ - def test_add_user_request_debug_log_passwords_get_redacted_on_success( + def test_alter_user_request_debug_log_passwords_get_redacted_on_success( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): - self.user_admin.add( + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD, ) success_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( - success_log, TestUserConstants.TEST_ADD_USER_PASSWORD_SUCCESS_LOG + success_log, TestUserConstants.TEST_ALTER_USER_PASSWORD_SUCCESS_LOG ) self.assertNotIn(self.test_password, success_log) - def test_add_user_request_debug_log_passwords_get_redacted_on_error( + def test_alter_user_request_debug_log_passwords_get_redacted_on_error( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_ERROR_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): try: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD, + traits=error_traits, ) except SecurityRequestError: pass error_log = self.ansi_escape.sub("", stdout.getvalue()) - self.assertEqual(error_log, TestUserConstants.TEST_ADD_USER_PASSWORD_ERROR_LOG) + self.assertEqual( + error_log, TestUserConstants.TEST_ALTER_USER_PASSWORD_ERROR_LOG + ) self.assertNotIn(self.test_password, error_log) - def test_add_user_request_debug_log_passphrases_get_redacted_on_success( + def test_alter_user_request_debug_log_passphrases_get_redacted_on_success( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_RESULT_SUCCESS_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_RESULT_SUCCESS_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): - self.user_admin.add( + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE, ) success_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( - success_log, TestUserConstants.TEST_ADD_USER_PASSPHRASE_SUCCESS_LOG + success_log, TestUserConstants.TEST_ALTER_USER_PASSPHRASE_SUCCESS_LOG ) self.assertNotIn(self.test_passphrase, success_log) - def test_add_user_request_debug_log_passphrases_get_redacted_on_error( + def test_alter_user_request_debug_log_passphrases_get_redacted_on_error( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_RESULT_ERROR_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): try: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE, + traits=error_traits, ) except SecurityRequestError: pass error_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( - error_log, TestUserConstants.TEST_ADD_USER_PASSPHRASE_ERROR_LOG + error_log, TestUserConstants.TEST_ALTER_USER_PASSPHRASE_ERROR_LOG ) self.assertNotIn(self.test_passphrase, error_log) - def test_add_user_request_debug_log_passphrases_and_passwords_get_redacted_on_success( + def test_alter_user_request_debug_log_passphrases_and_passwords_get_redacted_on_success( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): - self.user_admin.add( + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, ) success_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( success_log, - TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_SUCCESS_LOG, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_SUCCESS_LOG, ) self.assertNotIn(self.test_passphrase, success_log) self.assertNotIn(self.test_password, success_log) - def test_add_user_request_debug_log_passphrases_and_passwords_get_redacted_on_error( + def test_alter_user_request_debug_log_passphrases_and_passwords_get_redacted_on_error( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): try: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, + traits=error_traits, ) except SecurityRequestError: pass error_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( - error_log, TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_ERROR_LOG + error_log, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_ERROR_LOG, ) self.assertNotIn(self.test_passphrase, error_log) self.assertNotIn(self.test_password, error_log) - def test_add_user_request_debug_log_password_xml_tags_not_redacted_on_success( + def test_alter_user_request_debug_log_password_xml_tags_not_redacted_on_success( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): - self.user_admin.add( + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD_SIMPLE, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD_SIMPLE, ) success_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( - success_log, TestUserConstants.TEST_ADD_USER_PASSWORD_SUCCESS_LOG + success_log, TestUserConstants.TEST_ALTER_USER_PASSWORD_SUCCESS_LOG ) self.assertEqual(success_log.count("********"), 4) self.assertIn(self.simple_password, success_log) - def test_add_user_request_debug_log_password_xml_tags_not_redacted_on_error( + def test_alter_user_request_debug_log_password_xml_tags_not_redacted_on_error( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_ERROR_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): try: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( + "squidwrd", + traits=error_traits, + ) + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD_SIMPLE, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD_SIMPLE, ) except SecurityRequestError: pass error_log = self.ansi_escape.sub("", stdout.getvalue()) - self.assertEqual(error_log, TestUserConstants.TEST_ADD_USER_PASSWORD_ERROR_LOG) + self.assertEqual( + error_log, TestUserConstants.TEST_ALTER_USER_PASSWORD_ERROR_LOG + ) self.assertEqual(error_log.count("********"), 4) self.assertIn(self.simple_password, error_log) # ============================================================================ # Add Additional Secrets # ============================================================================ - def test_add_user_request_debug_log_additional_secret_added_get_redacted_on_success( + def test_alter_user_request_debug_log_additional_secret_added_get_redacted_on_success( self, call_racf_mock: Mock, ): user_admin = UserAdmin(debug=True, additional_secret_traits=["omvs:uid"]) - call_racf_mock.return_value = TestUserConstants.TEST_ADD_USER_RESULT_SUCCESS_XML + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_RESULT_EXTENDED_SUCCESS_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): - user_admin.add( + user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED, ) success_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( success_log, - TestUserConstants.TEST_ADD_USER_ADDITIONAL_SECRET_ADDED_SUCCESS_LOG, + TestUserConstants.TEST_ALTER_USER_ADDITIONAL_SECRET_ADDED_SUCCESS_LOG, ) self.assertNotIn( - TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS["omvs:uid"], success_log + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_EXTENDED["omvs:uid"], + success_log, ) - def test_add_user_request_debug_log_additional_secret_added_get_redacted_on_error( + def test_alter_user_request_debug_log_additional_secret_added_get_redacted_on_error( self, call_racf_mock: Mock, ): user_admin = UserAdmin(debug=True, additional_secret_traits=["omvs:uid"]) - call_racf_mock.return_value = TestUserConstants.TEST_ADD_USER_RESULT_ERROR_XML + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_RESULT_ERROR_XML, + ] stdout = io.StringIO() with contextlib.redirect_stdout(stdout): try: - user_admin.add( + user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_UID_ERROR, ) except SecurityRequestError: pass error_log = self.ansi_escape.sub("", stdout.getvalue()) self.assertEqual( - error_log, TestUserConstants.TEST_ADD_USER_ADDITIONAL_SECRET_ADDED_ERROR_LOG + error_log, + TestUserConstants.TEST_ALTER_USER_ADDITIONAL_SECRET_ADDED_ERROR_LOG, ) self.assertNotIn( - TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS["omvs:uid"], error_log + "(" + + str( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_UID_ERROR["omvs:uid"] + ) + + ")", + error_log, ) # ============================================================================ diff --git a/tests/user/test_user_getters.py b/tests/user/test_user_getters.py index 089a43bf..a3c54ba1 100644 --- a/tests/user/test_user_getters.py +++ b/tests/user/test_user_getters.py @@ -151,7 +151,7 @@ def test_user_admin_get_class_authorizations_returns_empty_list_when_no_class_au call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertEqual(self.user_admin.get_class_authorizations("squidwrd"), []) @@ -192,7 +192,7 @@ def test_user_admin_get_omvs_uid_returns_none_when_no_omvs_segment_exists( call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertIsNone(self.user_admin.get_omvs_uid("squidwrd")) @@ -223,7 +223,7 @@ def test_user_admin_get_omvs_home_returns_none_when_no_omvs_segment_exists( call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertIsNone(self.user_admin.get_omvs_home("squidwrd")) @@ -254,6 +254,6 @@ def test_user_admin_get_omvs_program_returns_none_when_no_omvs_segment_exists( call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertIsNone(self.user_admin.get_omvs_program("squidwrd")) diff --git a/tests/user/test_user_request_builder.py b/tests/user/test_user_request_builder.py index f4d83698..7722f80f 100644 --- a/tests/user/test_user_request_builder.py +++ b/tests/user/test_user_request_builder.py @@ -55,7 +55,7 @@ def test_user_admin_build_add_user_request_password_redacted( ): result = self.user_admin.add( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD, ) self.assertEqual(result, TestUserConstants.TEST_ADD_USER_REQUEST_PASSWORD_XML) self.assertNotIn(self.test_password, result.decode("utf-8")) @@ -65,7 +65,7 @@ def test_user_admin_build_add_user_request_passphrase_redacted( ): result = self.user_admin.add( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE, ) self.assertEqual(result, TestUserConstants.TEST_ADD_USER_REQUEST_PASSPHRASE_XML) self.assertNotIn(self.test_passphrase, result.decode("utf-8")) @@ -75,7 +75,7 @@ def test_user_admin_build_add_user_request_passphrase_and_password_redacted( ): result = self.user_admin.add( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, ) self.assertEqual( result, TestUserConstants.TEST_ADD_USER_REQUEST_PASSPHRASE_AND_PASSWORD_XML diff --git a/tests/user/test_user_result_parser.py b/tests/user/test_user_result_parser.py index 64c9f83e..36ce90ac 100644 --- a/tests/user/test_user_result_parser.py +++ b/tests/user/test_user_result_parser.py @@ -29,7 +29,10 @@ def test_user_admin_can_parse_add_user_success_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = TestUserConstants.TEST_ADD_USER_RESULT_SUCCESS_XML + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_ERROR_XML, + TestUserConstants.TEST_ADD_USER_RESULT_SUCCESS_XML, + ] self.assertEqual( self.user_admin.add( "squidwrd", @@ -38,20 +41,23 @@ def test_user_admin_can_parse_add_user_success_xml( TestUserConstants.TEST_ADD_USER_RESULT_SUCCESS_DICTIONARY, ) - # Error in environment, SQUIDWRD already added/exists + # Error in command, SQUIDWARD is invalid USERID def test_user_admin_can_parse_add_user_error_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = TestUserConstants.TEST_ADD_USER_RESULT_ERROR_XML + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_INVALID_ATTRIBUTE_XML, + TestUserConstants.TEST_ADD_USER_RESULT_ERROR_XML, + ] with self.assertRaises(SecurityRequestError) as exception: self.user_admin.add( - "squidwrd", + "squidward", traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS, ) self.assertEqual( exception.exception.result, - TestUserConstants.TEST_ADD_USER_RESULT_ERROR_DICTIONARY, + TestUserConstants.TEST_EXTRACT_USER_RESULT_INVALID_ATTRIBUTE_JSON, ) # ============================================================================ @@ -62,7 +68,7 @@ def test_user_admin_can_parse_alter_user_success_xml( call_racf_mock: Mock, ): call_racf_mock.side_effect = [ - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML, + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, TestUserConstants.TEST_ALTER_USER_RESULT_SUCCESS_XML, ] self.assertEqual( @@ -79,7 +85,7 @@ def test_user_admin_throws_error_on_alter_new_user( profile_name = "squidwrd" admin_name = "USER" call_racf_mock.side_effect = [ - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_OMVS_ERROR_XML, + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_ERROR_XML, TestUserConstants.TEST_ALTER_USER_RESULT_SUCCESS_XML, ] with self.assertRaises(AlterOperationError) as exception: @@ -93,18 +99,19 @@ def test_user_admin_throws_error_on_alter_new_user( + f"'{profile_name}' does not exist as a {admin_name} profile.", ) - # Error: invalid parameter "name" + # Error: invalid uid '90000000000' def test_user_admin_can_parse_alter_user_error_xml( self, call_racf_mock: Mock, ): call_racf_mock.side_effect = [ - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML, + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, TestUserConstants.TEST_ALTER_USER_RESULT_ERROR_XML, ] with self.assertRaises(SecurityRequestError) as exception: self.user_admin.alter( - "squidwrd", traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS + "squidwrd", + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_UID_ERROR, ) self.assertEqual( exception.exception.result, @@ -126,16 +133,16 @@ def test_user_admin_can_parse_extract_user_base_omvs_success_xml( TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_OMVS_SUCCESS_DICTIONARY, ) - def test_user_admin_can_parse_extract_user_base_only_no_omvs_success_xml( + def test_user_admin_can_parse_extract_user_base_only_success_xml( self, call_racf_mock: Mock, ): call_racf_mock.return_value = ( - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_XML + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML ) self.assertEqual( self.user_admin.extract("squidwrd", segments={"omvs": True}), - TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_NO_OMVS_SUCCESS_JSON, + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_JSON, ) # Error in environment, SQUIDWRD already deleted/not added @@ -168,100 +175,113 @@ def test_user_admin_can_parse_extract_user_and_ignore_command_audit_trail_xml( # ============================================================================ # Password and Password Phrase Redaction # ============================================================================ - def test_user_admin_password_redacted_add_user_success_xml( + def test_user_admin_password_redacted_alter_user_success_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_XML - ) - result = self.user_admin.add( + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_XML, + ] + result = self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD, ) self.assertEqual( result, - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_DICTIONARY, ) result_str = str(result) self.assertNotIn(self.test_password, result_str) self.assertNotIn("(" + " " * len(self.test_password) + ")", result_str) - # Error in environment, SQUIDWRD already added/exists - def test_user_admin_password_redacted_add_user_error_xml( + # Error: invalid uid '90000000000' + def test_user_admin_password_redacted_alter_user_error_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_ERROR_XML, + ] with self.assertRaises(SecurityRequestError) as exception: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD, + traits=error_traits, ) self.assertEqual( exception.exception.result, - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_ERROR_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_ERROR_DICTIONARY, ) result_str = str(exception.exception.result) self.assertNotIn(self.test_password, result_str) self.assertNotIn("(" + " " * len(self.test_password) + ")", result_str) - def test_user_admin_passphrase_redacted_add_user_success_xml( + def test_user_admin_passphrase_redacted_alter_user_success_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_RESULT_SUCCESS_XML - ) - result = self.user_admin.add( + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_RESULT_SUCCESS_XML, + ] + result = self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE, ) self.assertEqual( result, - TestUserConstants.TEST_ADD_USER_PASSPHRASE_RESULT_SUCCESS_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_RESULT_SUCCESS_DICTIONARY, ) result_str = str(result) self.assertNotIn(self.test_passphrase, result_str) self.assertNotIn("(" + " " * (len(self.test_passphrase) + 2) + ")", result_str) - # Error in environment, SQUIDWRD already added/exists - def test_user_admin_passphrase_redacted_add_user_error_xml( + # Error: invalid uid '90000000000' + def test_user_admin_passphrase_redacted_alter_user_error_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_RESULT_ERROR_XML, + ] with self.assertRaises(SecurityRequestError) as exception: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE, + traits=error_traits, ) self.assertEqual( exception.exception.result, - TestUserConstants.TEST_ADD_USER_PASSPHRASE_RESULT_ERROR_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_RESULT_ERROR_DICTIONARY, ) result_str = str(exception.exception.result) self.assertNotIn(self.test_passphrase, result_str) self.assertNotIn("(" + " " * (len(self.test_passphrase) + 2) + ")", result_str) - def test_user_admin_passphrase_and_password_redacted_add_user_success_xml( + def test_user_admin_passphrase_and_password_redacted_alter_user_success_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_XML - ) - result = self.user_admin.add( + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_XML, + ] + result = self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, ) self.assertEqual( result, - TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_SUCCESS_DICTIONARY, ) result_str = str(result) self.assertNotIn(self.test_passphrase, result_str) @@ -269,22 +289,27 @@ def test_user_admin_passphrase_and_password_redacted_add_user_success_xml( self.assertNotIn("(" + " " * (len(self.test_passphrase) + 2) + ")", result_str) self.assertNotIn("(" + " " * len(self.test_password) + ")", result_str) - # Error in environment, SQUIDWRD already added/exists - def test_user_admin_passphrase_and_password_redacted_add_user_error_xml( + # Error: invalid uid '90000000000' + def test_user_admin_passphrase_and_password_redacted_alter_user_error_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_XML, + ] with self.assertRaises(SecurityRequestError) as exception: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSPHRASE_AND_PASSWORD, + traits=error_traits, ) self.assertEqual( exception.exception.result, - TestUserConstants.TEST_ADD_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSPHRASE_AND_PASSWORD_RESULT_ERROR_DICTIONARY, ) result_str = str(exception.exception.result) self.assertNotIn(self.test_passphrase, result_str) @@ -292,42 +317,48 @@ def test_user_admin_passphrase_and_password_redacted_add_user_error_xml( self.assertNotIn("(" + " " * (len(self.test_passphrase) + 2) + ")", result_str) self.assertNotIn("(" + " " * len(self.test_password) + ")", result_str) - def test_user_admin_password_message_not_redacted_add_user_success_xml( + def test_user_admin_password_message_not_redacted_alter_user_success_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_XML - ) - result = self.user_admin.add( + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_XML, + ] + result = self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD_SIMPLE, + traits=TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD_SIMPLE, ) self.assertEqual( result, - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_SUCCESS_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_SUCCESS_DICTIONARY, ) result_str = str(result) self.assertNotIn("(" + self.simple_password + ")", result_str) self.assertNotIn("(" + " " * len(self.simple_password) + ")", result_str) self.assertIn(self.simple_password, result_str) - # Error in environment, SQUIDWRD already added/exists - def test_user_admin_password_message_not_redacted_add_user_error_xml( + # Error: invalid uid '90000000000' + def test_user_admin_password_message_not_redacted_alter_user_error_xml( self, call_racf_mock: Mock, ): - call_racf_mock.return_value = ( - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_ERROR_XML - ) + call_racf_mock.side_effect = [ + TestUserConstants.TEST_EXTRACT_USER_RESULT_BASE_ONLY_SUCCESS_XML, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_ERROR_XML, + ] with self.assertRaises(SecurityRequestError) as exception: - self.user_admin.add( + error_traits = dict( + TestUserConstants.TEST_ALTER_USER_REQUEST_TRAITS_PASSWORD_SIMPLE + ) + error_traits["omvs:uid"] = 90000000000 + self.user_admin.alter( "squidwrd", - traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS_PASSWORD_SIMPLE, + traits=error_traits, ) self.assertEqual( exception.exception.result, - TestUserConstants.TEST_ADD_USER_PASSWORD_RESULT_ERROR_DICTIONARY, + TestUserConstants.TEST_ALTER_USER_PASSWORD_RESULT_ERROR_DICTIONARY, ) result_str = str(exception.exception.result) self.assertNotIn("(" + self.simple_password + ")", result_str) diff --git a/tests/user/user_log_samples/add_user_additional_secret_added_error.log b/tests/user/user_log_samples/add_user_additional_secret_added_error.log deleted file mode 100644 index d8f8dc5a..00000000 --- a/tests/user/user_log_samples/add_user_additional_secret_added_error.log +++ /dev/null @@ -1,120 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "********", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - - - ******** - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 8 - 16 - 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (********) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 4 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 8, - "returnCode": 16, - "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (********) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 4, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_additional_secret_added_success.log b/tests/user/user_log_samples/add_user_additional_secret_added_success.log deleted file mode 100644 index 2ad712e4..00000000 --- a/tests/user/user_log_samples/add_user_additional_secret_added_success.log +++ /dev/null @@ -1,120 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "********", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - - - ******** - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (********) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 0 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (********) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 0, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_error.log b/tests/user/user_log_samples/add_user_error.log deleted file mode 100644 index e5bba4fe..00000000 --- a/tests/user/user_log_samples/add_user_error.log +++ /dev/null @@ -1,120 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 8 - 16 - 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 4 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 8, - "returnCode": 16, - "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 4, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_passphrase_and_password_error.log b/tests/user/user_log_samples/add_user_passphrase_and_password_error.log deleted file mode 100644 index c30b9aba..00000000 --- a/tests/user/user_log_samples/add_user_passphrase_and_password_error.log +++ /dev/null @@ -1,130 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - }, - "base:password": { - "value": "********", - "operation": null - }, - "base:passphrase": { - "value": "********", - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - ******** - ******** - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 8 - 16 - 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 4 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 8, - "returnCode": 16, - "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 4, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_passphrase_and_password_success.log b/tests/user/user_log_samples/add_user_passphrase_and_password_success.log deleted file mode 100644 index dd17d227..00000000 --- a/tests/user/user_log_samples/add_user_passphrase_and_password_success.log +++ /dev/null @@ -1,130 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - }, - "base:password": { - "value": "********", - "operation": null - }, - "base:passphrase": { - "value": "********", - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - ******** - ******** - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 0 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 0, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_passphrase_error.log b/tests/user/user_log_samples/add_user_passphrase_error.log deleted file mode 100644 index e3b19e12..00000000 --- a/tests/user/user_log_samples/add_user_passphrase_error.log +++ /dev/null @@ -1,125 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - }, - "base:passphrase": { - "value": "********", - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - ******** - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 8 - 16 - 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 4 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 8, - "returnCode": 16, - "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 4, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_passphrase_success.log b/tests/user/user_log_samples/add_user_passphrase_success.log deleted file mode 100644 index 426485c2..00000000 --- a/tests/user/user_log_samples/add_user_passphrase_success.log +++ /dev/null @@ -1,125 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - }, - "base:passphrase": { - "value": "********", - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - ******** - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 0 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 0, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_password_error.log b/tests/user/user_log_samples/add_user_password_error.log deleted file mode 100644 index 4bf641d2..00000000 --- a/tests/user/user_log_samples/add_user_password_error.log +++ /dev/null @@ -1,125 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - }, - "base:password": { - "value": "********", - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - ******** - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 8 - 16 - 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 4 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 8, - "returnCode": 16, - "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 4, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_password_success.log b/tests/user/user_log_samples/add_user_password_success.log deleted file mode 100644 index ad25b298..00000000 --- a/tests/user/user_log_samples/add_user_password_success.log +++ /dev/null @@ -1,125 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - }, - "base:password": { - "value": "********", - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - ******** - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 0 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 0, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/add_user_success.log b/tests/user/user_log_samples/add_user_success.log deleted file mode 100644 index e462fb22..00000000 --- a/tests/user/user_log_samples/add_user_success.log +++ /dev/null @@ -1,120 +0,0 @@ - - [pyRACF:Debug] - Request Dictionary - UserAdmin.add() - - -{ - "base": { - "base:name": { - "value": "Squidward", - "operation": null - }, - "base:owner": { - "value": "leonard", - "operation": null - }, - "base:special": { - "value": true, - "operation": null - } - }, - "omvs": { - "omvs:uid": { - "value": "2424", - "operation": null - }, - "omvs:home": { - "value": "/u/squidwrd", - "operation": null - }, - "omvs:program": { - "value": "/bin/sh", - "operation": null - } - } -} - - - [pyRACF:Debug] - Request XML - UserAdmin.add() - - - - - - Squidward - leonard - - - - 2424 - /u/squidwrd - /bin/sh - - - - - - [pyRACF:Debug] - Result XML - UserAdmin.add() - - - - - - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - - - 0 - 0 - - - - [pyRACF:Debug] - Result Dictionary - UserAdmin.add() - - -{ - "securityResult": { - "user": { - "name": "SQUIDWRD", - "operation": "set", - "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] - }, - "returnCode": 0, - "reasonCode": 0 - } -} - diff --git a/tests/user/user_log_samples/alter_user_additional_secret_added_error.log b/tests/user/user_log_samples/alter_user_additional_secret_added_error.log new file mode 100644 index 00000000..92d3947b --- /dev/null +++ b/tests/user/user_log_samples/alter_user_additional_secret_added_error.log @@ -0,0 +1,283 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": "********", + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + + + ******** + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 8 + 16 + 8 + ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (********)) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS + + + 4 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 8, + "returnCode": 16, + "reasonCode": 8, + "image": "ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (********))", + "messages": [ + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" + ] + } + ] + }, + "returnCode": 4, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_additional_secret_added_success.log b/tests/user/user_log_samples/alter_user_additional_secret_added_success.log new file mode 100644 index 00000000..214ac28c --- /dev/null +++ b/tests/user/user_log_samples/alter_user_additional_secret_added_success.log @@ -0,0 +1,275 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": "********", + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + + + ******** + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 0 + 0 + 0 + ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (********)) + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (********))" + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_error.log b/tests/user/user_log_samples/alter_user_error.log new file mode 100644 index 00000000..93552625 --- /dev/null +++ b/tests/user/user_log_samples/alter_user_error.log @@ -0,0 +1,283 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": 90000000000, + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + + + 90000000000 + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 8 + 16 + 8 + ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (90000000000)) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS + + + 4 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 8, + "returnCode": 16, + "reasonCode": 8, + "image": "ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (90000000000))", + "messages": [ + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" + ] + } + ] + }, + "returnCode": 4, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_passphrase_and_password_error.log b/tests/user/user_log_samples/alter_user_passphrase_and_password_error.log new file mode 100644 index 00000000..48120c67 --- /dev/null +++ b/tests/user/user_log_samples/alter_user_passphrase_and_password_error.log @@ -0,0 +1,293 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + }, + "base:password": { + "value": "********", + "operation": null + }, + "base:passphrase": { + "value": "********", + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": 90000000000, + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + ******** + ******** + + + 90000000000 + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 8 + 16 + 8 + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS + + + 4 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 8, + "returnCode": 16, + "reasonCode": 8, + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))", + "messages": [ + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" + ] + } + ] + }, + "returnCode": 4, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_passphrase_and_password_success.log b/tests/user/user_log_samples/alter_user_passphrase_and_password_success.log new file mode 100644 index 00000000..e5a0401a --- /dev/null +++ b/tests/user/user_log_samples/alter_user_passphrase_and_password_success.log @@ -0,0 +1,285 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + }, + "base:password": { + "value": "********", + "operation": null + }, + "base:passphrase": { + "value": "********", + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": "2424", + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + ******** + ******** + + + 2424 + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 0 + 0 + 0 + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_passphrase_error.log b/tests/user/user_log_samples/alter_user_passphrase_error.log new file mode 100644 index 00000000..7ad51915 --- /dev/null +++ b/tests/user/user_log_samples/alter_user_passphrase_error.log @@ -0,0 +1,288 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + }, + "base:passphrase": { + "value": "********", + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": 90000000000, + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + ******** + + + 90000000000 + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 8 + 16 + 8 + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS + + + 4 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 8, + "returnCode": 16, + "reasonCode": 8, + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))", + "messages": [ + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" + ] + } + ] + }, + "returnCode": 4, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_passphrase_success.log b/tests/user/user_log_samples/alter_user_passphrase_success.log new file mode 100644 index 00000000..a92acc47 --- /dev/null +++ b/tests/user/user_log_samples/alter_user_passphrase_success.log @@ -0,0 +1,280 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + }, + "base:passphrase": { + "value": "********", + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": "2424", + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + ******** + + + 2424 + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 0 + 0 + 0 + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_password_error.log b/tests/user/user_log_samples/alter_user_password_error.log new file mode 100644 index 00000000..918d0466 --- /dev/null +++ b/tests/user/user_log_samples/alter_user_password_error.log @@ -0,0 +1,288 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + }, + "base:password": { + "value": "********", + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": 90000000000, + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + ******** + + + 90000000000 + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 8 + 16 + 8 + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS + + + 4 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 8, + "returnCode": 16, + "reasonCode": 8, + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))", + "messages": [ + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" + ] + } + ] + }, + "returnCode": 4, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_password_success.log b/tests/user/user_log_samples/alter_user_password_success.log new file mode 100644 index 00000000..384b8293 --- /dev/null +++ b/tests/user/user_log_samples/alter_user_password_success.log @@ -0,0 +1,280 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:name": { + "value": "Squidward", + "operation": null + }, + "base:owner": { + "value": "leonard", + "operation": null + }, + "base:special": { + "value": true, + "operation": null + }, + "base:password": { + "value": "********", + "operation": null + } + }, + "omvs": { + "omvs:uid": { + "value": "2424", + "operation": null + }, + "omvs:home": { + "value": "/u/squidwrd", + "operation": null + }, + "omvs:program": { + "value": "/bin/sh", + "operation": null + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + Squidward + leonard + + ******** + + + 2424 + /u/squidwrd + /bin/sh + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 0 + 0 + 0 + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_log_samples/alter_user_success.log b/tests/user/user_log_samples/alter_user_success.log new file mode 100644 index 00000000..ac9f17af --- /dev/null +++ b/tests/user/user_log_samples/alter_user_success.log @@ -0,0 +1,260 @@ + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + + 0 + 0 + 0 + LISTUSER SQUIDWRD + USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 + DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A + ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + LAST-ACCESS=23.094/12:55:37 + CLASS AUTHORIZATIONS=NONE + NO-INSTALLATION-DATA + NO-MODEL-NAME + LOGON ALLOWED (DAYS) (TIME) + --------------------------------------------- + ANYDAY ANYTIME + GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094 + CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN + CONNECT ATTRIBUTES=NONE + REVOKE DATE=NONE RESUME DATE=NONE + SECURITY-LEVEL=NONE SPECIFIED + CATEGORY-AUTHORIZATION + NONE SPECIFIED + SECURITY-LABEL=NONE SPECIFIED + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094", + " DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A", + " ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + " LAST-ACCESS=23.094/12:55:37", + " CLASS AUTHORIZATIONS=NONE", + " NO-INSTALLATION-DATA", + " NO-MODEL-NAME", + " LOGON ALLOWED (DAYS) (TIME)", + " ---------------------------------------------", + " ANYDAY ANYTIME", + " GROUP=SYS1 AUTH=USE CONNECT-OWNER=LEONARD CONNECT-DATE=23.094", + " CONNECTS= 00 UACC=NONE LAST-CONNECT=UNKNOWN", + " CONNECT ATTRIBUTES=NONE", + " REVOKE DATE=NONE RESUME DATE=NONE", + "SECURITY-LEVEL=NONE SPECIFIED", + "CATEGORY-AUTHORIZATION", + " NONE SPECIFIED", + "SECURITY-LABEL=NONE SPECIFIED" + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Result Dictionary (Formatted Profile) + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "LISTUSER SQUIDWRD ", + "profiles": [ + { + "base": { + "user": "squidwrd", + "name": "squidward", + "owner": "leonard", + "created": "4/4/2023", + "defaultGroup": "sys1", + "passwordDate": null, + "passwordInterval": 186, + "passphraseDate": null, + "attributes": [], + "revokeDate": null, + "resumeDate": null, + "lastAccess": "4/4/2023 12:55 PM", + "classAuthorizations": [], + "logonAllowedDays": "anyday", + "logonAllowedTime": "anytime", + "groups": { + "SYS1": { + "auth": "use", + "connectOwner": "leonard", + "connectDate": "4/4/2023", + "connects": 0, + "uacc": null, + "lastConnect": "unknown", + "connectAttributes": [], + "revokeDate": null, + "resumeDate": null + } + }, + "securityLevel": null, + "categoryAuthorization": null, + "securityLabel": null + } + } + ] + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + + + [pyRACF:Debug] + Request Dictionary + UserAdmin.alter() + + +{ + "base": { + "base:special": { + "value": false, + "operation": "delete" + } + }, + "omvs": { + "omvs:home": { + "value": "/u/clarinet", + "operation": null + }, + "omvs:program": { + "value": false, + "operation": "delete" + } + } +} + + + [pyRACF:Debug] + Request XML + UserAdmin.alter() + + + + + + + + + /u/clarinet + + + + + + + [pyRACF:Debug] + Result XML + UserAdmin.alter() + + + + + + Definition exists. Add command skipped due to precheck option + + 0 + 0 + 0 + ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM ) + + + 0 + 0 + + + + [pyRACF:Debug] + Result Dictionary + UserAdmin.alter() + + +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "set", + "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 0, + "returnCode": 0, + "reasonCode": 0, + "image": "ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM )" + } + ] + }, + "returnCode": 0, + "reasonCode": 0 + } +} + diff --git a/tests/user/user_result_samples/add_user_result_error.json b/tests/user/user_result_samples/add_user_result_error.json index 3e054d37..543c008a 100644 --- a/tests/user/user_result_samples/add_user_result_error.json +++ b/tests/user/user_result_samples/add_user_result_error.json @@ -1,28 +1,19 @@ { "securityResult": { "user": { - "name": "SQUIDWRD", + "name": "squidward", "operation": "set", "requestId": "UserRequest", - "commands": [ - { - "safReturnCode": 8, - "returnCode": 16, - "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" - ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" - } - ] + "error": { + "errorFunction": 10, + "errorCode": 2000, + "errorReason": 68, + "errorMessage": "Invalid attribute value specified.", + "errorOffset": 149, + "textInError": "name" + } }, - "returnCode": 4, - "reasonCode": 0 + "returnCode": 2000, + "reasonCode": 68 } } \ No newline at end of file diff --git a/tests/user/user_result_samples/add_user_result_error.xml b/tests/user/user_result_samples/add_user_result_error.xml index 17fcd3c6..42675813 100644 --- a/tests/user/user_result_samples/add_user_result_error.xml +++ b/tests/user/user_result_samples/add_user_result_error.xml @@ -1,20 +1,15 @@ - - - 8 - 16 - 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) - + + + 10 + 2000 + 68 + Invalid attribute value specified. + 149 + name + - 4 - 0 + 2000 + 68 \ No newline at end of file diff --git a/tests/user/user_result_samples/alter_user_result_error.json b/tests/user/user_result_samples/alter_user_result_error.json index 543c008a..e387aea5 100644 --- a/tests/user/user_result_samples/alter_user_result_error.json +++ b/tests/user/user_result_samples/alter_user_result_error.json @@ -1,19 +1,27 @@ { "securityResult": { "user": { - "name": "squidward", + "name": "SQUIDWRD", "operation": "set", "requestId": "UserRequest", - "error": { - "errorFunction": 10, - "errorCode": 2000, - "errorReason": 68, - "errorMessage": "Invalid attribute value specified.", - "errorOffset": 149, - "textInError": "name" - } + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], + "commands": [ + { + "safReturnCode": 8, + "returnCode": 16, + "reasonCode": 8, + "image": "ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (90000000000))", + "messages": [ + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" + ] + } + ] }, - "returnCode": 2000, - "reasonCode": 68 + "returnCode": 4, + "reasonCode": 0 } -} \ No newline at end of file +} diff --git a/tests/user/user_result_samples/alter_user_result_error.xml b/tests/user/user_result_samples/alter_user_result_error.xml index 42675813..8a62f076 100644 --- a/tests/user/user_result_samples/alter_user_result_error.xml +++ b/tests/user/user_result_samples/alter_user_result_error.xml @@ -1,15 +1,17 @@ - - - 10 - 2000 - 68 - Invalid attribute value specified. - 149 - name - + + Definition exists. Add command skipped due to precheck option + + 8 + 16 + 8 + ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (90000000000)) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS + - 2000 - 68 + 4 + 0 \ No newline at end of file diff --git a/tests/user/user_result_samples/alter_user_result_extended_success.xml b/tests/user/user_result_samples/alter_user_result_extended_success.xml new file mode 100644 index 00000000..87293679 --- /dev/null +++ b/tests/user/user_result_samples/alter_user_result_extended_success.xml @@ -0,0 +1,14 @@ + + + + Definition exists. Add command skipped due to precheck option + + 0 + 0 + 0 + ALTUSER SQUIDWRD NOSPECIAL OMVS (HOME ('/u/clarinet') NOPROGRAM UID (2424)) + + + 0 + 0 + \ No newline at end of file diff --git a/tests/user/user_result_samples/add_user_result_passphrase_and_password_error.json b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_error.json similarity index 56% rename from tests/user/user_result_samples/add_user_result_passphrase_and_password_error.json rename to tests/user/user_result_samples/alter_user_result_passphrase_and_password_error.json index b9ba8b26..d937bb8e 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_and_password_error.json +++ b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_error.json @@ -4,21 +4,20 @@ "name": "SQUIDWRD", "operation": "set", "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], "commands": [ { "safReturnCode": 8, "returnCode": 16, "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))", "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" } ] }, diff --git a/tests/user/user_result_samples/add_user_result_passphrase_and_password_error.xml b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_error.xml similarity index 57% rename from tests/user/user_result_samples/add_user_result_passphrase_and_password_error.xml rename to tests/user/user_result_samples/alter_user_result_passphrase_and_password_error.xml index 0754c474..ae8f287f 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_and_password_error.xml +++ b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_error.xml @@ -1,18 +1,15 @@ + Definition exists. Add command skipped due to precheck option 8 16 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD ( ) PHRASE ( ) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD ( ) PHRASE ( ) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS 4 diff --git a/tests/user/user_result_samples/add_user_result_passphrase_and_password_success.json b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_success.json similarity index 68% rename from tests/user/user_result_samples/add_user_result_passphrase_and_password_success.json rename to tests/user/user_result_samples/alter_user_result_passphrase_and_password_success.json index 2272e108..bdbb9d44 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_and_password_success.json +++ b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_success.json @@ -4,16 +4,10 @@ "name": "SQUIDWRD", "operation": "set", "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, { "safReturnCode": 0, "returnCode": 0, diff --git a/tests/user/user_result_samples/add_user_result_passphrase_and_password_success.xml b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_success.xml similarity index 72% rename from tests/user/user_result_samples/add_user_result_passphrase_and_password_success.xml rename to tests/user/user_result_samples/alter_user_result_passphrase_and_password_success.xml index 8a502749..58b50bf9 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_and_password_success.xml +++ b/tests/user/user_result_samples/alter_user_result_passphrase_and_password_success.xml @@ -1,13 +1,7 @@ - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - + Definition exists. Add command skipped due to precheck option 0 0 diff --git a/tests/user/user_result_samples/add_user_result_passphrase_error.json b/tests/user/user_result_samples/alter_user_result_passphrase_error.json similarity index 57% rename from tests/user/user_result_samples/add_user_result_passphrase_error.json rename to tests/user/user_result_samples/alter_user_result_passphrase_error.json index 7e0a60df..5b067f5c 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_error.json +++ b/tests/user/user_result_samples/alter_user_result_passphrase_error.json @@ -4,21 +4,20 @@ "name": "SQUIDWRD", "operation": "set", "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], "commands": [ { "safReturnCode": 8, "returnCode": 16, "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))", "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" } ] }, diff --git a/tests/user/user_result_samples/add_user_result_passphrase_error.xml b/tests/user/user_result_samples/alter_user_result_passphrase_error.xml similarity index 58% rename from tests/user/user_result_samples/add_user_result_passphrase_error.xml rename to tests/user/user_result_samples/alter_user_result_passphrase_error.xml index 7155fc95..98edd9d7 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_error.xml +++ b/tests/user/user_result_samples/alter_user_result_passphrase_error.xml @@ -1,18 +1,15 @@ + Definition exists. Add command skipped due to precheck option 8 16 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE ( ) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PHRASE ( ) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS 4 diff --git a/tests/user/user_result_samples/add_user_result_passphrase_success.json b/tests/user/user_result_samples/alter_user_result_passphrase_success.json similarity index 67% rename from tests/user/user_result_samples/add_user_result_passphrase_success.json rename to tests/user/user_result_samples/alter_user_result_passphrase_success.json index a3da3294..153669eb 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_success.json +++ b/tests/user/user_result_samples/alter_user_result_passphrase_success.json @@ -4,16 +4,10 @@ "name": "SQUIDWRD", "operation": "set", "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, { "safReturnCode": 0, "returnCode": 0, diff --git a/tests/user/user_result_samples/add_user_result_passphrase_success.xml b/tests/user/user_result_samples/alter_user_result_passphrase_success.xml similarity index 71% rename from tests/user/user_result_samples/add_user_result_passphrase_success.xml rename to tests/user/user_result_samples/alter_user_result_passphrase_success.xml index 1796a3a6..99696d89 100644 --- a/tests/user/user_result_samples/add_user_result_passphrase_success.xml +++ b/tests/user/user_result_samples/alter_user_result_passphrase_success.xml @@ -1,13 +1,7 @@ - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - + Definition exists. Add command skipped due to precheck option 0 0 diff --git a/tests/user/user_result_samples/add_user_result_password_error.json b/tests/user/user_result_samples/alter_user_result_password_error.json similarity index 57% rename from tests/user/user_result_samples/add_user_result_password_error.json rename to tests/user/user_result_samples/alter_user_result_password_error.json index c85706b0..b2792339 100644 --- a/tests/user/user_result_samples/add_user_result_password_error.json +++ b/tests/user/user_result_samples/alter_user_result_password_error.json @@ -4,21 +4,20 @@ "name": "SQUIDWRD", "operation": "set", "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], "commands": [ { "safReturnCode": 8, "returnCode": 16, "reasonCode": 8, - "image": "ADDUSER SQUIDWRD ", + "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))", "messages": [ - "IKJ56702I INVALID USERID, SQUIDWRD" + "IKJ56702I INVALID UID, 90000000000", + "IKJ56701I MISSING OMVS UID+", + "IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS" ] - }, - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD (********) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh'))" } ] }, diff --git a/tests/user/user_result_samples/add_user_result_password_error.xml b/tests/user/user_result_samples/alter_user_result_password_error.xml similarity index 59% rename from tests/user/user_result_samples/add_user_result_password_error.xml rename to tests/user/user_result_samples/alter_user_result_password_error.xml index 94046b54..8827d971 100644 --- a/tests/user/user_result_samples/add_user_result_password_error.xml +++ b/tests/user/user_result_samples/alter_user_result_password_error.xml @@ -1,18 +1,15 @@ + Definition exists. Add command skipped due to precheck option 8 16 8 - ADDUSER SQUIDWRD - IKJ56702I INVALID USERID, SQUIDWRD - - - 0 - 0 - 0 - ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD ( ) OMVS (UID (2424) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + ALTUSER SQUIDWRD NAME ('Squidward') OWNER (leonard) SPECIAL PASSWORD ( ) OMVS (UID (90000000000) HOME ('/u/squidwrd') PROGRAM ('/bin/sh')) + IKJ56702I INVALID UID, 90000000000 + IKJ56701I MISSING OMVS UID+ + IKJ56701I MISSING OMVS USER ID (UID), 1-10 NUMERIC DIGITS 4 diff --git a/tests/user/user_result_samples/add_user_result_password_success.json b/tests/user/user_result_samples/alter_user_result_password_success.json similarity index 67% rename from tests/user/user_result_samples/add_user_result_password_success.json rename to tests/user/user_result_samples/alter_user_result_password_success.json index 0ba9cd36..44dcb6a3 100644 --- a/tests/user/user_result_samples/add_user_result_password_success.json +++ b/tests/user/user_result_samples/alter_user_result_password_success.json @@ -4,16 +4,10 @@ "name": "SQUIDWRD", "operation": "set", "requestId": "UserRequest", + "info": [ + "Definition exists. Add command skipped due to precheck option" + ], "commands": [ - { - "safReturnCode": 0, - "returnCode": 0, - "reasonCode": 0, - "image": "ADDUSER SQUIDWRD ", - "messages": [ - "ICH01024I User SQUIDWRD is defined as PROTECTED." - ] - }, { "safReturnCode": 0, "returnCode": 0, diff --git a/tests/user/user_result_samples/add_user_result_password_success.xml b/tests/user/user_result_samples/alter_user_result_password_success.xml similarity index 71% rename from tests/user/user_result_samples/add_user_result_password_success.xml rename to tests/user/user_result_samples/alter_user_result_password_success.xml index 5f85509a..85d01eb2 100644 --- a/tests/user/user_result_samples/add_user_result_password_success.xml +++ b/tests/user/user_result_samples/alter_user_result_password_success.xml @@ -1,13 +1,7 @@ - - 0 - 0 - 0 - ADDUSER SQUIDWRD - ICH01024I User SQUIDWRD is defined as PROTECTED. - + Definition exists. Add command skipped due to precheck option 0 0 diff --git a/tests/user/user_result_samples/extract_user_result_base_only_error.json b/tests/user/user_result_samples/extract_user_result_base_only_error.json new file mode 100644 index 00000000..7edd69fd --- /dev/null +++ b/tests/user/user_result_samples/extract_user_result_base_only_error.json @@ -0,0 +1,22 @@ +{ + "securityResult": { + "user": { + "name": "SQUIDWRD", + "operation": "listdata", + "requestId": "UserRequest", + "commands": [ + { + "safReturnCode": 8, + "returnCode": 16, + "reasonCode": 4, + "image": "LISTUSER SQUIDWRD ", + "messages": [ + "ICH30001I UNABLE TO LOCATE USER ENTRY SQUIDWRD" + ] + } + ] + }, + "returnCode": 4, + "reasonCode": 0 + } +} \ No newline at end of file diff --git a/tests/user/user_result_samples/extract_user_result_base_only_error.xml b/tests/user/user_result_samples/extract_user_result_base_only_error.xml new file mode 100644 index 00000000..bf9d9089 --- /dev/null +++ b/tests/user/user_result_samples/extract_user_result_base_only_error.xml @@ -0,0 +1,14 @@ + + + + + 8 + 16 + 4 + LISTUSER SQUIDWRD + ICH30001I UNABLE TO LOCATE USER ENTRY SQUIDWRD + + + 4 + 0 + \ No newline at end of file diff --git a/tests/user/user_result_samples/extract_user_result_base_only_no_omvs_success.json b/tests/user/user_result_samples/extract_user_result_base_only_success.json similarity index 96% rename from tests/user/user_result_samples/extract_user_result_base_only_no_omvs_success.json rename to tests/user/user_result_samples/extract_user_result_base_only_success.json index b6af8ec6..15fdda78 100644 --- a/tests/user/user_result_samples/extract_user_result_base_only_no_omvs_success.json +++ b/tests/user/user_result_samples/extract_user_result_base_only_success.json @@ -9,7 +9,7 @@ "safReturnCode": 0, "returnCode": 0, "reasonCode": 0, - "image": "LISTUSER SQUIDWRD OMVS ", + "image": "LISTUSER SQUIDWRD ", "profiles": [ { "base": { diff --git a/tests/user/user_result_samples/extract_user_result_base_only_no_omvs_success.xml b/tests/user/user_result_samples/extract_user_result_base_only_success.xml similarity index 92% rename from tests/user/user_result_samples/extract_user_result_base_only_no_omvs_success.xml rename to tests/user/user_result_samples/extract_user_result_base_only_success.xml index cc34292c..61a46535 100644 --- a/tests/user/user_result_samples/extract_user_result_base_only_no_omvs_success.xml +++ b/tests/user/user_result_samples/extract_user_result_base_only_success.xml @@ -5,7 +5,7 @@ 0 0 0 - LISTUSER SQUIDWRD OMVS + LISTUSER SQUIDWRD USER=SQUIDWRD NAME=SQUIDWARD OWNER=LEONARD CREATED=23.094 DEFAULT-GROUP=SYS1 PASSDATE=00.000 PASS-INTERVAL=186 PHRASEDATE=N/A ATTRIBUTES=NONE @@ -25,8 +25,6 @@ CATEGORY-AUTHORIZATION NONE SPECIFIED SECURITY-LABEL=NONE SPECIFIED - - NO OMVS INFORMATION 0 diff --git a/tests/user/user_result_samples/extract_user_result_invattr_error.json b/tests/user/user_result_samples/extract_user_result_invattr_error.json new file mode 100644 index 00000000..c15ae7cf --- /dev/null +++ b/tests/user/user_result_samples/extract_user_result_invattr_error.json @@ -0,0 +1,19 @@ +{ + "securityResult": { + "user": { + "name": "squidward", + "operation": "listdata", + "requestId": "UserRequest", + "error": { + "errorFunction": 10, + "errorCode": 2000, + "errorReason": 68, + "errorMessage": "Invalid attribute value specified.", + "errorOffset": 149, + "textInError": "name" + } + }, + "returnCode": 2000, + "reasonCode": 68 + } +} \ No newline at end of file diff --git a/tests/user/user_result_samples/extract_user_result_invattr_error.xml b/tests/user/user_result_samples/extract_user_result_invattr_error.xml new file mode 100644 index 00000000..fc284509 --- /dev/null +++ b/tests/user/user_result_samples/extract_user_result_invattr_error.xml @@ -0,0 +1,15 @@ + + + + + 10 + 2000 + 68 + Invalid attribute value specified. + 149 + name + + + 2000 + 68 + \ No newline at end of file