name: drift-test run_id: commands[0] env HOME: /home/zuul env LANG: C.UTF-8 env PATH: /home/zuul/src/github.com/osism/release/.tox/drift-test/bin:/usr/local/bin:/usr/bin:/bin:/usr/games env PIP_DISABLE_PIP_VERSION_CHECK: 1 env PIP_USER: 0 env PYTHONHASHSEED: 606755058 env PYTHONIOENCODING: utf-8 env PYTHONPATH: /home/zuul/src/github.com/osism/release/src env TOX_ENV_DIR: /home/zuul/src/github.com/osism/release/.tox/drift-test env TOX_ENV_NAME: drift-test env TOX_WORK_DIR: /home/zuul/src/github.com/osism/release/.tox env VIRTUAL_ENV: /home/zuul/src/github.com/osism/release/.tox/drift-test metadata pid: 1903 cwd: /home/zuul/src/github.com/osism/release allow: /home/zuul/src/github.com/osism/release/.tox/drift-test/bin/* cmd: pytest tests/ -v exit_code: 0 ============================= test session starts ============================== platform linux -- Python 3.11.2, pytest-9.1.1, pluggy-1.6.0 -- /home/zuul/src/github.com/osism/release/.tox/drift-test/bin/python cachedir: .tox/drift-test/.pytest_cache rootdir: /home/zuul/src/github.com/osism/release collecting ... collected 339 items tests/image_drift/test_demo.py::test_three_entries_per_plugin PASSED [ 0%] tests/image_drift/test_demo.py::test_entries_carry_live_plugin_text PASSED [ 0%] tests/image_drift/test_demo.py::test_entries_are_actionable PASSED [ 0%] tests/image_drift/test_demo.py::test_show_values_plugin_covers_both_render_branches PASSED [ 1%] tests/image_drift/test_demo.py::test_paths_reflect_plugin_input_files PASSED [ 1%] tests/image_drift/test_driver.py::test_help_lists_plugins PASSED [ 1%] tests/image_drift/test_driver.py::test_default_run_exits_1_with_drifting_images PASSED [ 2%] tests/image_drift/test_driver.py::test_allowlisted_osism_ansible_hidden_by_default PASSED [ 2%] tests/image_drift/test_driver.py::test_no_allowlist_surfaces_osism_ansible PASSED [ 2%] tests/image_drift/test_driver.py::test_format_json_keys PASSED [ 2%] tests/image_drift/test_driver.py::test_plugin_filter_runs_only_role_shadows PASSED [ 3%] tests/image_drift/test_driver.py::test_summary_line_counts PASSED [ 3%] tests/image_drift/test_driver.py::test_advisory_only_exits_0 PASSED [ 3%] tests/image_drift/test_driver.py::test_advisory_finding_in_default_json PASSED [ 4%] tests/image_drift/test_driver.py::test_missing_group_errors PASSED [ 4%] tests/image_drift/test_image_orphan.py::test_orphan_alias_detected PASSED [ 4%] tests/image_drift/test_image_orphan.py::test_consumed_alias_not_detected PASSED [ 5%] tests/image_drift/test_image_orphan.py::test_playbook_consumed_alias_not_detected PASSED [ 5%] tests/image_drift/test_image_orphan.py::test_non_text_files_are_not_read PASSED [ 5%] tests/image_drift/test_image_orphan.py::test_allowlist_suppresses_orphan PASSED [ 5%] tests/image_drift/test_manager_parser.py::test_plain_value PASSED [ 6%] tests/image_drift/test_manager_parser.py::test_latest_override_pattern PASSED [ 6%] tests/image_drift/test_manager_parser.py::test_unresolved_jinja_marked PASSED [ 6%] tests/image_drift/test_manager_parser.py::test_multiple_entries PASSED [ 7%] tests/image_drift/test_manager_template_parser.py::test_basic_alias_extraction PASSED [ 7%] tests/image_drift/test_manager_template_parser.py::test_jinja_escaped_lines_ignored PASSED [ 7%] tests/image_drift/test_manager_template_parser.py::test_double_quoted_versions_key PASSED [ 7%] tests/image_drift/test_manager_template_parser.py::test_lines_without_pattern_skipped PASSED [ 8%] tests/image_drift/test_manager_template_parser.py::test_extract_stream_resolved_basic PASSED [ 8%] tests/image_drift/test_manager_template_parser.py::test_extract_stream_resolved_multiple PASSED [ 8%] tests/image_drift/test_override_template_parser.py::test_returns_tag_aliases_only PASSED [ 9%] tests/image_drift/test_override_template_parser.py::test_ignores_image_lines PASSED [ 9%] tests/image_drift/test_override_template_parser.py::test_empty_input PASSED [ 9%] tests/image_drift/test_override_template_parser.py::test_comment_and_blank_lines_ignored PASSED [ 10%] tests/image_drift/test_plugin_registry.py::test_image_plugins_registered PASSED [ 10%] tests/image_drift/test_plugin_registry.py::test_image_plugin_group_matches_registry PASSED [ 10%] tests/image_drift/test_plugin_registry.py::test_role_unpinned_enabled_in_config PASSED [ 10%] tests/image_drift/test_plugin_registry.py::test_image_orphan_enabled_in_config PASSED [ 11%] tests/image_drift/test_plugin_registry.py::test_rolling_pin_enabled_in_config PASSED [ 11%] tests/image_drift/test_plugin_registry.py::test_each_plugin_has_required_metadata PASSED [ 11%] tests/image_drift/test_release_parser.py::test_parse_release_returns_docker_images PASSED [ 12%] tests/image_drift/test_release_parser.py::test_parse_release_missing_docker_images_errors PASSED [ 12%] tests/image_drift/test_release_vs_manager.py::test_baseline_drift PASSED [ 12%] tests/image_drift/test_release_vs_manager.py::test_allowlist_broad_suppresses_all_redis PASSED [ 12%] tests/image_drift/test_release_vs_manager.py::test_allowlist_narrow_suppresses_one_alias_only PASSED [ 13%] tests/image_drift/test_release_vs_manager.py::test_latest_override_emitted_with_found_latest PASSED [ 13%] tests/image_drift/test_release_vs_manager.py::test_disabled_image_not_in_release_skipped PASSED [ 13%] tests/image_drift/test_report.py::test_show_values_produces_two_blocks PASSED [ 14%] tests/image_drift/test_report.py::test_show_values_live_block_collapses_file PASSED [ 14%] tests/image_drift/test_report.py::test_show_values_dormant_block_collapses_two_files PASSED [ 14%] tests/image_drift/test_report.py::test_show_values_refs_single_line_only PASSED [ 15%] tests/image_drift/test_report.py::test_show_values_item_order_by_path_then_alias PASSED [ 15%] tests/image_drift/test_report.py::test_show_values_fix_and_refs_present PASSED [ 15%] tests/image_drift/test_report.py::test_show_values_empty_expected_renders_no_release_pin PASSED [ 15%] tests/image_drift/test_report.py::test_show_values_empty_expected_refs_single_line PASSED [ 16%] tests/image_drift/test_report.py::test_show_values_empty_expected_sorted_by_path_then_alias PASSED [ 16%] tests/image_drift/test_report.py::test_show_values_nonempty_expected_still_uses_arrow PASSED [ 16%] tests/image_drift/test_report.py::test_kolla_chain_inner_regression_two_blocks PASSED [ 17%] tests/image_drift/test_role_defaults_parser.py::test_concrete_tag_extracted PASSED [ 17%] tests/image_drift/test_role_defaults_parser.py::test_jinja_value_skipped PASSED [ 17%] tests/image_drift/test_role_defaults_parser.py::test_multiple_aliases_in_one_role_file PASSED [ 17%] tests/image_drift/test_role_defaults_parser.py::test_empty_or_malformed_returns_empty PASSED [ 18%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirected_through_own_version_resolved PASSED [ 18%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirected_through_own_version_non_string_pin PASSED [ 18%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirection_whitespace_insensitive PASSED [ 19%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirection_skipped_when_version_non_concrete PASSED [ 19%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirection_skipped_when_version_missing PASSED [ 19%] tests/image_drift/test_role_defaults_parser.py::test_tag_referencing_other_var_skipped PASSED [ 20%] tests/image_drift/test_role_defaults_parser.py::test_composed_tag_left_for_later_pass PASSED [ 20%] tests/image_drift/test_role_shadows.py::test_baseline_drift PASSED [ 20%] tests/image_drift/test_role_shadows.py::test_role_without_defaults_skipped PASSED [ 20%] tests/image_drift/test_role_shadows.py::test_jinja_valued_tag_not_drift PASSED [ 21%] tests/image_drift/test_role_shadows.py::test_allowlist_very_narrow_pins_to_role_file PASSED [ 21%] tests/image_drift/test_role_shadows.py::test_netbox_redis_is_live PASSED [ 21%] tests/image_drift/test_role_shadows.py::test_dormant_aliases_are_dormant PASSED [ 22%] tests/image_drift/test_role_shadows.py::test_floatdemo_is_live PASSED [ 22%] tests/image_drift/test_role_shadows.py::test_stream_resolved_not_emitted PASSED [ 22%] tests/image_drift/test_role_shadows.py::test_dormant_findings_are_advisory PASSED [ 23%] tests/image_drift/test_role_shadows.py::test_live_findings_are_actionable PASSED [ 23%] tests/image_drift/test_role_unpinned.py::test_ciinternal_detected PASSED [ 23%] tests/image_drift/test_role_unpinned.py::test_widget_detected_with_release_key PASSED [ 23%] tests/image_drift/test_role_unpinned.py::test_adminer_not_emitted PASSED [ 24%] tests/image_drift/test_role_unpinned.py::test_stream_resolved_not_emitted PASSED [ 24%] tests/image_drift/test_role_unpinned.py::test_allowlist_marks_ciinternal_allowlisted PASSED [ 24%] tests/image_drift/test_rolling_pin.py::test_rolling_pins_flagged PASSED [ 25%] tests/image_drift/test_rolling_pin.py::test_concrete_pin_not_flagged PASSED [ 25%] tests/image_drift/test_rolling_pin.py::test_odd_but_pinned_not_flagged PASSED [ 25%] tests/image_drift/test_rolling_pin.py::test_top_level_key_ignored PASSED [ 25%] tests/image_drift/test_rolling_pin.py::test_entry_fields PASSED [ 26%] tests/image_drift/test_rolling_pin.py::test_allowlist_marks_entry PASSED [ 26%] tests/image_drift/test_source_list_tree.py::test_list_tree_returns_nested_paths PASSED [ 26%] tests/image_drift/test_source_list_tree.py::test_list_tree_absent_raises_by_default PASSED [ 27%] tests/image_drift/test_source_list_tree.py::test_list_tree_absent_missing_ok_returns_empty PASSED [ 27%] tests/kolla_drift/test_archive.py::test_repo_slug_and_archive_url PASSED [ 27%] tests/kolla_drift/test_archive.py::test_snapshot_dir_fetches_extracts_and_serves PASSED [ 28%] tests/kolla_drift/test_archive.py::test_snapshot_dir_memoizes_one_http_call PASSED [ 28%] tests/kolla_drift/test_archive.py::test_snapshot_dir_404_raises PASSED [ 28%] tests/kolla_drift/test_archive.py::test_fetch_retries_once_then_succeeds PASSED [ 28%] tests/kolla_drift/test_archive.py::test_fetch_fails_twice_raises PASSED [ 29%] tests/kolla_drift/test_archive.py::test_unsafe_traversal_member_rejected PASSED [ 29%] tests/kolla_drift/test_archive.py::test_absolute_symlink_member_rejected_on_fallback PASSED [ 29%] tests/kolla_drift/test_archive.py::test_safe_relative_symlink_extracted_on_fallback PASSED [ 30%] tests/kolla_drift/test_config.py::test_load_minimal_config PASSED [ 30%] tests/kolla_drift/test_config.py::test_osism_root_and_paths_are_unknown_keys PASSED [ 30%] tests/kolla_drift/test_config.py::test_unknown_top_level_key_errors PASSED [ 30%] tests/kolla_drift/test_config.py::test_allowlist_broad_match PASSED [ 31%] tests/kolla_drift/test_config.py::test_apply_marks_matching_drift_allowlisted PASSED [ 31%] tests/kolla_drift/test_config.py::test_apply_returns_unmatched_drift_unchanged PASSED [ 31%] tests/kolla_drift/test_config.py::test_allowlist_narrow_by_alias PASSED [ 32%] tests/kolla_drift/test_config.py::test_allowlist_very_narrow PASSED [ 32%] tests/kolla_drift/test_config.py::test_allowlist_empty_reason_errors PASSED [ 32%] tests/kolla_drift/test_config.py::test_allowlist_no_file_returns_empty PASSED [ 33%] tests/kolla_drift/test_config.py::test_sources_parsed PASSED [ 33%] tests/kolla_drift/test_config.py::test_default_owner_defaults_when_absent PASSED [ 33%] tests/kolla_drift/test_config.py::test_unknown_source_key_errors PASSED [ 33%] tests/kolla_drift/test_config.py::test_stale_flags_unused_entry PASSED [ 34%] tests/kolla_drift/test_config.py::test_stale_scoped_to_ran_plugins PASSED [ 34%] tests/kolla_drift/test_config.py::test_prefix_matches_service_and_subgroups PASSED [ 34%] tests/kolla_drift/test_config.py::test_prefix_does_not_match_adjacent_name PASSED [ 35%] tests/kolla_drift/test_config.py::test_exact_is_default_and_unchanged PASSED [ 35%] tests/kolla_drift/test_config.py::test_allowlist_unknown_match_value_errors PASSED [ 35%] tests/kolla_drift/test_config.py::test_allowlist_empty_image_errors PASSED [ 35%] tests/kolla_drift/test_config.py::test_prefix_entry_stale_when_no_match PASSED [ 36%] tests/kolla_drift/test_config.py::test_releases_and_release_refs_parse PASSED [ 36%] tests/kolla_drift/test_config.py::test_releases_default_empty PASSED [ 36%] tests/kolla_drift/test_config.py::test_archive_and_snapshot_cache_defaults PASSED [ 37%] tests/kolla_drift/test_dir_helpers.py::test_dir_read_returns_bytes PASSED [ 37%] tests/kolla_drift/test_dir_helpers.py::test_dir_read_missing_raises_with_where PASSED [ 37%] tests/kolla_drift/test_dir_helpers.py::test_dir_read_optional_present PASSED [ 38%] tests/kolla_drift/test_dir_helpers.py::test_dir_read_optional_absent_returns_none PASSED [ 38%] tests/kolla_drift/test_dir_helpers.py::test_dir_list_tree_sorted_repo_relative PASSED [ 38%] tests/kolla_drift/test_dir_helpers.py::test_dir_list_tree_missing_raises PASSED [ 38%] tests/kolla_drift/test_dir_helpers.py::test_dir_list_tree_missing_ok_returns_empty PASSED [ 39%] tests/kolla_drift/test_dir_helpers.py::test_dir_list_returns_names PASSED [ 39%] tests/kolla_drift/test_dir_helpers.py::test_dir_list_dirs_only PASSED [ 39%] tests/kolla_drift/test_dir_helpers.py::test_dir_list_missing_raises PASSED [ 40%] tests/kolla_drift/test_driver.py::test_base_dir_not_found_exits_2 PASSED [ 40%] tests/kolla_drift/test_driver_stale.py::test_stale_entry_forces_exit_1_and_is_reported PASSED [ 40%] tests/kolla_drift/test_driver_stale.py::test_no_allowlist_ignores_invalid_file PASSED [ 41%] tests/kolla_drift/test_enablement.py::test_canon_normalizes_hyphen_to_underscore PASSED [ 41%] tests/kolla_drift/test_enablement.py::test_parse_enable_flags_strips_prefix PASSED [ 41%] tests/kolla_drift/test_enablement.py::test_truthy_enables_literal_only_and_canon PASSED [ 41%] tests/kolla_drift/test_enablement.py::test_parse_build_set_unions_both_blocks_canon PASSED [ 42%] tests/kolla_drift/test_enablement.py::test_release_range_derives_from_file_set PASSED [ 42%] tests/kolla_drift/test_enablement.py::test_release_range_override_wins PASSED [ 42%] tests/kolla_drift/test_enablement.py::test_upstream_enable_keys_monolithic PASSED [ 43%] tests/kolla_drift/test_enablement.py::test_upstream_enable_keys_split_dir PASSED [ 43%] tests/kolla_drift/test_enablement.py::test_upstream_groupvars_keys_monolithic PASSED [ 43%] tests/kolla_drift/test_enablement.py::test_upstream_groupvars_keys_split_dir PASSED [ 43%] tests/kolla_drift/test_enablement.py::test_osism_groupvars_keys_merges_defaults_and_versions_template PASSED [ 44%] tests/kolla_drift/test_enablement.py::test_osism_groupvars_keys_counts_overlays PASSED [ 44%] tests/kolla_drift/test_enablement.py::test_osism_enable_flags_merges_across_all_files PASSED [ 44%] tests/kolla_drift/test_enablement.py::test_osism_enable_ids_truthy PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_osism_enable_ids_explicit_includes_all_keys PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_osism_enable_ids_unknown_scope_raises PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_groupvars_home_in_newest_keys PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_groupvars_home_dropped_only PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_groupvars_home_newest_wins_over_dropped PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_groupvars_home_neither_returns_none PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_upstream_image_tag_keys_collects_both_suffixes PASSED [ 47%] tests/kolla_drift/test_enablement_values.py::test_groupvars_values_merges_and_parses PASSED [ 47%] tests/kolla_drift/test_enablement_values.py::test_groupvars_values_skips_non_mapping_and_empty PASSED [ 47%] tests/kolla_drift/test_enablement_values.py::test_osism_mirror_values_reads_only_001 PASSED [ 48%] tests/kolla_drift/test_inventory_sections.py::test_returns_groups_with_sorted_members PASSED [ 48%] tests/kolla_drift/test_inventory_sections.py::test_empty_group_has_no_members PASSED [ 48%] tests/kolla_drift/test_inventory_sections.py::test_duplicate_member_in_group_does_not_raise PASSED [ 48%] tests/kolla_drift/test_kolla_docker.py::test_normalises_hyphen_to_underscore PASSED [ 49%] tests/kolla_drift/test_kolla_docker.py::test_empty PASSED [ 49%] tests/kolla_drift/test_kolla_enablement_build.py::test_flags_enabled_buildable_not_built PASSED [ 49%] tests/kolla_drift/test_kolla_enablement_build.py::test_reads_enable_flags_split_across_files PASSED [ 50%] tests/kolla_drift/test_kolla_enablement_build.py::test_allowlist_marks_allowlisted PASSED [ 50%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_truthy_scope_flags_absent_truthy_services PASSED [ 50%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_explicit_scope_also_flags_dead_no_flags PASSED [ 51%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_present_upstream_is_not_orphan PASSED [ 51%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_union_across_releases_not_intersection PASSED [ 51%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_allowlist_marks_allowlisted PASSED [ 51%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_run_uses_explicit_default PASSED [ 52%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_reads_enable_flags_split_across_files PASSED [ 52%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_empty_release_range_raises PASSED [ 52%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_flags_upstream_key_missing_from_osism PASSED [ 53%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_present_in_osism_is_not_missing PASSED [ 53%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_osism_key_in_any_file_suppresses PASSED [ 53%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_versions_template_supplied_key_not_flagged PASSED [ 53%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_overlay_supplied_key_not_flagged PASSED [ 54%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_union_across_releases_not_intersection PASSED [ 54%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_allowlist_marks_allowlisted PASSED [ 54%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_empty_release_range_raises PASSED [ 55%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_missing_key_at_newest_routes_to_001 PASSED [ 55%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_missing_key_dropped_by_newest_routes_to_010 PASSED [ 55%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_two_keys_with_different_homes_have_distinct_remediations PASSED [ 56%] tests/kolla_drift/test_kolla_image_orphan.py::test_flags_removed_service_image_and_tag PASSED [ 56%] tests/kolla_drift/test_kolla_image_orphan.py::test_present_service_not_flagged PASSED [ 56%] tests/kolla_drift/test_kolla_image_orphan.py::test_union_across_releases_not_intersection PASSED [ 56%] tests/kolla_drift/test_kolla_image_orphan.py::test_allowlist_marks_osism_built PASSED [ 57%] tests/kolla_drift/test_kolla_image_orphan.py::test_ceph_catalogue_ignored PASSED [ 57%] tests/kolla_drift/test_kolla_image_orphan.py::test_empty_upstream_union_raises PASSED [ 57%] tests/kolla_drift/test_kolla_image_orphan.py::test_empty_catalogue_match_raises PASSED [ 58%] tests/kolla_drift/test_kolla_inventory.py::test_flags_upstream_only_groups PASSED [ 58%] tests/kolla_drift/test_kolla_inventory.py::test_expected_src_uses_configured_ref PASSED [ 58%] tests/kolla_drift/test_kolla_inventory.py::test_red_entry_carries_members PASSED [ 58%] tests/kolla_drift/test_kolla_inventory.py::test_exact_and_prefix_allowlist_match PASSED [ 59%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_clean_mirror_no_drift PASSED [ 59%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_value_diff_flagged PASSED [ 59%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_missing_from_mirror_flagged PASSED [ 60%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_dropped_key_routed_to_010 PASSED [ 60%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_dup_key_delete PASSED [ 60%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_invented_key PASSED [ 61%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_typo_mirrored_not_flagged PASSED [ 61%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_newest_selected_by_sort PASSED [ 61%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_dropped_key_classified_with_out_of_order_releases PASSED [ 61%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_allowlist_marks_entry PASSED [ 62%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_empty_release_range_raises PASSED [ 62%] tests/kolla_drift/test_kolla_orphan_config.py::test_flags_dead_service_companion_vars PASSED [ 62%] tests/kolla_drift/test_kolla_orphan_config.py::test_found_src_points_to_each_file PASSED [ 63%] tests/kolla_drift/test_kolla_orphan_config.py::test_no_dead_services_returns_empty PASSED [ 63%] tests/kolla_drift/test_kolla_orphan_config.py::test_respects_orphan_allowlist PASSED [ 63%] tests/kolla_drift/test_kolla_orphan_config.py::test_own_allowlist_marks_allowlisted PASSED [ 64%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_flags_orphan_secrets_per_release PASSED [ 64%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_present_secret_is_not_orphan PASSED [ 64%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_allowlist_marks_allowlisted PASSED [ 64%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_missing_template_skips_release PASSED [ 65%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_flags_all_inert_keys PASSED [ 65%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_enabled_and_buildable_key_is_an_add PASSED [ 65%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_disabled_or_unbuildable_key_is_a_remove PASSED [ 66%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_add_and_remove_render_as_separate_blocks PASSED [ 66%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_hyphen_underscore_is_not_drift PASSED [ 66%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_reads_enable_flags_split_across_files PASSED [ 66%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_allowlist_marks_allowlisted PASSED [ 67%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_flags_services_without_template_key PASSED [ 67%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_expected_src_uses_configured_ref PASSED [ 67%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_present_service_not_flagged PASSED [ 68%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_allowlist_marks_allowlisted PASSED [ 68%] tests/kolla_drift/test_model.py::test_drift_entry_has_all_fields PASSED [ 68%] tests/kolla_drift/test_model.py::test_drift_entry_to_dict_for_json PASSED [ 69%] tests/kolla_drift/test_model.py::test_default_severity_is_actionable PASSED [ 69%] tests/kolla_drift/test_model.py::test_as_allowlisted_preserves_severity PASSED [ 69%] tests/kolla_drift/test_plugin_registry.py::test_registry_is_a_list PASSED [ 69%] tests/kolla_drift/test_plugin_registry.py::test_each_plugin_has_required_metadata PASSED [ 70%] tests/kolla_drift/test_plugin_registry.py::test_kolla_inner_plugin_registered PASSED [ 70%] tests/kolla_drift/test_plugin_registry.py::test_kolla_upstream_plugin_registered PASSED [ 70%] tests/kolla_drift/test_plugin_registry.py::test_kolla_inventory_plugin_registered PASSED [ 71%] tests/kolla_drift/test_plugin_registry.py::test_kolla_enablement_build_plugin_registered PASSED [ 71%] tests/kolla_drift/test_plugin_registry.py::test_kolla_enablement_orphan_plugin_registered PASSED [ 71%] tests/kolla_drift/test_plugin_registry.py::test_kolla_secrets_orphan_plugin_registered PASSED [ 71%] tests/kolla_drift/test_plugin_registry.py::test_kolla_orphan_config_plugin_registered PASSED [ 72%] tests/kolla_drift/test_plugin_registry.py::test_kolla_groupvars_missing_plugin_registered PASSED [ 72%] tests/kolla_drift/test_plugin_registry.py::test_every_plugin_has_summary_and_remediation PASSED [ 72%] tests/kolla_drift/test_plugin_registry.py::test_default_config_enables_every_registered_plugin PASSED [ 73%] tests/kolla_drift/test_plugin_registry.py::test_kolla_mirror_verbatim_plugin_registered PASSED [ 73%] tests/kolla_drift/test_plugin_registry.py::test_plugins_in_lifecycle_order PASSED [ 73%] tests/kolla_drift/test_plugin_registry.py::test_plugin_groups_match_registries_and_are_disjoint PASSED [ 74%] tests/kolla_drift/test_report.py::test_single_plugin_groups_sorts_and_renders PASSED [ 74%] tests/kolla_drift/test_report.py::test_orders_blocks_by_plugins_list PASSED [ 74%] tests/kolla_drift/test_report.py::test_build_style_splits_one_block_per_ref_pair PASSED [ 74%] tests/kolla_drift/test_report.py::test_allowlisted_excluded_from_blocks_and_count PASSED [ 75%] tests/kolla_drift/test_report.py::test_empty_returns_empty_list PASSED [ 75%] tests/kolla_drift/test_report.py::test_entry_summary_remediation_override_plugin_default PASSED [ 75%] tests/kolla_drift/test_report.py::test_lists_image_not_alias PASSED [ 76%] tests/kolla_drift/test_sbom_map.py::test_extracts_keys PASSED [ 76%] tests/kolla_drift/test_sbom_map.py::test_missing_map_raises PASSED [ 76%] tests/kolla_drift/test_secrets_map.py::test_extracts_top_level_keys PASSED [ 76%] tests/kolla_drift/test_secrets_map.py::test_ignores_comments_indented_and_markers PASSED [ 77%] tests/kolla_drift/test_secrets_map.py::test_empty_input PASSED [ 77%] tests/kolla_drift/test_source.py::test_read_local_working_tree_when_found PASSED [ 77%] tests/kolla_drift/test_source.py::test_read_not_found_in_base_dir_is_mode_b_error PASSED [ 78%] tests/kolla_drift/test_source.py::test_read_local_file_absent_is_error_not_remote PASSED [ 78%] tests/kolla_drift/test_source.py::test_read_remote_fallback_when_not_found PASSED [ 78%] tests/kolla_drift/test_source.py::test_read_no_base_dir_is_remote PASSED [ 79%] tests/kolla_drift/test_source.py::test_first_base_dir_with_the_repo_wins PASSED [ 79%] tests/kolla_drift/test_source.py::test_pinned_local_git_repo_reads_at_pin_ref PASSED [ 79%] tests/kolla_drift/test_source.py::test_pinned_non_git_dir_falls_back_to_remote PASSED [ 79%] tests/kolla_drift/test_source.py::test_pinned_non_git_dir_no_fallback_is_mode_b PASSED [ 80%] tests/kolla_drift/test_source.py::test_read_remote_404_errors PASSED [ 80%] tests/kolla_drift/test_source.py::test_read_network_error PASSED [ 80%] tests/kolla_drift/test_source.py::test_read_underscore_repo_translates_to_hyphen PASSED [ 81%] tests/kolla_drift/test_source.py::test_read_optional_present_local PASSED [ 81%] tests/kolla_drift/test_source.py::test_read_optional_missing_local_returns_none PASSED [ 81%] tests/kolla_drift/test_source.py::test_read_optional_404_returns_none PASSED [ 82%] tests/kolla_drift/test_source.py::test_read_optional_network_error_still_raises PASSED [ 82%] tests/kolla_drift/test_source.py::test_read_optional_underscore_repo_translates_to_hyphen PASSED [ 82%] tests/kolla_drift/test_source.py::test_list_dir_local PASSED [ 82%] tests/kolla_drift/test_source.py::test_list_dir_remote PASSED [ 83%] tests/kolla_drift/test_source.py::test_list_dir_remote_404_errors PASSED [ 83%] tests/kolla_drift/test_source.py::test_list_dir_underscore_repo_translates_to_hyphen PASSED [ 83%] tests/kolla_drift/test_source.py::test_source_override_redirects_owner_and_ref PASSED [ 84%] tests/kolla_drift/test_source.py::test_list_dir_local_dirs_only_excludes_files PASSED [ 84%] tests/kolla_drift/test_source.py::test_list_dir_remote_dirs_only_filters_type PASSED [ 84%] tests/kolla_drift/test_source.py::test_list_dir_at_ref_uses_explicit_ref_and_owner PASSED [ 84%] tests/kolla_drift/test_source.py::test_list_dir_at_ref_404_raises PASSED [ 85%] tests/kolla_drift/test_source.py::test_release_to_ref_prefers_stable PASSED [ 85%] tests/kolla_drift/test_source.py::test_release_to_ref_falls_back_through_candidates PASSED [ 85%] tests/kolla_drift/test_source.py::test_release_to_ref_treats_422_as_absent PASSED [ 86%] tests/kolla_drift/test_source.py::test_release_to_ref_uses_eom_tag_last PASSED [ 86%] tests/kolla_drift/test_source.py::test_release_to_ref_none_raises PASSED [ 86%] tests/kolla_drift/test_source.py::test_release_to_ref_override_wins PASSED [ 87%] tests/kolla_drift/test_source.py::test_read_at_ref_returns_bytes_at_explicit_ref PASSED [ 87%] tests/kolla_drift/test_source.py::test_read_at_ref_optional_404_returns_none PASSED [ 87%] tests/kolla_drift/test_source.py::test_read_at_ref_404_raises_when_not_optional PASSED [ 87%] tests/kolla_drift/test_source.py::test_describe_resolution_local_and_remote PASSED [ 88%] tests/kolla_drift/test_source.py::test_describe_resolution_mode_b_raises PASSED [ 88%] tests/kolla_drift/test_source.py::test_describe_resolution_lists_all_missing PASSED [ 88%] tests/kolla_drift/test_source.py::test_git_show_multi_ref_from_one_clone PASSED [ 89%] tests/kolla_drift/test_source.py::test_git_show_optional_absent_path PASSED [ 89%] tests/kolla_drift/test_source.py::test_git_ls_tree_returns_basenames_and_dirs_only PASSED [ 89%] tests/kolla_drift/test_source.py::test_resolve_local_ref_finds_non_origin_remote PASSED [ 89%] tests/kolla_drift/test_source.py::test_git_show_unresolvable_ref_raises PASSED [ 90%] tests/kolla_drift/test_source.py::test_git_ref_exists PASSED [ 90%] tests/kolla_drift/test_source.py::test_read_at_ref_local_git PASSED [ 90%] tests/kolla_drift/test_source.py::test_describe_resolution_pinned_local_tag PASSED [ 91%] tests/kolla_drift/test_source.py::test_read_at_ref_unpinned_local_dir_is_remote PASSED [ 91%] tests/kolla_drift/test_source.py::test_release_to_ref_memoizes_probes PASSED [ 91%] tests/kolla_drift/test_source.py::test_read_remote_rate_limit_403_gives_helpful_error PASSED [ 92%] tests/kolla_drift/test_source.py::test_rate_limit_error_when_authenticated_omits_token_advice PASSED [ 92%] tests/kolla_drift/test_source.py::test_secondary_rate_limit_retry_after_gives_hint PASSED [ 92%] tests/kolla_drift/test_source.py::test_raw_cdn_429_without_headers_gives_raw_specific_hint PASSED [ 92%] tests/kolla_drift/test_source.py::test_plain_403_is_not_mistaken_for_rate_limiting PASSED [ 93%] tests/kolla_drift/test_source.py::test_auth_headers_adds_bearer_for_github_host PASSED [ 93%] tests/kolla_drift/test_source.py::test_auth_headers_absent_when_no_token PASSED [ 93%] tests/kolla_drift/test_source.py::test_auth_headers_not_leaked_to_non_github_host PASSED [ 94%] tests/kolla_drift/test_source.py::test_get_sends_auth_header_to_github PASSED [ 94%] tests/kolla_drift/test_source.py::test_get_does_not_send_auth_to_non_github_mirror PASSED [ 94%] tests/kolla_drift/test_source.py::test_read_uses_archive_when_enabled PASSED [ 94%] tests/kolla_drift/test_source.py::test_archive_snapshot_shared_across_reads PASSED [ 95%] tests/kolla_drift/test_source.py::test_list_dir_uses_archive PASSED [ 95%] tests/kolla_drift/test_source.py::test_list_tree_uses_archive PASSED [ 95%] tests/kolla_drift/test_source.py::test_list_dir_at_ref_uses_archive PASSED [ 96%] tests/kolla_drift/test_source.py::test_read_at_ref_uses_archive PASSED [ 96%] tests/kolla_drift/test_versions_template.py::test_extracts_distinct_keys PASSED [ 96%] tests/kolla_drift/test_versions_template.py::test_empty_input PASSED [ 97%] tests/test_driver_groups.py::test_group_image_runs_only_image_plugins PASSED [ 97%] tests/test_driver_groups.py::test_group_kolla_runs_only_kolla_plugins PASSED [ 97%] tests/test_driver_groups.py::test_group_all_runs_both_groups PASSED [ 97%] tests/test_driver_groups.py::test_archive_mode_preamble_not_misleading PASSED [ 98%] tests/test_driver_groups.py::test_use_raw_get_preamble_warns_slow PASSED [ 98%] tests/test_driver_groups.py::test_missing_group_errors PASSED [ 98%] tests/test_driver_groups.py::test_demo_exits_0_without_reading_config_or_allowlist PASSED [ 99%] tests/test_driver_groups.py::test_demo_renders_every_real_plugin PASSED [ 99%] tests/test_driver_groups.py::test_demo_json_emits_entries PASSED [ 99%] tests/test_driver_groups.py::test_help_lists_plugin_groups PASSED [100%] ============================= 339 passed in 4.52s ==============================