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: 2275740500 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: 2079 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 531 items tests/catalog_drift/test_catalog_extract.py::test_collections_collect_nested_roles PASSED [ 0%] tests/catalog_drift/test_catalog_extract.py::test_validators_default_the_playbook_name PASSED [ 0%] tests/catalog_drift/test_catalog_extract.py::test_non_literal_map_role2role_raises PASSED [ 0%] tests/catalog_drift/test_catalog_extract.py::test_missing_assignment_raises PASSED [ 0%] tests/catalog_drift/test_catalog_extract.py::test_non_literal_validate_playbooks_raises PASSED [ 0%] tests/catalog_drift/test_catalog_extract.py::test_role_with_non_literal_name_raises PASSED [ 1%] tests/catalog_drift/test_catalog_extract.py::test_validator_entry_without_runtime_raises PASSED [ 1%] tests/catalog_drift/test_catalog_extract.py::test_validate_playbooks_non_dict_literal_raises PASSED [ 1%] tests/catalog_drift/test_catalog_extract.py::test_validator_entry_non_dict_raises PASSED [ 1%] tests/catalog_drift/test_catalog_extract.py::test_non_literal_collection_key_raises PASSED [ 1%] tests/catalog_drift/test_catalog_role_missing.py::test_release_differential_is_one_entry_per_collection PASSED [ 2%] tests/catalog_drift/test_catalog_role_missing.py::test_dead_everywhere_gets_its_own_summary PASSED [ 2%] tests/catalog_drift/test_catalog_role_missing.py::test_resolving_role_is_no_finding PASSED [ 2%] tests/catalog_drift/test_catalog_role_missing.py::test_validator_finding_image_is_playbook_alias_is_key PASSED [ 2%] tests/catalog_drift/test_catalog_role_missing.py::test_validator_checked_against_its_own_runtime PASSED [ 2%] tests/catalog_drift/test_catalog_role_missing.py::test_duplicate_role_in_one_collection_is_one_finding PASSED [ 3%] tests/catalog_drift/test_catalog_role_missing.py::test_allowlist_is_applied PASSED [ 3%] tests/catalog_drift/test_catalog_role_missing.py::test_empty_release_range_raises PASSED [ 3%] tests/catalog_drift/test_integration_real_repos.py::test_no_findings_below_the_differential SKIPPED [ 3%] tests/catalog_drift/test_integration_real_repos.py::test_redis_is_found_from_2025_2 SKIPPED [ 3%] tests/catalog_drift/test_playbooks_constants.py::test_load_const_reads_a_list PASSED [ 3%] tests/catalog_drift/test_playbooks_constants.py::test_load_const_reads_a_string PASSED [ 4%] tests/catalog_drift/test_playbooks_constants.py::test_load_const_missing_name_raises PASSED [ 4%] tests/catalog_drift/test_playbooks_constants.py::test_load_const_returns_last_assignment PASSED [ 4%] tests/catalog_drift/test_playbooks_constants.py::test_load_const_non_literal_raises PASSED [ 4%] tests/catalog_drift/test_playbooks_kolla.py::test_site_roles_minus_unsupported PASSED [ 4%] tests/catalog_drift/test_playbooks_kolla.py::test_release_specific_osism_playbooks PASSED [ 5%] tests/catalog_drift/test_playbooks_kolla.py::test_interface_applies_render_transform PASSED [ 5%] tests/catalog_drift/test_playbooks_kolla.py::test_kolla_host_and_post_deploy_collisions_are_dropped PASSED [ 5%] tests/catalog_drift/test_playbooks_kolla.py::test_mariadb_backup_recovery_get_hyphenated_aliases PASSED [ 5%] tests/catalog_drift/test_playbooks_kolla.py::test_release_without_override_dir_raises PASSED [ 5%] tests/catalog_drift/test_playbooks_resolution.py::test_membership_and_provenance PASSED [ 6%] tests/catalog_drift/test_playbooks_resolution.py::test_ceph_special_case PASSED [ 6%] tests/catalog_drift/test_playbooks_resolution.py::test_ceph_special_case_absent_ceph_ceph PASSED [ 6%] tests/catalog_drift/test_playbooks_resolution.py::test_prefixed_key_resolves_only_when_the_prefixed_name_is_itself_a_key PASSED [ 6%] tests/catalog_drift/test_playbooks_resolution.py::test_bare_prefix_strip_does_not_reconstruct_a_bare_role PASSED [ 6%] tests/catalog_drift/test_playbooks_resolution.py::test_unknown_role_does_not_resolve PASSED [ 6%] tests/catalog_drift/test_playbooks_resolution.py::test_runtime_interface_merges_all_four_runtimes PASSED [ 7%] tests/catalog_drift/test_playbooks_resolution.py::test_runtime_interface_is_memoized_on_config PASSED [ 7%] tests/catalog_drift/test_playbooks_resolution.py::test_runtime_interface_cache_keyed_by_release PASSED [ 7%] tests/catalog_drift/test_playbooks_resolution.py::test_validate_resolves_uses_the_named_runtime PASSED [ 7%] tests/catalog_drift/test_playbooks_resolution.py::test_validate_resolves_ceph_ansible_branch PASSED [ 7%] tests/catalog_drift/test_playbooks_resolution.py::test_validate_resolves_wrong_environment_does_not_resolve PASSED [ 8%] tests/catalog_drift/test_playbooks_resolution.py::test_validate_resolves_osism_ansible_requires_an_environment PASSED [ 8%] tests/catalog_drift/test_playbooks_resolution.py::test_validate_resolves_unknown_runtime_raises PASSED [ 8%] tests/catalog_drift/test_playbooks_runtimes.py::test_osism_files_raises_on_bad_playbooks_version_pin PASSED [ 8%] tests/catalog_drift/test_playbooks_runtimes.py::test_osism_symlink_naming PASSED [ 8%] tests/catalog_drift/test_playbooks_runtimes.py::test_osism_underscore_guard_is_dead_code PASSED [ 9%] tests/catalog_drift/test_playbooks_runtimes.py::test_osism_interface_hides_and_keeps PASSED [ 9%] tests/catalog_drift/test_playbooks_runtimes.py::test_osism_interface_collision_last_prefix_wins PASSED [ 9%] tests/catalog_drift/test_playbooks_runtimes.py::test_osism_own_files_playbooks_copy_is_mirrored PASSED [ 9%] tests/catalog_drift/test_playbooks_runtimes.py::test_ceph_keeps_full_stem PASSED [ 9%] tests/catalog_drift/test_playbooks_runtimes.py::test_ceph_files_unions_flavour_and_toplevel PASSED [ 9%] tests/catalog_drift/test_playbooks_runtimes.py::test_ceph_upgrade_alias_always_created PASSED [ 10%] tests/catalog_drift/test_playbooks_runtimes.py::test_ceph_purge_survivors_only_the_osism_pair PASSED [ 10%] tests/catalog_drift/test_playbooks_runtimes.py::test_ceph_flavours_excludes_the_ceph_yml_alias PASSED [ 10%] tests/catalog_drift/test_playbooks_runtimes.py::test_ceph_mirrors_known_upstream_typos PASSED [ 10%] tests/catalog_drift/test_playbooks_runtimes.py::test_kubernetes_files_lists_prefixed PASSED [ 10%] tests/catalog_drift/test_playbooks_runtimes.py::test_kubernetes_strips_prefix PASSED [ 11%] tests/catalog_drift/test_playbooks_runtimes.py::test_playbook_files_dispatch PASSED [ 11%] tests/catalog_drift/test_plugin_registry.py::test_catalog_role_missing_plugin_registered PASSED [ 11%] tests/catalog_drift/test_plugin_registry.py::test_catalog_plugin_group_matches_registry PASSED [ 11%] tests/catalog_drift/test_plugin_registry.py::test_catalog_report_header_exists PASSED [ 11%] tests/catalog_drift/test_plugin_registry.py::test_catalog_role_missing_enabled_in_config PASSED [ 12%] tests/catalog_drift/test_plugin_registry.py::test_each_plugin_has_required_metadata PASSED [ 12%] tests/image_drift/test_demo.py::test_three_entries_per_plugin PASSED [ 12%] tests/image_drift/test_demo.py::test_entries_carry_live_plugin_text PASSED [ 12%] tests/image_drift/test_demo.py::test_entries_are_actionable PASSED [ 12%] tests/image_drift/test_demo.py::test_show_values_plugin_covers_both_render_branches PASSED [ 12%] tests/image_drift/test_demo.py::test_paths_reflect_plugin_input_files PASSED [ 13%] tests/image_drift/test_driver.py::test_help_lists_plugins PASSED [ 13%] tests/image_drift/test_driver.py::test_default_run_exits_1_with_drifting_images PASSED [ 13%] tests/image_drift/test_driver.py::test_allowlisted_osism_ansible_hidden_by_default PASSED [ 13%] tests/image_drift/test_driver.py::test_no_allowlist_surfaces_osism_ansible PASSED [ 13%] tests/image_drift/test_driver.py::test_format_json_keys PASSED [ 14%] tests/image_drift/test_driver.py::test_plugin_filter_runs_only_role_shadows PASSED [ 14%] tests/image_drift/test_driver.py::test_summary_line_counts PASSED [ 14%] tests/image_drift/test_driver.py::test_advisory_only_exits_0 PASSED [ 14%] tests/image_drift/test_driver.py::test_advisory_finding_in_default_json PASSED [ 14%] tests/image_drift/test_driver.py::test_missing_group_errors PASSED [ 15%] tests/image_drift/test_image_orphan.py::test_orphan_alias_detected PASSED [ 15%] tests/image_drift/test_image_orphan.py::test_consumed_alias_not_detected PASSED [ 15%] tests/image_drift/test_image_orphan.py::test_playbook_consumed_alias_not_detected PASSED [ 15%] tests/image_drift/test_image_orphan.py::test_consumer_in_an_unfiltered_file_is_found PASSED [ 15%] tests/image_drift/test_image_orphan.py::test_allowlist_suppresses_orphan PASSED [ 16%] tests/image_drift/test_manager_parser.py::test_plain_value PASSED [ 16%] tests/image_drift/test_manager_parser.py::test_latest_override_pattern PASSED [ 16%] tests/image_drift/test_manager_parser.py::test_unresolved_jinja_marked PASSED [ 16%] tests/image_drift/test_manager_parser.py::test_multiple_entries PASSED [ 16%] tests/image_drift/test_manager_template_parser.py::test_basic_alias_extraction PASSED [ 16%] tests/image_drift/test_manager_template_parser.py::test_jinja_escaped_lines_ignored PASSED [ 17%] tests/image_drift/test_manager_template_parser.py::test_double_quoted_versions_key PASSED [ 17%] tests/image_drift/test_manager_template_parser.py::test_lines_without_pattern_skipped PASSED [ 17%] tests/image_drift/test_manager_template_parser.py::test_extract_stream_resolved_basic PASSED [ 17%] tests/image_drift/test_manager_template_parser.py::test_extract_stream_resolved_multiple PASSED [ 17%] tests/image_drift/test_override_template_parser.py::test_returns_tag_aliases_only PASSED [ 18%] tests/image_drift/test_override_template_parser.py::test_ignores_image_lines PASSED [ 18%] tests/image_drift/test_override_template_parser.py::test_empty_input PASSED [ 18%] tests/image_drift/test_override_template_parser.py::test_comment_and_blank_lines_ignored PASSED [ 18%] tests/image_drift/test_plugin_registry.py::test_image_plugins_registered PASSED [ 18%] tests/image_drift/test_plugin_registry.py::test_image_plugin_group_matches_registry PASSED [ 19%] tests/image_drift/test_plugin_registry.py::test_role_unpinned_enabled_in_config PASSED [ 19%] tests/image_drift/test_plugin_registry.py::test_image_orphan_enabled_in_config PASSED [ 19%] tests/image_drift/test_plugin_registry.py::test_role_registry_orphan_enabled_in_config PASSED [ 19%] tests/image_drift/test_plugin_registry.py::test_rolling_pin_enabled_in_config PASSED [ 19%] tests/image_drift/test_plugin_registry.py::test_each_plugin_has_required_metadata PASSED [ 19%] tests/image_drift/test_release_parser.py::test_parse_release_returns_docker_images PASSED [ 20%] tests/image_drift/test_release_parser.py::test_parse_release_missing_docker_images_errors PASSED [ 20%] tests/image_drift/test_release_vs_manager.py::test_baseline_drift PASSED [ 20%] tests/image_drift/test_release_vs_manager.py::test_allowlist_broad_suppresses_all_redis PASSED [ 20%] tests/image_drift/test_release_vs_manager.py::test_allowlist_narrow_suppresses_one_alias_only PASSED [ 20%] tests/image_drift/test_release_vs_manager.py::test_latest_override_emitted_with_found_latest PASSED [ 21%] tests/image_drift/test_release_vs_manager.py::test_disabled_image_not_in_release_skipped PASSED [ 21%] tests/image_drift/test_report.py::test_show_values_produces_two_blocks PASSED [ 21%] tests/image_drift/test_report.py::test_show_values_live_block_collapses_file PASSED [ 21%] tests/image_drift/test_report.py::test_show_values_dormant_block_collapses_two_files PASSED [ 21%] tests/image_drift/test_report.py::test_show_values_refs_single_line_only PASSED [ 22%] tests/image_drift/test_report.py::test_show_values_item_order_by_path_then_alias PASSED [ 22%] tests/image_drift/test_report.py::test_show_values_fix_and_refs_present PASSED [ 22%] tests/image_drift/test_report.py::test_show_values_empty_expected_renders_no_release_pin PASSED [ 22%] tests/image_drift/test_report.py::test_show_values_empty_expected_refs_single_line PASSED [ 22%] tests/image_drift/test_report.py::test_show_values_empty_expected_sorted_by_path_then_alias PASSED [ 22%] tests/image_drift/test_report.py::test_show_values_nonempty_expected_still_uses_arrow PASSED [ 23%] tests/image_drift/test_report.py::test_kolla_chain_inner_regression_two_blocks PASSED [ 23%] tests/image_drift/test_role_defaults_parser.py::test_concrete_tag_extracted PASSED [ 23%] tests/image_drift/test_role_defaults_parser.py::test_jinja_value_skipped PASSED [ 23%] tests/image_drift/test_role_defaults_parser.py::test_multiple_aliases_in_one_role_file PASSED [ 23%] tests/image_drift/test_role_defaults_parser.py::test_empty_or_malformed_returns_empty PASSED [ 24%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirected_through_own_version_resolved PASSED [ 24%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirected_through_own_version_non_string_pin PASSED [ 24%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirection_whitespace_insensitive PASSED [ 24%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirection_skipped_when_version_non_concrete PASSED [ 24%] tests/image_drift/test_role_defaults_parser.py::test_tag_indirection_skipped_when_version_missing PASSED [ 25%] tests/image_drift/test_role_defaults_parser.py::test_tag_referencing_other_var_skipped PASSED [ 25%] tests/image_drift/test_role_defaults_parser.py::test_composed_tag_left_for_later_pass PASSED [ 25%] tests/image_drift/test_role_registry_orphan.py::test_unreferenced_registry_var_detected PASSED [ 25%] tests/image_drift/test_role_registry_orphan.py::test_own_definition_line_is_not_a_consumer PASSED [ 25%] tests/image_drift/test_role_registry_orphan.py::test_reference_in_same_role_not_detected PASSED [ 25%] tests/image_drift/test_role_registry_orphan.py::test_reference_from_another_role_not_detected PASSED [ 26%] tests/image_drift/test_role_registry_orphan.py::test_bare_jinja_statement_reference_counts_as_consumer PASSED [ 26%] tests/image_drift/test_role_registry_orphan.py::test_longer_name_does_not_mask_its_prefix PASSED [ 26%] tests/image_drift/test_role_registry_orphan.py::test_playbook_reference_not_detected PASSED [ 26%] tests/image_drift/test_role_registry_orphan.py::test_manager_template_reference_not_detected PASSED [ 26%] tests/image_drift/test_role_registry_orphan.py::test_base_docker_registry_var_is_not_reported PASSED [ 27%] tests/image_drift/test_role_registry_orphan.py::test_consumer_in_an_unfiltered_file_is_found PASSED [ 27%] tests/image_drift/test_role_registry_orphan.py::test_allowlist_suppresses_orphan PASSED [ 27%] tests/image_drift/test_role_shadows.py::test_baseline_drift PASSED [ 27%] tests/image_drift/test_role_shadows.py::test_role_without_defaults_skipped PASSED [ 27%] tests/image_drift/test_role_shadows.py::test_jinja_valued_tag_not_drift PASSED [ 28%] tests/image_drift/test_role_shadows.py::test_allowlist_very_narrow_pins_to_role_file PASSED [ 28%] tests/image_drift/test_role_shadows.py::test_netbox_redis_is_live PASSED [ 28%] tests/image_drift/test_role_shadows.py::test_dormant_aliases_are_dormant PASSED [ 28%] tests/image_drift/test_role_shadows.py::test_floatdemo_is_live PASSED [ 28%] tests/image_drift/test_role_shadows.py::test_stream_resolved_not_emitted PASSED [ 29%] tests/image_drift/test_role_shadows.py::test_dormant_findings_are_advisory PASSED [ 29%] tests/image_drift/test_role_shadows.py::test_live_findings_are_actionable PASSED [ 29%] tests/image_drift/test_role_unpinned.py::test_ciinternal_detected PASSED [ 29%] tests/image_drift/test_role_unpinned.py::test_widget_detected_with_release_key PASSED [ 29%] tests/image_drift/test_role_unpinned.py::test_adminer_not_emitted PASSED [ 29%] tests/image_drift/test_role_unpinned.py::test_stream_resolved_not_emitted PASSED [ 30%] tests/image_drift/test_role_unpinned.py::test_allowlist_marks_ciinternal_allowlisted PASSED [ 30%] tests/image_drift/test_rolling_pin.py::test_rolling_pins_flagged PASSED [ 30%] tests/image_drift/test_rolling_pin.py::test_concrete_pin_not_flagged PASSED [ 30%] tests/image_drift/test_rolling_pin.py::test_odd_but_pinned_not_flagged PASSED [ 30%] tests/image_drift/test_rolling_pin.py::test_top_level_key_ignored PASSED [ 31%] tests/image_drift/test_rolling_pin.py::test_entry_fields PASSED [ 31%] tests/image_drift/test_rolling_pin.py::test_allowlist_marks_entry PASSED [ 31%] tests/image_drift/test_source_list_tree.py::test_list_tree_returns_nested_paths PASSED [ 31%] tests/image_drift/test_source_list_tree.py::test_list_tree_absent_raises_by_default PASSED [ 31%] tests/image_drift/test_source_list_tree.py::test_list_tree_absent_missing_ok_returns_empty PASSED [ 32%] tests/kolla_drift/test_archive.py::test_repo_slug_and_archive_url PASSED [ 32%] tests/kolla_drift/test_archive.py::test_snapshot_dir_fetches_extracts_and_serves PASSED [ 32%] tests/kolla_drift/test_archive.py::test_snapshot_dir_memoizes_one_http_call PASSED [ 32%] tests/kolla_drift/test_archive.py::test_snapshot_dir_404_raises PASSED [ 32%] tests/kolla_drift/test_archive.py::test_fetch_retries_once_then_succeeds PASSED [ 32%] tests/kolla_drift/test_archive.py::test_fetch_fails_twice_raises PASSED [ 33%] tests/kolla_drift/test_archive.py::test_unsafe_traversal_member_rejected PASSED [ 33%] tests/kolla_drift/test_archive.py::test_absolute_symlink_member_rejected_on_fallback PASSED [ 33%] tests/kolla_drift/test_archive.py::test_safe_relative_symlink_extracted_on_fallback PASSED [ 33%] tests/kolla_drift/test_config.py::test_load_minimal_config PASSED [ 33%] tests/kolla_drift/test_config.py::test_osism_root_and_paths_are_unknown_keys PASSED [ 34%] tests/kolla_drift/test_config.py::test_unknown_top_level_key_errors PASSED [ 34%] tests/kolla_drift/test_config.py::test_allowlist_broad_match PASSED [ 34%] tests/kolla_drift/test_config.py::test_apply_marks_matching_drift_allowlisted PASSED [ 34%] tests/kolla_drift/test_config.py::test_apply_returns_unmatched_drift_unchanged PASSED [ 34%] tests/kolla_drift/test_config.py::test_allowlist_narrow_by_alias PASSED [ 35%] tests/kolla_drift/test_config.py::test_allowlist_very_narrow PASSED [ 35%] tests/kolla_drift/test_config.py::test_allowlist_empty_reason_errors PASSED [ 35%] tests/kolla_drift/test_config.py::test_allowlist_no_file_returns_empty PASSED [ 35%] tests/kolla_drift/test_config.py::test_sources_parsed PASSED [ 35%] tests/kolla_drift/test_config.py::test_default_owner_defaults_when_absent PASSED [ 35%] tests/kolla_drift/test_config.py::test_unknown_source_key_errors PASSED [ 36%] tests/kolla_drift/test_config.py::test_stale_flags_unused_entry PASSED [ 36%] tests/kolla_drift/test_config.py::test_stale_scoped_to_ran_plugins PASSED [ 36%] tests/kolla_drift/test_config.py::test_prefix_matches_service_and_subgroups PASSED [ 36%] tests/kolla_drift/test_config.py::test_prefix_does_not_match_adjacent_name PASSED [ 36%] tests/kolla_drift/test_config.py::test_exact_is_default_and_unchanged PASSED [ 37%] tests/kolla_drift/test_config.py::test_allowlist_unknown_match_value_errors PASSED [ 37%] tests/kolla_drift/test_config.py::test_allowlist_empty_image_errors PASSED [ 37%] tests/kolla_drift/test_config.py::test_prefix_entry_stale_when_no_match PASSED [ 37%] tests/kolla_drift/test_config.py::test_releases_and_release_refs_parse PASSED [ 37%] tests/kolla_drift/test_config.py::test_releases_default_empty PASSED [ 38%] tests/kolla_drift/test_config.py::test_archive_and_snapshot_cache_defaults PASSED [ 38%] tests/kolla_drift/test_dir_helpers.py::test_dir_read_returns_bytes PASSED [ 38%] tests/kolla_drift/test_dir_helpers.py::test_dir_read_missing_raises_with_where PASSED [ 38%] 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 [ 39%] tests/kolla_drift/test_dir_helpers.py::test_dir_list_tree_missing_raises PASSED [ 39%] 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_local_only_run_refuses_a_plugin_that_must_reach_the_network PASSED [ 40%] tests/kolla_drift/test_driver.py::test_remote_fallback_permits_the_network_read PASSED [ 40%] tests/kolla_drift/test_driver.py::test_a_fully_remote_run_is_never_blocked PASSED [ 40%] tests/kolla_drift/test_driver.py::test_repo_only_plugins_are_not_blocked PASSED [ 40%] tests/kolla_drift/test_driver.py::test_every_offending_plugin_is_listed_at_once PASSED [ 41%] tests/kolla_drift/test_driver.py::test_network_plugin_in_a_local_only_run_exits_2 PASSED [ 41%] tests/kolla_drift/test_driver.py::test_base_dir_not_found_exits_2 PASSED [ 41%] tests/kolla_drift/test_driver_stale.py::test_stale_entry_forces_exit_1_and_is_reported PASSED [ 41%] 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 [ 42%] tests/kolla_drift/test_enablement.py::test_truthy_enables_literal_only_and_canon PASSED [ 42%] 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 [ 43%] 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 [ 44%] tests/kolla_drift/test_enablement.py::test_osism_enable_ids_explicit_includes_all_keys PASSED [ 44%] tests/kolla_drift/test_enablement.py::test_osism_enable_ids_unknown_scope_raises PASSED [ 44%] tests/kolla_drift/test_enablement.py::test_groupvars_home_names_the_per_service_file PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_groupvars_home_falls_back_to_the_layer_without_homes PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_groupvars_home_dropped_key_ignores_homes PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_groupvars_home_in_newest_keys PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_groupvars_home_dropped_only PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_groupvars_home_newest_wins_over_dropped PASSED [ 45%] tests/kolla_drift/test_enablement.py::test_groupvars_home_neither_returns_none PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_in_mirror_layer PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_upstream_image_tag_keys_collects_both_suffixes PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_upstream_homes_names_the_lexically_last_file PASSED [ 46%] tests/kolla_drift/test_enablement.py::test_upstream_groupvars_are_read_once_per_ref PASSED [ 46%] tests/kolla_drift/test_enablement_source_refs.py::test_parse_source_refs_returns_openstack_project_refs PASSED [ 47%] tests/kolla_drift/test_enablement_source_refs.py::test_parse_source_refs_preserves_hyphenated_project_names PASSED [ 47%] tests/kolla_drift/test_enablement_source_refs.py::test_parse_source_refs_keeps_valueless_entries PASSED [ 47%] tests/kolla_drift/test_enablement_source_refs.py::test_parse_source_refs_empty_when_block_absent 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 [ 48%] tests/kolla_drift/test_enablement_values.py::test_osism_mirror_values_reads_only_001 PASSED [ 48%] tests/kolla_drift/test_enablement_values.py::test_mirror_values_merges_the_whole_001_layer PASSED [ 48%] tests/kolla_drift/test_enablement_values.py::test_supply_excluding_mirror_excludes_every_layer_file PASSED [ 48%] tests/kolla_drift/test_enablement_version_gates.py::test_parses_a_gate_into_its_listed_releases PASSED [ 48%] tests/kolla_drift/test_enablement_version_gates.py::test_parses_the_not_in_form_the_same_way PASSED [ 48%] tests/kolla_drift/test_enablement_version_gates.py::test_parses_a_named_release_literal PASSED [ 49%] tests/kolla_drift/test_enablement_version_gates.py::test_ignores_the_rest_of_the_expression PASSED [ 49%] tests/kolla_drift/test_enablement_version_gates.py::test_finds_a_gate_nested_inside_a_structured_value PASSED [ 49%] tests/kolla_drift/test_enablement_version_gates.py::test_var_without_a_gate_is_absent PASSED [ 49%] tests/kolla_drift/test_enablement_version_gates.py::test_deduplicates_repeated_literals_preserving_order PASSED [ 49%] tests/kolla_drift/test_enablement_version_gates.py::test_empty_and_non_mapping_documents_yield_nothing PASSED [ 50%] tests/kolla_drift/test_enablement_version_gates.py::test_per_release_file_round_trips PASSED [ 50%] tests/kolla_drift/test_enablement_version_gates.py::test_per_release_file_target_rejects_other_files PASSED [ 50%] tests/kolla_drift/test_http_head.py::test_head_returns_the_response_for_a_published_artifact PASSED [ 50%] tests/kolla_drift/test_http_head.py::test_head_returns_a_whitelisted_status_without_raising PASSED [ 50%] tests/kolla_drift/test_http_head.py::test_head_raises_on_a_status_that_is_not_whitelisted PASSED [ 51%] tests/kolla_drift/test_http_head.py::test_head_raises_on_server_error_even_when_404_is_whitelisted PASSED [ 51%] tests/kolla_drift/test_http_head.py::test_head_raises_on_rate_limit_even_when_404_is_whitelisted PASSED [ 51%] tests/kolla_drift/test_http_head.py::test_head_raises_source_error_on_transport_failure PASSED [ 51%] tests/kolla_drift/test_http_head.py::test_head_reports_the_status_on_the_error PASSED [ 51%] tests/kolla_drift/test_http_head.py::test_head_leaves_the_status_unset_for_a_transport_failure PASSED [ 51%] tests/kolla_drift/test_http_head.py::test_head_retries_a_transient_status_and_returns_the_recovered_response PASSED [ 52%] tests/kolla_drift/test_http_head.py::test_head_retries_a_transport_failure PASSED [ 52%] tests/kolla_drift/test_http_head.py::test_head_still_raises_when_the_host_keeps_refusing PASSED [ 52%] tests/kolla_drift/test_http_head.py::test_head_does_not_retry_a_settled_answer PASSED [ 52%] tests/kolla_drift/test_http_head.py::test_head_does_not_retry_a_whitelisted_status PASSED [ 52%] tests/kolla_drift/test_http_head.py::test_head_backs_off_between_attempts PASSED [ 53%] tests/kolla_drift/test_http_head.py::test_a_non_github_throttle_does_not_blame_github PASSED [ 53%] tests/kolla_drift/test_http_head.py::test_a_non_github_throttle_echoes_retry_after_when_offered PASSED [ 53%] tests/kolla_drift/test_http_head.py::test_a_github_throttle_still_gets_the_github_hint PASSED [ 53%] tests/kolla_drift/test_inventory_sections.py::test_returns_groups_with_sorted_members PASSED [ 53%] tests/kolla_drift/test_inventory_sections.py::test_empty_group_has_no_members PASSED [ 54%] tests/kolla_drift/test_inventory_sections.py::test_duplicate_member_in_group_does_not_raise PASSED [ 54%] tests/kolla_drift/test_kolla_docker.py::test_normalises_hyphen_to_underscore PASSED [ 54%] tests/kolla_drift/test_kolla_docker.py::test_empty PASSED [ 54%] tests/kolla_drift/test_kolla_enablement_build.py::test_flags_enabled_buildable_not_built PASSED [ 54%] tests/kolla_drift/test_kolla_enablement_build.py::test_reads_enable_flags_split_across_files PASSED [ 54%] tests/kolla_drift/test_kolla_enablement_build.py::test_allowlist_marks_allowlisted PASSED [ 55%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_truthy_scope_flags_absent_truthy_services PASSED [ 55%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_explicit_scope_also_flags_dead_no_flags PASSED [ 55%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_present_upstream_is_not_orphan PASSED [ 55%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_union_across_releases_not_intersection PASSED [ 55%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_allowlist_marks_allowlisted PASSED [ 56%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_run_uses_explicit_default PASSED [ 56%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_reads_enable_flags_split_across_files PASSED [ 56%] tests/kolla_drift/test_kolla_enablement_orphan.py::test_empty_release_range_raises PASSED [ 56%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_flags_upstream_key_missing_from_osism PASSED [ 56%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_present_in_osism_is_not_missing PASSED [ 57%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_osism_key_in_any_file_suppresses PASSED [ 57%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_versions_template_supplied_key_not_flagged PASSED [ 57%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_overlay_supplied_key_not_flagged PASSED [ 57%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_union_across_releases_not_intersection PASSED [ 57%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_allowlist_marks_allowlisted PASSED [ 58%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_empty_release_range_raises PASSED [ 58%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_missing_key_at_newest_routes_to_001 PASSED [ 58%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_missing_key_dropped_by_newest_routes_to_010 PASSED [ 58%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_missing_key_names_its_per_service_file PASSED [ 58%] tests/kolla_drift/test_kolla_groupvars_missing.py::test_two_keys_with_different_homes_have_distinct_remediations PASSED [ 58%] tests/kolla_drift/test_kolla_image_orphan.py::test_flags_removed_service_image_and_tag PASSED [ 59%] tests/kolla_drift/test_kolla_image_orphan.py::test_present_service_not_flagged PASSED [ 59%] tests/kolla_drift/test_kolla_image_orphan.py::test_union_across_releases_not_intersection PASSED [ 59%] tests/kolla_drift/test_kolla_image_orphan.py::test_allowlist_marks_osism_built PASSED [ 59%] tests/kolla_drift/test_kolla_image_orphan.py::test_ceph_catalogue_ignored PASSED [ 59%] tests/kolla_drift/test_kolla_image_orphan.py::test_empty_upstream_union_raises PASSED [ 60%] tests/kolla_drift/test_kolla_image_orphan.py::test_empty_catalogue_match_raises PASSED [ 60%] tests/kolla_drift/test_kolla_inventory.py::test_flags_upstream_only_groups_across_the_release_range PASSED [ 60%] tests/kolla_drift/test_kolla_inventory.py::test_entry_names_only_the_releases_that_want_the_group PASSED [ 60%] tests/kolla_drift/test_kolla_inventory.py::test_group_renamed_upstream_is_flagged_at_the_release_that_renamed_it PASSED [ 60%] tests/kolla_drift/test_kolla_inventory.py::test_members_come_from_the_last_release_that_wants_the_group PASSED [ 61%] tests/kolla_drift/test_kolla_inventory.py::test_red_entry_carries_members PASSED [ 61%] tests/kolla_drift/test_kolla_inventory.py::test_exact_and_prefix_allowlist_match PASSED [ 61%] tests/kolla_drift/test_kolla_inventory.py::test_empty_release_range_raises PASSED [ 61%] tests/kolla_drift/test_kolla_inventory.py::test_declares_the_release_repo_it_reads PASSED [ 61%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_clean_mirror_no_drift PASSED [ 61%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_value_diff_flagged PASSED [ 62%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_missing_from_mirror_flagged PASSED [ 62%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_dropped_key_routed_to_010 PASSED [ 62%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_dup_key_delete PASSED [ 62%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_invented_key PASSED [ 62%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_typo_mirrored_not_flagged PASSED [ 63%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_newest_selected_by_sort PASSED [ 63%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_dropped_key_classified_with_out_of_order_releases PASSED [ 63%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_allowlist_marks_entry PASSED [ 63%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_empty_release_range_raises PASSED [ 63%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_layer_split_across_files_is_a_clean_mirror PASSED [ 64%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_layer_later_file_wins_on_duplicate_key PASSED [ 64%] tests/kolla_drift/test_kolla_mirror_verbatim.py::test_missing_upstream_key_names_its_per_service_file PASSED [ 64%] tests/kolla_drift/test_kolla_orphan_config.py::test_flags_dead_service_companion_vars PASSED [ 64%] tests/kolla_drift/test_kolla_orphan_config.py::test_found_src_points_to_each_file PASSED [ 64%] tests/kolla_drift/test_kolla_orphan_config.py::test_no_dead_services_returns_empty PASSED [ 64%] tests/kolla_drift/test_kolla_orphan_config.py::test_respects_orphan_allowlist PASSED [ 65%] tests/kolla_drift/test_kolla_orphan_config.py::test_own_allowlist_marks_allowlisted PASSED [ 65%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_flags_orphan_secrets_per_release PASSED [ 65%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_present_secret_is_not_orphan PASSED [ 65%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_allowlist_marks_allowlisted PASSED [ 65%] tests/kolla_drift/test_kolla_secrets_orphan.py::test_missing_template_skips_release PASSED [ 66%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_flags_ref_when_a_later_phase_tarball_is_published PASSED [ 66%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_silent_when_no_later_phase_is_published PASSED [ 66%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_silent_when_already_on_the_latest_published_phase PASSED [ 66%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_does_not_probe_or_flag_the_configured_phase_itself PASSED [ 66%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_probes_only_the_phases_opendev_publishes_a_tarball_for PASSED [ 67%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_a_release_already_moved_costs_no_probes PASSED [ 67%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_later_phases_are_only_those_after_the_configured_one PASSED [ 67%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_skips_ref_that_does_not_name_the_release PASSED [ 67%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_skips_valueless_ref PASSED [ 67%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_preserves_hyphenated_project_names PASSED [ 67%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_inconclusive_probe_is_reported_unresolved_not_clean PASSED [ 68%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_inconclusive_probe_does_not_also_yield_a_stale_finding PASSED [ 68%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_one_inconclusive_project_does_not_hide_the_others PASSED [ 68%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_probe_inconclusive_is_a_source_error PASSED [ 68%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_tarball_exists_true_for_a_published_artifact PASSED [ 68%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_tarball_exists_false_when_absent PASSED [ 69%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_tarball_exists_raises_instead_of_reporting_absent_on_outage PASSED [ 69%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_tarball_exists_classifies_a_transport_failure PASSED [ 69%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_declares_the_host_no_base_dir_can_serve PASSED [ 69%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_report_names_the_target_phase_and_the_file_to_edit PASSED [ 69%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_report_does_not_offer_a_phase_that_has_no_tarball PASSED [ 70%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_projects_moving_to_the_same_phase_share_one_report_block PASSED [ 70%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_plugin_level_remediation_describes_the_rename_without_inventing_phases PASSED [ 70%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_unresolved_report_says_unknown_rather_than_clean PASSED [ 70%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_unresolved_refs_failing_alike_share_one_report_block PASSED [ 70%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_unresolved_and_stale_render_as_separate_blocks PASSED [ 70%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_unresolved_entry_is_actionable_so_the_run_exits_nonzero PASSED [ 71%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_run_reports_drift_read_from_the_release_manifest PASSED [ 71%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_run_reports_an_unverified_ref_when_the_probe_fails PASSED [ 71%] tests/kolla_drift/test_kolla_source_ref_phase.py::test_run_allowlists_an_unverified_ref_for_a_pinned_project PASSED [ 71%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_flags_all_inert_keys PASSED [ 71%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_enabled_and_buildable_key_is_an_add PASSED [ 72%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_disabled_or_unbuildable_key_is_a_remove PASSED [ 72%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_add_and_remove_render_as_separate_blocks PASSED [ 72%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_hyphen_underscore_is_not_drift PASSED [ 72%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_reads_enable_flags_split_across_files PASSED [ 72%] tests/kolla_drift/test_kolla_version_chain_inner.py::test_allowlist_marks_allowlisted PASSED [ 73%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_flags_services_without_template_key PASSED [ 73%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_expected_src_uses_configured_ref PASSED [ 73%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_present_service_not_flagged PASSED [ 73%] tests/kolla_drift/test_kolla_version_chain_upstream.py::test_allowlist_marks_allowlisted PASSED [ 73%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_flags_a_gate_naming_a_release_outside_the_supported_range PASSED [ 74%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_silent_when_every_named_release_is_supported PASSED [ 74%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_reports_only_the_dead_releases_of_a_mixed_gate PASSED [ 74%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_flags_a_not_in_gate_too PASSED [ 74%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_ignores_files_that_are_not_yaml PASSED [ 74%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_flags_a_per_release_file_for_a_retired_release PASSED [ 74%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_silent_for_a_per_release_file_of_a_supported_release PASSED [ 75%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_a_retired_per_release_file_can_also_carry_a_stale_gate PASSED [ 75%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_findings_are_advisory_so_the_nightly_job_stays_green PASSED [ 75%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_a_deliberate_gate_can_be_allowlisted PASSED [ 75%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_stale_releases_keeps_order_and_drops_supported PASSED [ 75%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_report_names_the_variable_the_release_and_the_file PASSED [ 76%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_gate_and_file_findings_render_as_separate_blocks PASSED [ 76%] tests/kolla_drift/test_kolla_version_gate_orphan.py::test_plugin_is_registered PASSED [ 76%] tests/kolla_drift/test_model.py::test_drift_entry_has_all_fields PASSED [ 76%] tests/kolla_drift/test_model.py::test_drift_entry_to_dict_for_json PASSED [ 76%] tests/kolla_drift/test_model.py::test_default_severity_is_actionable PASSED [ 77%] tests/kolla_drift/test_model.py::test_as_allowlisted_preserves_severity PASSED [ 77%] tests/kolla_drift/test_plugin_registry.py::test_registry_is_a_list PASSED [ 77%] tests/kolla_drift/test_plugin_registry.py::test_each_plugin_has_required_metadata PASSED [ 77%] tests/kolla_drift/test_plugin_registry.py::test_kolla_inner_plugin_registered PASSED [ 77%] tests/kolla_drift/test_plugin_registry.py::test_kolla_upstream_plugin_registered PASSED [ 77%] tests/kolla_drift/test_plugin_registry.py::test_kolla_inventory_plugin_registered PASSED [ 78%] tests/kolla_drift/test_plugin_registry.py::test_kolla_enablement_build_plugin_registered PASSED [ 78%] tests/kolla_drift/test_plugin_registry.py::test_kolla_enablement_orphan_plugin_registered PASSED [ 78%] tests/kolla_drift/test_plugin_registry.py::test_kolla_secrets_orphan_plugin_registered PASSED [ 78%] tests/kolla_drift/test_plugin_registry.py::test_kolla_orphan_config_plugin_registered PASSED [ 78%] tests/kolla_drift/test_plugin_registry.py::test_kolla_groupvars_missing_plugin_registered PASSED [ 79%] tests/kolla_drift/test_plugin_registry.py::test_every_plugin_has_summary_and_remediation PASSED [ 79%] tests/kolla_drift/test_plugin_registry.py::test_default_config_enables_every_registered_plugin PASSED [ 79%] tests/kolla_drift/test_plugin_registry.py::test_kolla_mirror_verbatim_plugin_registered PASSED [ 79%] tests/kolla_drift/test_plugin_registry.py::test_plugins_in_lifecycle_order PASSED [ 79%] tests/kolla_drift/test_plugin_registry.py::test_plugin_groups_match_registries_and_are_disjoint PASSED [ 80%] tests/kolla_drift/test_report.py::test_single_plugin_groups_sorts_and_renders PASSED [ 80%] tests/kolla_drift/test_report.py::test_orders_blocks_by_plugins_list PASSED [ 80%] tests/kolla_drift/test_report.py::test_build_style_splits_one_block_per_ref_pair PASSED [ 80%] tests/kolla_drift/test_report.py::test_allowlisted_excluded_from_blocks_and_count PASSED [ 80%] tests/kolla_drift/test_report.py::test_empty_returns_empty_list PASSED [ 80%] tests/kolla_drift/test_report.py::test_entry_summary_remediation_override_plugin_default PASSED [ 81%] tests/kolla_drift/test_report.py::test_lists_image_not_alias PASSED [ 81%] tests/kolla_drift/test_sbom_map.py::test_extracts_keys PASSED [ 81%] tests/kolla_drift/test_sbom_map.py::test_missing_map_raises PASSED [ 81%] tests/kolla_drift/test_secrets_map.py::test_extracts_top_level_keys PASSED [ 81%] tests/kolla_drift/test_secrets_map.py::test_ignores_comments_indented_and_markers PASSED [ 82%] tests/kolla_drift/test_secrets_map.py::test_empty_input PASSED [ 82%] tests/kolla_drift/test_source.py::test_read_local_working_tree_when_found PASSED [ 82%] tests/kolla_drift/test_source.py::test_read_not_found_in_base_dir_is_mode_b_error PASSED [ 82%] tests/kolla_drift/test_source.py::test_read_local_file_absent_is_error_not_remote PASSED [ 82%] tests/kolla_drift/test_source.py::test_read_remote_fallback_when_not_found PASSED [ 83%] tests/kolla_drift/test_source.py::test_read_no_base_dir_is_remote PASSED [ 83%] tests/kolla_drift/test_source.py::test_first_base_dir_with_the_repo_wins PASSED [ 83%] tests/kolla_drift/test_source.py::test_pinned_local_git_repo_reads_at_pin_ref PASSED [ 83%] tests/kolla_drift/test_source.py::test_pinned_non_git_dir_falls_back_to_remote PASSED [ 83%] tests/kolla_drift/test_source.py::test_pinned_non_git_dir_no_fallback_is_mode_b PASSED [ 83%] tests/kolla_drift/test_source.py::test_read_remote_404_errors PASSED [ 84%] tests/kolla_drift/test_source.py::test_read_network_error PASSED [ 84%] tests/kolla_drift/test_source.py::test_read_underscore_repo_translates_to_hyphen PASSED [ 84%] tests/kolla_drift/test_source.py::test_read_optional_present_local PASSED [ 84%] tests/kolla_drift/test_source.py::test_read_optional_missing_local_returns_none PASSED [ 84%] tests/kolla_drift/test_source.py::test_read_optional_404_returns_none PASSED [ 85%] tests/kolla_drift/test_source.py::test_read_optional_network_error_still_raises PASSED [ 85%] tests/kolla_drift/test_source.py::test_read_optional_underscore_repo_translates_to_hyphen PASSED [ 85%] tests/kolla_drift/test_source.py::test_list_dir_local PASSED [ 85%] tests/kolla_drift/test_source.py::test_list_dir_remote PASSED [ 85%] tests/kolla_drift/test_source.py::test_list_dir_remote_404_errors PASSED [ 86%] tests/kolla_drift/test_source.py::test_list_dir_remote_404_missing_ok_returns_empty PASSED [ 86%] tests/kolla_drift/test_source.py::test_list_dir_remote_rate_limit_missing_ok_still_raises PASSED [ 86%] tests/kolla_drift/test_source.py::test_list_dir_local_missing_ok_returns_empty PASSED [ 86%] tests/kolla_drift/test_source.py::test_list_dir_local_absent_raises_by_default PASSED [ 86%] tests/kolla_drift/test_source.py::test_list_dir_underscore_repo_translates_to_hyphen PASSED [ 87%] tests/kolla_drift/test_source.py::test_source_override_redirects_owner_and_ref PASSED [ 87%] tests/kolla_drift/test_source.py::test_list_dir_local_dirs_only_excludes_files PASSED [ 87%] tests/kolla_drift/test_source.py::test_list_dir_remote_dirs_only_filters_type PASSED [ 87%] tests/kolla_drift/test_source.py::test_list_dir_at_ref_uses_explicit_ref_and_owner PASSED [ 87%] tests/kolla_drift/test_source.py::test_list_dir_at_ref_404_raises PASSED [ 87%] tests/kolla_drift/test_source.py::test_list_dir_at_ref_404_missing_ok_returns_empty PASSED [ 88%] tests/kolla_drift/test_source.py::test_list_dir_at_ref_local_pinned_missing_ok_returns_empty PASSED [ 88%] tests/kolla_drift/test_source.py::test_release_to_ref_prefers_stable PASSED [ 88%] tests/kolla_drift/test_source.py::test_release_to_ref_falls_back_through_candidates PASSED [ 88%] tests/kolla_drift/test_source.py::test_release_to_ref_treats_422_as_absent PASSED [ 88%] tests/kolla_drift/test_source.py::test_release_to_ref_uses_eom_tag_last PASSED [ 89%] tests/kolla_drift/test_source.py::test_release_to_ref_none_raises PASSED [ 89%] tests/kolla_drift/test_source.py::test_release_to_ref_override_wins PASSED [ 89%] tests/kolla_drift/test_source.py::test_read_at_ref_returns_bytes_at_explicit_ref PASSED [ 89%] tests/kolla_drift/test_source.py::test_read_at_ref_optional_404_returns_none PASSED [ 89%] tests/kolla_drift/test_source.py::test_read_at_ref_404_raises_when_not_optional PASSED [ 90%] tests/kolla_drift/test_source.py::test_describe_resolution_local_and_remote PASSED [ 90%] tests/kolla_drift/test_source.py::test_describe_resolution_mode_b_raises PASSED [ 90%] tests/kolla_drift/test_source.py::test_describe_resolution_lists_all_missing PASSED [ 90%] tests/kolla_drift/test_source.py::test_git_show_multi_ref_from_one_clone PASSED [ 90%] tests/kolla_drift/test_source.py::test_git_show_optional_absent_path PASSED [ 90%] tests/kolla_drift/test_source.py::test_git_ls_tree_returns_basenames_and_dirs_only PASSED [ 91%] tests/kolla_drift/test_source.py::test_resolve_local_ref_finds_non_origin_remote PASSED [ 91%] tests/kolla_drift/test_source.py::test_git_show_unresolvable_ref_raises PASSED [ 91%] tests/kolla_drift/test_source.py::test_git_ref_exists PASSED [ 91%] tests/kolla_drift/test_source.py::test_read_at_ref_local_git PASSED [ 91%] tests/kolla_drift/test_source.py::test_describe_resolution_pinned_local_tag PASSED [ 92%] tests/kolla_drift/test_source.py::test_read_at_ref_unpinned_local_dir_is_remote PASSED [ 92%] tests/kolla_drift/test_source.py::test_release_to_ref_memoizes_probes PASSED [ 92%] 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 [ 93%] tests/kolla_drift/test_source.py::test_raw_cdn_429_without_headers_gives_raw_specific_hint PASSED [ 93%] tests/kolla_drift/test_source.py::test_plain_403_is_not_mistaken_for_rate_limiting PASSED [ 93%] tests/kolla_drift/test_source.py::test_non_github_host_does_not_get_the_github_hint PASSED [ 93%] tests/kolla_drift/test_source.py::test_non_github_host_echoes_retry_after_when_offered 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 [ 94%] 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 [ 95%] tests/kolla_drift/test_source.py::test_read_at_ref_uses_archive PASSED [ 95%] tests/kolla_drift/test_versions_template.py::test_extracts_distinct_keys PASSED [ 96%] tests/kolla_drift/test_versions_template.py::test_empty_input PASSED [ 96%] tests/test_driver_groups.py::test_group_image_runs_only_image_plugins PASSED [ 96%] tests/test_driver_groups.py::test_group_kolla_runs_only_kolla_plugins PASSED [ 96%] tests/test_driver_groups.py::test_group_all_runs_both_groups PASSED [ 96%] tests/test_driver_groups.py::test_archive_mode_preamble_not_misleading PASSED [ 96%] tests/test_driver_groups.py::test_use_raw_get_preamble_warns_slow PASSED [ 97%] tests/test_driver_groups.py::test_missing_group_errors PASSED [ 97%] tests/test_driver_groups.py::test_demo_exits_0_without_reading_config_or_allowlist PASSED [ 97%] tests/test_driver_groups.py::test_demo_renders_every_real_plugin PASSED [ 97%] tests/test_driver_groups.py::test_demo_json_emits_entries PASSED [ 97%] tests/test_driver_groups.py::test_help_lists_plugin_groups PASSED [ 98%] tests/test_release_notes_defaults.py::test_layer_is_sorted_and_filtered PASSED [ 98%] tests/test_release_notes_defaults.py::test_layer_omits_directories_and_keeps_only_blobs PASSED [ 98%] tests/test_release_notes_defaults.py::test_layer_none_on_http_error PASSED [ 98%] tests/test_release_notes_defaults.py::test_layer_none_on_truncated_tree PASSED [ 98%] tests/test_release_notes_defaults.py::test_layer_none_on_request_exception PASSED [ 99%] tests/test_release_notes_defaults.py::test_section_fetches_the_layer_before_099_and_names_the_layer_in_prose PASSED [ 99%] tests/test_release_notes_defaults.py::test_layer_empty_list_when_listing_succeeds_with_no_matches PASSED [ 99%] tests/test_release_notes_defaults.py::test_section_is_none_when_the_listing_fails_even_if_099_would_fetch PASSED [ 99%] tests/test_release_notes_defaults.py::test_section_is_none_when_the_listing_is_truncated PASSED [ 99%] tests/test_release_notes_defaults.py::test_section_is_none_when_one_mirror_file_fails_to_fetch PASSED [100%] ======================== 529 passed, 2 skipped in 5.67s ========================