Skip to content

Commit 15f2c7a

Browse files
Clear State before raising errors
Add state clearing before raising SegmentError or SegmentTraitError. Add unit test for this (Unit test for SegmentTraitError includes extract to simulate functionality of add when generateRequestOnly is not set) Signed-off-by: Elijah Swift <elijah.swift@ibm.com>
1 parent e8b82cf commit 15f2c7a

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

pyracf/common/security_admin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ def _build_bool_segment_dictionaries(self, segments: List[str]) -> None:
269269
else:
270270
bad_segments.append(segment)
271271
if bad_segments:
272+
self.__clear_state(SecurityRequest)
272273
raise SegmentError(bad_segments, self._profile_type)
273274
# preserve segment traits for debug logging.
274275
self.__preserved_segment_traits = self._segment_traits
@@ -287,6 +288,7 @@ def _build_segment_dictionaries(self, traits: dict) -> None:
287288
if not trait_valid:
288289
bad_traits.append(trait)
289290
if bad_traits:
291+
self.__clear_state(SecurityRequest)
290292
raise SegmentTraitError(bad_traits, self._profile_type)
291293

292294
# preserve segment traits for debug logging.

tests/user/test_user_request_builder.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,30 @@ def test_user_admin_build_add_request_with_bad_segment_traits(self):
140140
+ f"combination for '{self.user_admin._profile_type}'.\n",
141141
)
142142

143+
def test_user_admin_cleans_up_after_build_add_request_with_bad_segment_traits(self):
144+
bad_trait = "omvs:bad_trait"
145+
user_admin = UserAdmin(
146+
generate_requests_only=True,
147+
)
148+
with self.assertRaises(SegmentTraitError) as exception:
149+
user_admin.add(
150+
"squidwrd", TestUserConstants.TEST_ADD_USER_REQUEST_BAD_TRAITS
151+
)
152+
self.assertEqual(
153+
exception.exception.message,
154+
"Unable to build Security Request.\n\n"
155+
+ f"'{bad_trait}' is not a known segment-trait "
156+
+ f"combination for '{self.user_admin._profile_type}'.\n",
157+
)
158+
result = user_admin.extract("squidwrd", segments=["omvs"])
159+
self.assertEqual(
160+
result, TestUserConstants.TEST_EXTRACT_USER_REQUEST_BASE_OMVS_XML
161+
)
162+
result = self.user_admin.add(
163+
"squidwrd", traits=TestUserConstants.TEST_ADD_USER_REQUEST_TRAITS
164+
)
165+
self.assertEqual(result, TestUserConstants.TEST_ADD_USER_REQUEST_XML)
166+
143167
def test_user_admin_build_extract_request_with_bad_segment_name(self):
144168
bad_segment = "bad_segment"
145169
user_admin = UserAdmin(
@@ -152,3 +176,22 @@ def test_user_admin_build_extract_request_with_bad_segment_name(self):
152176
"Unable to build Security Request.\n\n"
153177
+ f"'{bad_segment}' is not a known segment for '{self.user_admin._profile_type}'.\n",
154178
)
179+
180+
def test_user_admin_cleans_up_after_build_extract_request_with_bad_segment_name(
181+
self,
182+
):
183+
bad_segment = "bad_segment"
184+
user_admin = UserAdmin(
185+
generate_requests_only=True,
186+
)
187+
with self.assertRaises(SegmentError) as exception:
188+
user_admin.extract("squidwrd", segments=["tso", bad_segment])
189+
self.assertEqual(
190+
exception.exception.message,
191+
"Unable to build Security Request.\n\n"
192+
+ f"'{bad_segment}' is not a known segment for '{self.user_admin._profile_type}'.\n",
193+
)
194+
result = user_admin.extract("squidwrd", segments=["omvs"])
195+
self.assertEqual(
196+
result, TestUserConstants.TEST_EXTRACT_USER_REQUEST_BASE_OMVS_XML
197+
)

0 commit comments

Comments
 (0)