Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions python_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,25 @@ def create_resource(delete_resource):
run_tso_command(f"SETROPTS RACLIST({class_name}) REFRESH")
yield profile_name, class_name

@pytest.fixture
def delete_resource_in_search_class():
profile_name=f"SEARTEST.DISCRETE{secrets.token_hex(2)}.**".upper()
class_name = "SEARTEST"
yield profile_name, class_name
try: # noqa: SIM105
run_tso_command(f"RDELETE {class_name} ({profile_name})")
except: # noqa: E722
pass

@pytest.fixture
def create_resource_in_search_class(delete_resource_in_search_class):
"""Create a new resource profile for a test"""
profile_name, class_name = delete_resource_in_search_class
run_tso_command(f"RDEFINE {class_name} {profile_name} DATA('RESOURCE PROFILE GENERATED DURING SEAR TESTING, NOT IMPORTANT') OWNER(SYS1) FGENERIC") # noqa: E501
run_tso_command(f"SETROPTS GENERIC({class_name}) REFRESH")
run_tso_command(f"SETROPTS RACLIST({class_name}) REFRESH")
yield profile_name, class_name

@pytest.fixture
def delete_keyring():
ring_name=f"SEARTEST.RING{secrets.token_hex(2)}".upper()
Expand Down
7 changes: 7 additions & 0 deletions python_tests/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,11 @@
"racf_return_code": 4,
"saf_return_code": 4,
"sear_return_code": 4,
}

successful_return_codes_search = {
"racf_reason_code": 4,
"racf_return_code": 4,
"saf_return_code": 4,
"sear_return_code": 0,
}
44 changes: 42 additions & 2 deletions python_tests/test_search.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

from helper import successful_return_codes
from helper import successful_return_codes, successful_return_codes_search

# Import SEAR
from sear import sear
Expand Down Expand Up @@ -36,4 +36,44 @@ def test_search_resource_profiles_nonexistent_class():
},
)
assert "errors" in str(search_result.result)
assert search_result.result["return_codes"] != successful_return_codes
assert search_result.result["return_codes"] != successful_return_codes

def test_search_resource_profiles_all():
"""This test is supposed to succeed"""
search_result = sear(
{
"operation": "search",
"admin_type": "resource",
"class": "seartest",
},
)
assert "errors" not in str(search_result.result)
assert search_result.result["return_codes"] == successful_return_codes_search

def test_search_resource_profiles_filter():
"""This test is supposed to succeed"""
search_result = sear(
{
"operation": "search",
"admin_type": "resource",
"class": "seartest",
"resource_filter": "filter",
},
)
assert "errors" not in str(search_result.result)
assert search_result.result["return_codes"] == successful_return_codes

def test_search_resource_profiles_discrete(create_resource_in_search_class):
"""This test is supposed to succeed"""
profile_name, class_name = create_resource_in_search_class
search_result = sear(
{
"operation": "search",
"admin_type": "resource",
"class": class_name,
"resource_filter": f"{profile_name}",
},
)
assert "errors" not in str(search_result.result)
assert profile_name in search_result.result["profiles"]
assert search_result.result["return_codes"] == successful_return_codes
19 changes: 15 additions & 4 deletions sear/irrseq00/profile_extractor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,14 @@ void ProfileExtractor::extract(SecurityRequest &request) {
function_code = save_function_code;
p_arg_area->args.function_code = function_code;

p_arg_area->arg_pointers.p_profile_extract_parms->flags |=
if (function_code == DATASET_EXTRACT_NEXT_FUNCTION_CODE) {
p_arg_area->arg_pointers.p_profile_extract_parms->flags |=
htonl(0x14000000);
} else {
p_arg_area->arg_pointers.p_profile_extract_parms->flags =
htonl(0x04000000);
}


// Call R_Admin
Logger::getInstance().debug("Calling IRRSEQ00 ...");
Expand All @@ -170,12 +176,17 @@ void ProfileExtractor::extract(SecurityRequest &request) {
p_arg_area->args.p_result_buffer != nullptr &&
(function_code == USER_EXTRACT_NEXT_FUNCTION_CODE ||
function_code == GROUP_EXTRACT_NEXT_FUNCTION_CODE ||
function_code == DATASET_EXTRACT_NEXT_FUNCTION_CODE ||
function_code == RESOURCE_EXTRACT_NEXT_FUNCTION_CODE)) {
function_code == RESOURCE_EXTRACT_NEXT_FUNCTION_CODE ||
function_code == DATASET_EXTRACT_NEXT_FUNCTION_CODE)) {
generic_extract_parms_results_t *p_save_generic_result;

p_arg_area->arg_pointers.p_profile_extract_parms->flags |=
if (function_code == DATASET_EXTRACT_NEXT_FUNCTION_CODE) {
p_arg_area->arg_pointers.p_profile_extract_parms->flags |=
htonl(0x14000000);
} else {
p_arg_area->arg_pointers.p_profile_extract_parms->flags =
htonl(0x04000000);
}

do {
p_save_generic_result =
Expand Down