diff --git a/tests/stable_profile_ids.py b/tests/stable_profile_ids.py
index b7523862d0..7ee4e9f758 100755
--- a/tests/stable_profile_ids.py
+++ b/tests/stable_profile_ids.py
@@ -18,13 +18,23 @@
# xccdf_org.ssgproject.content_profile_ospp42 becomes ospp42
STABLE_PROFILE_IDS = {
- "FEDORA": ["standard"],
+ "FEDORA": ["standard", "ospp", "pci-dss"],
"RHEL-6": ["C2S", "CS2", "CSCF-RHEL6-MLS", "fisma-medium-rhel6-server",
"pci-dss", "rht-ccp", "stig-rhel6-disa", "usgcb-rhel6-server"],
"RHEL-7": ["C2S", "cjis", "hipaa", "nist-800-171-cui", "rht-ccp",
"ospp", "ospp42", "pci-dss", "stig-rhel7-disa"],
+ "RHEL-8": ["ospp", "pci-dss"],
}
+
+BENCHMARK_TO_FILE_STEM = {
+ "FEDORA": "fedora",
+ "RHEL-6": "rhel6",
+ "RHEL-7": "rhel7",
+ "RHEL-8": "rhel8",
+}
+
+
BENCHMARK_ID_PREFIX = "xccdf_org.ssgproject.content_benchmark_"
PROFILE_ID_PREFIX = "xccdf_org.ssgproject.content_profile_"
@@ -40,7 +50,7 @@ def parse_args():
return p.parse_args()
-def gather_profiles_from_datastream(path, profiles_per_benchmark):
+def gather_profiles_from_datastream(path, build_dir, profiles_per_benchmark):
input_tree = ssg.xml.ElementTree.parse(path)
benchmarks = ssg.xccdf.get_benchmark_id_title_map(input_tree)
if len(benchmarks) == 0:
@@ -53,6 +63,10 @@ def gather_profiles_from_datastream(path, profiles_per_benchmark):
input_tree, benchmarks)
for bench_id, profile_id, title in benchmark_profile_pairs:
+ bench_short_id = bench_id[len(BENCHMARK_ID_PREFIX):]
+ if respective_datastream_absent(bench_short_id, build_dir):
+ continue
+
if not bench_id.startswith(BENCHMARK_ID_PREFIX):
raise RuntimeError("Expected benchmark ID '%s' from '%s' to be "
"prefixed with '%s'."
@@ -68,30 +82,49 @@ def gather_profiles_from_datastream(path, profiles_per_benchmark):
"prefixed with '%s'."
% (profile_id, path, PROFILE_ID_PREFIX))
- bench_id = bench_id[len(BENCHMARK_ID_PREFIX):]
profile_id = profile_id[len(PROFILE_ID_PREFIX):]
- profiles_per_benchmark[bench_id].append(profile_id)
+ profiles_per_benchmark[bench_short_id].append(profile_id)
-def main():
- args = parse_args()
+def respective_datastream_absent(bench_id, build_dir):
+ if bench_id not in BENCHMARK_TO_FILE_STEM:
+ return True
+
+ datastream_filename = "ssg-{stem}-ds.xml".format(stem=BENCHMARK_TO_FILE_STEM[bench_id])
+ datastream_path = os.path.join(build_dir, datastream_filename)
+ if not os.path.isfile(datastream_path):
+ return True
+ else:
+ return False
+
+def check_build_dir(build_dir):
profiles_per_benchmark = defaultdict(list)
- for path in glob.glob(os.path.join(args.build_dir, "ssg-*-ds.xml")):
- gather_profiles_from_datastream(path, profiles_per_benchmark)
+ for path in glob.glob(os.path.join(build_dir, "ssg-*-ds.xml")):
+ gather_profiles_from_datastream(path, build_dir, profiles_per_benchmark)
- for bench_id in STABLE_PROFILE_IDS.keys():
- if bench_id not in profiles_per_benchmark:
- raise RuntimeError("Benchmark of shortened ID '%s' was not found "
- "within any of the datastreams!" % (bench_id))
+ for bench_short_id in STABLE_PROFILE_IDS.keys():
+ if respective_datastream_absent(bench_short_id, build_dir):
+ continue
- for profile_id in STABLE_PROFILE_IDS[bench_id]:
- if profile_id not in profiles_per_benchmark[bench_id]:
+ if bench_short_id not in profiles_per_benchmark:
+ raise RuntimeError("Expected benchmark ID '%s' has to be "
+ "prefixed with '%s'."
+ % (bench_short_id, BENCHMARK_ID_PREFIX))
+
+ for profile_id in STABLE_PROFILE_IDS[bench_short_id]:
+ if profile_id not in profiles_per_benchmark[bench_short_id]:
raise RuntimeError("Profile '%s' is required to be in the "
"'%s' benchmark. It is a stable profile "
"that can't be renamed or removed!"
- % (profile_id, bench_id))
+ % (profile_id, bench_short_id))
+
+
+def main():
+ args = parse_args()
+
+ check_build_dir(args.build_dir)
if __name__ == "__main__":