[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#973062: cloud-init: FTBFS: AttributeError: 'Thread' object has no attribute 'isAlive'



Source: cloud-init
Version: 20.2-2
Severity: serious
Justification: FTBFS on amd64
Tags: bullseye sid ftbfs
Usertags: ftbfs-20201027 ftbfs-bullseye

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.

Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> py3versions: no X-Python3-Version in control file, using supported versions
> set -e && set -x && for pyvers in 3.9 3.8; do \
> 	PYMAJOR=`echo $pyvers | cut -d'.' -f1` ; \
> 	echo "===> Testing with python$pyvers (python$PYMAJOR)" ; \
> 	PYTHON=python$pyvers PYTHONPATH=. python$pyvers -m pytest -v tests/unittests ; \
> done
> + echo 3.9
> + cut -d. -f1
> + PYMAJOR=3
> + echo ===> Testing with python3.9 (python3)
> ===> Testing with python3.9 (python3)
> + PYTHON=python3.9 PYTHONPATH=. python3.9 -m pytest -v tests/unittests
> ============================= test session starts ==============================
> platform linux -- Python 3.9.0+, pytest-4.6.11, py-1.9.0, pluggy-0.13.0 -- /usr/bin/python3.9
> cachedir: .pytest_cache
> rootdir: /<<PKGBUILDDIR>>
> collecting ... collected 1644 items
> 
> tests/unittests/test__init__.py::TestWalkerHandleHandler::test_attribute_error PASSED [  0%]
> tests/unittests/test__init__.py::TestWalkerHandleHandler::test_import_error PASSED [  0%]
> tests/unittests/test__init__.py::TestWalkerHandleHandler::test_no_errors PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_exception_is_caught PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_modfreq_per_always PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_no_handle_when_modfreq_once PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_normal_version_1 PASSED [  0%]
> tests/unittests/test__init__.py::TestHandlerHandlePart::test_normal_version_2 PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_exception_warns PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_invalid_content PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_no_key_found PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_parse_cmdline_url_found PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_parse_cmdline_url_nokey_raises_keyerror PASSED [  0%]
> tests/unittests/test__init__.py::TestCmdlineUrl::test_valid_content PASSED [  0%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_basic_usage PASSED [  0%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_file_permissions PASSED [  0%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_string PASSED [  1%]
> tests/unittests/test_atomic_helper.py::TestAtomicHelper::test_write_json PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestUpstartJobPartHandler::test_upstart_frequency_no_out PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestUpstartJobPartHandler::test_upstart_frequency_single PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_errors_on_missing_instance_data_json PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_errors_on_unreadable_instance_data PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_noop_on_content_signals PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_renders_jinja_content PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_renders_jinja_content_missing_keys PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_subhandler_v2_with_clean_payload PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_handle_subhandler_v3_with_clean_payload PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_part_handler_defaults PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_part_handler_looks_up_sub_handler_types PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestJinjaTemplatePartHandler::test_jinja_template_part_handler_looks_up_subhandler_types PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_decodes_decode_paths PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_hyphens_to_underscores PASSED [  1%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_most_recent_version_of_promoted_keys PASSED [  2%]
> tests/unittests/test_builtin_handlers.py::TestConvertJinjaInstanceData::test_convert_instance_data_promotes_versioned_keys_to_top_level PASSED [  2%]
> tests/unittests/test_builtin_handlers.py::TestRenderJinjaPayload::test_render_jinja_payload_logs_jinja_vars_on_debug PASSED [  2%]
> tests/unittests/test_builtin_handlers.py::TestRenderJinjaPayload::test_render_jinja_payload_replaces_missing_variables_and_warns PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_all_subcommands_represented_in_help PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_analyze_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_clean_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_collect_logs_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_conditional_subcommands_from_entry_point_sys_argv PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_devel_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_dhclient_hook_subcommand PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_features_hook_subcommand PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_init_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_modules_subcommand_parser PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_no_arguments_shows_error_message PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_no_arguments_shows_usage PASSED [  2%]
> tests/unittests/test_cli.py::TestCLI::test_single_subcommand PASSED      [  2%]
> tests/unittests/test_cli.py::TestCLI::test_status_subcommand_parser PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_status_wrapper_errors_on_invalid_modes PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_status_wrapper_errors_on_invalid_name PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_status_wrapper_init_local_writes_fresh_status_info PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_wb_devel_schema_subcommand_doc_content PASSED [  3%]
> tests/unittests/test_cli.py::TestCLI::test_wb_devel_schema_subcommand_parser PASSED [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_contains SKIPPED [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_getitem SKIPPED  [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_iter SKIPPED     [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_len SKIPPED      [  3%]
> tests/unittests/test_cs_util.py::CepkoResultTests::test_with_list_as_result SKIPPED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_cloud_config_archive PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_cloud_config_as_x_shell_script PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_dont_allow_user_data PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_merging_cloud_config PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_application_octet_stream PASSED [  3%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_gzip_compressed PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_text_plain PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_text_plain_shell PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mime_text_x_shellscript PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_mixed_cloud_config PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_shellscript PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_simple_jsonp PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_simple_jsonp_no_vendor_consumed PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_simple_jsonp_vendor_and_user PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_unhandled_type_warning PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_vendor_user_yaml_cloud_config PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserData::test_vendordata_script PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_cloud_config_archive PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_cloud_config_as_x_shell_script PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_dont_allow_user_data PASSED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_include FAILED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_include_bad_url FAILED [  4%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_merging_cloud_config PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_application_octet_stream PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_gzip_compressed PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_text_plain PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_text_plain_shell PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mime_text_x_shellscript PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_mixed_cloud_config PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_shellscript PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_simple_jsonp PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_simple_jsonp_no_vendor_consumed PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_simple_jsonp_vendor_and_user PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_unhandled_type_warning PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_vendor_user_yaml_cloud_config PASSED [  5%]
> tests/unittests/test_data.py::TestConsumeUserDataHttp::test_vendordata_script PASSED [  5%]
> tests/unittests/test_data.py::TestUDProcess::test_bytes_in_userdata PASSED [  5%]
> tests/unittests/test_data.py::TestUDProcess::test_compressed_in_userdata PASSED [  5%]
> tests/unittests/test_data.py::TestUDProcess::test_string_in_userdata PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handle_headers PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handle_mime_parts PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handles_binary_non_utf8_decodable PASSED [  6%]
> tests/unittests/test_data.py::TestConvertString::test_handles_binary_utf8_decodable PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_cmdline_overrides_confd_runtime_and_defaults PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_cmdline_overrides_defaults PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_conf_d_overrides_defaults PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_only_builtin_gets_builtin PASSED [  6%]
> tests/unittests/test_data.py::TestFetchBaseConfig::test_order_precedence_is_builtin_system_runtime_cmdline PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aliyun_identified PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aliyun_over_ec2 PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aws_ec2_hvm PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_aws_ec2_xen PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_azure_dmi_detection_from_chassis_asset_tag PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_azure_seed_file_detection PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_bobrightbox_is_not_brightbox PASSED [  6%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_brightbox_is_ec2 PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive_interacts_with_ibmcloud_config_disk PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive_seed PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_config_drive_upper PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_configured_list_with_none PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_nocloud_as_vdb_iso9660 PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_openstack_intel_is_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_ovf_is_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_ovf_returns_not_found_on_azure PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_default_ovf_with_detect_virt_none_not_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_e24cloud_is_ec2 PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_e24cloud_not_active PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_gce_by_product_name PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_gce_by_serial PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_hetzner_found PASSED [  7%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_os_code PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_os_code_different_uuid PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_no_userdata PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_no_userdata_in_provisioning PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_userdata PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_template_userdata_in_provisioning PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_with_configdrive_seed PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ibmcloud_with_nocloud_seed PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_nocloud_seed PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_nocloud_seed_ubuntu_core_writable PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_nocloud_upper PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_asset_tag_copute PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_asset_tag_nova PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_on_non_intel_is_maybe PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_open_telekom_cloud PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_openstack_sap_ccloud PASSED [  8%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_guestinfo_found PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_by_cdrom_with_different_size PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_by_cdrom_with_matching_fs_label PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_by_cdrom_with_ovf_schema_match PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_open_vm_tools_64 PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_ovf_on_vmware_iso_found_when_vmware_customization PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_path_env_gets_set_from_main PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_policy_config_disable_overrides_builtin PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_policy_disabled PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_rbx_cloud PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_single_entry_defines_datasource PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_smartos_bhyve PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_smartos_lxbrand PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_smartos_lxbrand_requires_socket PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_wb_print_variables PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestDsIdentify::test_zstack_is_ec2 PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestBSDNoSys::test_dmi_decode PASSED [  9%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_config_only PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_config_with_new_log PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_config_with_old_log PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestIsIBMProvisioning::test_no_config PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestOracle::test_found_by_chassis PASSED [ 10%]
> tests/unittests/test_ds_identify.py::TestOracle::test_not_found PASSED   [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_bdm FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_key FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_no_keys FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_fetch_with_2_keys FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_metadata_no_security_credentials FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch FAILED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch_fail_not_found PASSED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch_fail_server_dead PASSED [ 10%]
> tests/unittests/test_ec2_util.py::TestEc2Util::test_userdata_fetch_fail_server_not_found PASSED [ 10%]
> tests/unittests/test_helpers.py::TestPaths::test_get_ipath_and_empty_instance_id_returns_none PASSED [ 10%]
> tests/unittests/test_helpers.py::TestPaths::test_get_ipath_and_instance_id_with_slashes PASSED [ 11%]
> tests/unittests/test_log.py::TestCloudInitLogger::test_logger_uses_gmtime PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merge_sub_dict PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merge_sub_dict2 PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merge_sub_list PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_dict PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_dict2 PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_list PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_compat_merges_str PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_merge_cc_samples PASSED [ 11%]
> tests/unittests/test_merging.py::TestSimpleRun::test_seed_runs PASSED    [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_device_driver PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_device_driver_blacklist PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_device_driver_v2 PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_unstable_names PASSED [ 11%]
> tests/unittests/test_net.py::TestGenerateFallbackConfig::test_unstable_names_disabled PASSED [ 11%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_all_config PASSED [ 11%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_bond_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_bridge_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_check_ifcfg_rh PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_check_ifcfg_rh_plugins_no_plugins PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_check_ifcfg_rh_plugins_string PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_config_with_explicit_loopback PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_default_generation PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_accept_ra_config_v1 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_accept_ra_config_v2 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_only_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_reject_ra_config_v1 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_reject_ra_config_v2 PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_stateful_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_dhcpv6_stateless_config PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_from_v2_bond_mtu PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_from_v2_route_metric PASSED [ 12%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_from_v2_vlan_mtu PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_manual_config PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_multiple_ipv4_default_gateways PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_multiple_ipv6_default_gateways PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_netplan_dhcp_false_disable_dhcp_in_state PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_netplan_dhcp_false_no_dhcp_in_sysconfig PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_network_config_v1_multi_iface_samples PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_network_config_v1_samples PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_openstack_rendering_samples PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_small_config PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_v4_and_v6_static_config PASSED [ 13%]
> tests/unittests/test_net.py::TestRhelSysConfigRendering::test_vlan_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_all_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_bond_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_bridge_config PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_config_with_explicit_loopback PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_default_generation PASSED [ 13%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_dhcpv6_only_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_dhcpv6_stateless_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_manual_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_network_config_v1_samples PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_openstack_rendering_samples PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_render_v4_and_v6 PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_render_v6_and_v4 PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_simple_render_ipv6_slaac PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_small_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_v4_and_v6_static_config PASSED [ 14%]
> tests/unittests/test_net.py::TestOpenSuseSysConfigRendering::test_vlan_config PASSED [ 14%]
> tests/unittests/test_net.py::TestEniNetRendering::test_config_with_explicit_loopback PASSED [ 14%]
> tests/unittests/test_net.py::TestEniNetRendering::test_default_generation PASSED [ 14%]
> tests/unittests/test_net.py::TestEniNetRendering::test_v2_route_metric_to_eni PASSED [ 14%]
> tests/unittests/test_net.py::TestNetplanNetRendering::test_default_generation PASSED [ 14%]
> tests/unittests/test_net.py::TestNetplanCleanDefault::test_clean_known_config_cleaned PASSED [ 14%]
> tests/unittests/test_net.py::TestNetplanCleanDefault::test_clean_known_config_cleans_only_expected PASSED [ 15%]
> tests/unittests/test_net.py::TestNetplanCleanDefault::test_clean_unknown_config_not_cleaned PASSED [ 15%]
> tests/unittests/test_net.py::TestNetplanPostcommands::test_netplan_postcmds PASSED [ 15%]
> tests/unittests/test_net.py::TestNetplanPostcommands::test_netplan_render_calls_postcmds PASSED [ 15%]
> tests/unittests/test_net.py::TestEniNetworkStateToEni::test_no_header PASSED [ 15%]
> tests/unittests/test_net.py::TestEniNetworkStateToEni::test_no_hwaddress PASSED [ 15%]
> tests/unittests/test_net.py::TestEniNetworkStateToEni::test_with_header PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_convert_dhcp PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_convert_dhcp6 PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_convert_static PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_b64 PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_b64_gz PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_net_config_disabled PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_cmdline_with_net_config_unencoded_logs_error PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineConfigParsing::test_config_from_cmdline_net_cfg PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_both_ip_ip6 PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_ip PASSED [ 15%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_ip6 PASSED [ 16%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_with_no_ip_or_ip6 PASSED [ 16%]
> tests/unittests/test_net.py::TestCmdlineKlibcNetworkConfigSource::test_without_ip PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_first_applicable_source_is_used PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_no_applicable_sources PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_no_sources PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_one_applicable_source PASSED [ 16%]
> tests/unittests/test_net.py::TestReadInitramfsConfig::test_one_applicable_source_after_inapplicable_sources PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::test_render_output_has_yaml_no_aliases PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::test_render_output_supports_both_grat_arp_spelling PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_all PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_bond_netplan PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_bond_v2_input_netplan PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_accept_ra PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_only PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_reject_ra PASSED [ 16%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_stateful PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_dhcpv6_stateless PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_ipv6_slaac PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_manual PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_small_netplan PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_v4_and_v6 PASSED [ 17%]
> tests/unittests/test_net.py::TestNetplanRoundTrip::testsimple_render_v4_and_v6_static PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::test_ipv6_static_routes PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::test_routes_rendered PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_convert_and_render PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_all PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_bond PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_accept_ra PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_only PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_reject_ra PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_stateful PASSED [ 17%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_dhcpv6_stateless PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_ipv6_slaac PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_manual PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_small PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_v4_and_v6 PASSED [ 18%]
> tests/unittests/test_net.py::TestEniRoundTrip::testsimple_render_v4_and_v6_static PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[RendererNotFoundError-False-False-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[eni-False-True-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[eni-True-True-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[netplan-True-False-False-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[netplan-True-False-True-False-False] PASSED [ 18%]
> tests/unittests/test_net.py::TestRenderersSelect::test_valid_renderer_from_defaults_depending_on_availability[sysconfig-False-False-True-False-True] PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_eni_and_sysconfig_available PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_first_in_priority PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_search_returns_empty_on_none PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_select_none_found_raises PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_select_positive PASSED [ 18%]
> tests/unittests/test_net.py::TestNetRenderers::test_sysconfig_available_uses_variant_mapping PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_excludes_any_without_mac_address PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_excludes_bridges PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_excludes_stolen_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfaces::test_gi_includes_duplicate_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfaceHasOwnMac::test_expected_values PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfaceHasOwnMac::test_non_strict_with_no_addr_assign_type PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfaceHasOwnMac::test_strict_with_no_addr_assign_type_raises PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_duplicates_of_empty_mac_are_ok PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_any_without_mac_address PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_bridges PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_stolen_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_excludes_vlans PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_ib PASSED      [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_raise_exception_on_duplicate_macs PASSED [ 19%]
> tests/unittests/test_net.py::TestGetInterfacesByMac::test_skip_all_zeros PASSED [ 19%]
> tests/unittests/test_net.py::TestInterfacesSorting::test_natural_order PASSED [ 20%]
> tests/unittests/test_net.py::TestGetIBHwaddrsByInterface::test_ethernet PASSED [ 20%]
> tests/unittests/test_net.py::TestGetIBHwaddrsByInterface::test_ib PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_all PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_all_bounce PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_duplicate_macs PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_duplicate_macs_driver_no_devid PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_macs_case_insensitive PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_multi_mac_dups PASSED [ 20%]
> tests/unittests/test_net.py::TestRenameInterfaces::test_rename_no_driver_no_device_id PASSED [ 20%]
> tests/unittests/test_net.py::TestNetworkState::test_bcast_addr PASSED    [ 20%]
> tests/unittests/test_net_freebsd.py::TestInterfacesByMac::test_get_interfaces_by_mac PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_no_required_and_optional PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_required_and_optional PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_required_missing PASSED [ 20%]
> tests/unittests/test_pathprefix2dict.py::TestPathPrefix2Dict::test_required_only PASSED [ 20%]
> tests/unittests/test_registry.py::TestDictRegistry::test_added_item_included_in_output PASSED [ 20%]
> tests/unittests/test_registry.py::TestDictRegistry::test_keys_cannot_be_replaced PASSED [ 21%]
> tests/unittests/test_registry.py::TestDictRegistry::test_modifying_registered_items_isnt_exposed_to_other_callers PASSED [ 21%]
> tests/unittests/test_registry.py::TestDictRegistry::test_registry_starts_out_empty PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[amazon] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[arch] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[centos] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[debian] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[fedora] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[freebsd] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[netbsd] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[openbsd] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[rhel] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[suse] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[ubuntu] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_distro_in_cloud_cfg[unknown] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[amazon] PASSED [ 21%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[arch] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[centos] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[debian] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[fedora] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[freebsd] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[netbsd] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[openbsd] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[rhel] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[suse] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[ubuntu] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_default_user_in_cloud_cfg[unknown] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[freebsd-renderers0] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[netbsd-renderers1] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[openbsd-renderers2] PASSED [ 22%]
> tests/unittests/test_render_cloudcfg.py::TestRenderCloudCfg::test_variant_sets_network_renderer_priority_in_cloud_cfg[ubuntu-renderers3] PASSED [ 22%]
> tests/unittests/test_reporting.py::TestReportStartEvent::test_report_start_event_passes_something_with_as_string_to_handlers PASSED [ 22%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_invalid_result_raises_attribute_error PASSED [ 22%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_report_finish_event_passes_something_with_as_string_to_handlers PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_reporting_successful_finish_has_sensible_string_repr PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportFinishEvent::test_reporting_unsuccessful_finish_has_sensible_string_repr PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingEvent::test_as_dict PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingEvent::test_as_string PASSED [ 23%]
> tests/unittests/test_reporting.py::TestFinishReportingEvent::test_as_has_result PASSED [ 23%]
> tests/unittests/test_reporting.py::TestBaseReportingHandler::test_base_reporting_handler_is_abstract PASSED [ 23%]
> tests/unittests/test_reporting.py::TestLogHandler::test_appropriate_logger_used PASSED [ 23%]
> tests/unittests/test_reporting.py::TestLogHandler::test_log_message_uses_event_as_string PASSED [ 23%]
> tests/unittests/test_reporting.py::TestLogHandler::test_single_log_message_at_info_published PASSED [ 23%]
> tests/unittests/test_reporting.py::TestDefaultRegisteredHandler::test_log_handler_registered_by_default PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_empty_configuration_doesnt_add_handlers PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_handler_config_not_modified PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_handlers_removed_if_falseish_specified PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_looks_up_handler_by_type_and_adds_it PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingConfiguration::test_uses_non_type_parts_of_config_dict_as_kwargs PASSED [ 23%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_child_fullname_respects_parent PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_child_result_bubbles_up PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_finish_exception_defaults_fail PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_message_updatable PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_message_used_in_finish PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_reporting_child_default_to_parent PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_reporting_disabled_does_not_report_events PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_reporting_event_has_sane_repr PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_result_on_exception_used PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_set_invalid_result_raises_value_error PASSED [ 24%]
> tests/unittests/test_reporting.py::TestReportingEventStack::test_start_and_finish_success PASSED [ 24%]
> tests/unittests/test_reporting.py::TestStatusAccess::test_invalid_status_access_raises_value_error PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TestKvpEncoding::test_encode_decode PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_event_very_long PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_events_with_higher_incarnation_not_over_written PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_file_operation_issue PASSED [ 24%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_finish_event_result_is_logged PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_get_boot_telemetry PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_get_system_info PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_not_truncate_kvp_file_modified_after_boot PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_report_diagnostic_event PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_truncate_stale_kvp_file PASSED [ 25%]
> tests/unittests/test_reporting_hyperv.py::TextKvpReporter::test_unique_kvp_key PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_already_registered PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_full_registration PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_simple_registration PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::GoodTests::test_update_repos_disable_with_none PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_bad_key_value PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_no_org PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_no_password PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_pool_not_a_list PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_repo_not_a_list PASSED [ 25%]
> tests/unittests/test_rh_subscription.py::TestBadInput::test_service_level_without_auto PASSED [ 25%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_invalid_keytype PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_no_comment PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_with_keyoptions PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_parse_with_options_passed_in PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestAuthKeyLineParser::test_simple_parse PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateAuthorizedKeys::test_new_invalid_keys_are_ignored PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateAuthorizedKeys::test_new_keys_replace PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_blank_lines PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_comment_line PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_empty_file PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_lower_case_config PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_lower_case_with_equals PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_not_a_file PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_upper_case_config PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestParseSSHConfig::test_upper_case_with_equals PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_commented_out_not_updated_but_appended PASSED [ 26%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_keycase_not_modified PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_multiple_updates_with_add PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_new_option_added PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_return_empty_if_no_changes PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfigLines::test_single_option_updated PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfig::test_modified PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestUpdateSshConfig::test_not_modified PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_home PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_multiple PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_relative PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestBasicAuthorizedKeyParse::test_user PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestMultipleSshAuthorizedKeysFile::test_multiple_authorizedkeys_file_order1 PASSED [ 27%]
> tests/unittests/test_sshutil.py::TestMultipleSshAuthorizedKeysFile::test_multiple_authorizedkeys_file_order2 PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_detection SKIPPED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_from_file PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_to_file PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_to_string PASSED [ 27%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_nonascii_render_undefined_variables_to_default_py3 PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_jinja_warns_on_missing_dep_and_uses_basic_renderer SKIPPED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic2 PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic_deeper PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic_no_parens PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_basic_parens PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_cheetah PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_default PASSED [ 28%]
> tests/unittests/test_templating.py::TestTemplates::test_render_jinja PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_found_convert_to_list PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_found_with_default PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_not_found_no_default PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_not_found_with_default PASSED [ 28%]
> tests/unittests/test_util.py::TestGetCfgOptionListOrStr::test_value_is_none PASSED [ 28%]
> tests/unittests/test_util.py::TestWriteFile::test_basic_usage PASSED     [ 28%]
> tests/unittests/test_util.py::TestWriteFile::test_copy_mode_no_existing PASSED [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_copy_mode_with_existing PASSED [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_custom_omode PASSED    [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_dir_is_created_if_required PASSED [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_explicit_mode PASSED   [ 29%]
> tests/unittests/test_util.py::TestWriteFile::test_restorecon_if_possible_is_called PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_empty_dirs PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_files PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_nested_dirs PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_non_empty_dirs PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_deletes_symlinks PASSED [ 29%]
> tests/unittests/test_util.py::TestDeleteDirContents::test_does_not_delete_dir PASSED [ 29%]
> tests/unittests/test_util.py::TestKeyValStrings::test_keyval_str_to_dict PASSED [ 29%]
> tests/unittests/test_util.py::TestGetCmdline::test_cmdline_reads_debug_env PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_bogus_parse_error_returns_default PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_bogus_scan_error_returns_default PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_nonallowed_returns_default PASSED [ 29%]
> tests/unittests/test_util.py::TestLoadYaml::test_none_returns_default PASSED [ 30%]
> tests/unittests/test_util.py::TestLoadYaml::test_python_unicode PASSED   [ 30%]
> tests/unittests/test_util.py::TestLoadYaml::test_simple PASSED           [ 30%]
> tests/unittests/test_util.py::TestLoadYaml::test_unsafe_types PASSED     [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool_handles_no_zpool PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool_no_dev_zfs PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_get_device_info_from_zpool_on_error PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_invalid_mountinfo PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_parse_mount_with_ext PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_parse_mount_with_zfs PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_precise_ext4_root PASSED [ 30%]
> tests/unittests/test_util.py::TestMountinfoParsing::test_raring_btrfs_root PASSED [ 30%]
> tests/unittests/test_util.py::TestIsX86::test_is_x86_calls_uname_for_architecture PASSED [ 30%]
> tests/unittests/test_util.py::TestIsX86::test_is_x86_matches_x86_types PASSED [ 30%]
> tests/unittests/test_util.py::TestIsX86::test_is_x86_unmatched_types PASSED [ 30%]
> tests/unittests/test_util.py::TestReadDMIData::test_container_returns_none PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_container_returns_none_on_unknown PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_dmidecode_not_used_on_arm PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_dmidecode_used_if_no_sysfs_file_on_disk PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_dots_returned_instead_of_foxfox PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_none_returned_if_dmidecode_not_in_path PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_none_returned_if_neither_source_has_data PASSED [ 31%]
> tests/unittests/test_util.py::TestReadDMIData::test_sysfs_used_with_key_in_mapping_and_file_on_disk PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_default_log_file_present PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_empty_cfg_returns_empty_list PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_output_logs_parsed_when_appending PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_output_logs_parsed_when_redirecting PASSED [ 31%]
> tests/unittests/test_util.py::TestGetConfigLogfiles::test_output_logs_parsed_when_teeing_files PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_given_log_level_used PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_log_level_defaults_to_debug PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_dont_go_to_stdout_if_console_exists PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_go_to_console_by_default PASSED [ 31%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_go_to_log_if_given PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_logs_go_to_stdout_if_console_does_not_exist PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_newlines_stripped_from_log_call PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_stderr_not_used_if_false PASSED [ 32%]
> tests/unittests/test_util.py::TestMultiLog::test_stderr_used_by_default PASSED [ 32%]
> tests/unittests/test_util.py::TestMessageFromString::test_unicode_not_messed_up PASSED [ 32%]
> tests/unittests/test_util.py::TestReadSeeded::test_unicode_not_messed_up PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_bogus_command_logs_status_messages PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_bunch_of_slashes_in_path PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_c_lang_can_take_utf8_args PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_command_logs_exit_codes_to_status_cb PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_exception_has_out_err_are_bytes_if_decode_false PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_exception_has_out_err_are_bytes_if_decode_true PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_returns_none_if_no_capture PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_subp_capture_stderr PASSED  [ 32%]
> tests/unittests/test_util.py::TestSubp::test_subp_combined_stderr_stdout PASSED [ 32%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_ignore PASSED   [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_invalid_utf8_replaces PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_strict_raises PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_decode_strict_valid_utf8 PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_env_and_update_env PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_handles_bytestrings PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_handles_strings PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_handles_utf8 PASSED    [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_reads_env PASSED       [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_respects_decode_false PASSED [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_update_env PASSED      [ 33%]
> tests/unittests/test_util.py::TestSubp::test_subp_warn_missing_shebang PASSED [ 33%]
> tests/unittests/test_util.py::TestEncode::test_decode_binary_plain_text_with_hex PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_empty_msgs PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_indent_text PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_multi_line_msgs PASSED [ 33%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_single_line_msgs PASSED [ 34%]
> tests/unittests/test_util.py::TestProcessExecutionError::test_pexec_error_type PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_bad_content_in_os_release_no_effect PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_channel_ini_with_snappy_is_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_id_in_os_release PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_id_in_os_release_quoted PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_nothing_found_is_not_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_snap_core_in_cmdline_is_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestSystemIsSnappy::test_system_image_config_dir_is_snappy PASSED [ 34%]
> tests/unittests/test_util.py::TestLoadShellContent::test_comments_handled_correctly PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_all_utf8_encoded PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_encoding_none_returns_bytes PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_get_proc_ppid PASSED  [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_non_existing_file_returns_empty_dict PASSED [ 34%]
> tests/unittests/test_util.py::TestGetProcEnv::test_non_utf8_in_environment PASSED [ 34%]
> tests/unittests/test_util.py::test_find_devs_with_openbsd PASSED         [ 34%]
> tests/unittests/test_util.py::test_find_devs_with_openbsd_with_criteria PASSED [ 34%]
> tests/unittests/test_util.py::test_find_devs_with_freebsd PASSED         [ 35%]
> tests/unittests/test_util.py::test_find_devs_with_netbsd PASSED          [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_config_file_dhcp_2nics PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_config_password PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_config_reset_passwd PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_configfile_static_2nics PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_custom_script PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_datasource_instance_id PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_gen_subnet PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_config_dns_suffixes PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_config_nameservers PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_nics_list_dhcp PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_get_nics_list_static PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_post_gc_status PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareConfigFile::test_utility_methods PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_a_primary_nic_with_gateway PASSED [ 35%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_cust_non_primary_nic_with_gateway_ PASSED [ 36%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_non_primary_nic_with_gateway PASSED [ 36%]
> tests/unittests/test_vmware_config_file.py::TestVmwareNetConfig::test_non_primary_nic_without_gateway PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestAliYunDatasource::test_parse_public_keys PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestAliYunDatasource::test_returns_false_when_not_on_aliyun PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestAliYunDatasource::test_with_mock_server FAILED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestIsAliYun::test_false_on_empty_string PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestIsAliYun::test_false_on_unknown_string PASSED [ 36%]
> tests/unittests/test_datasource/test_aliyun.py::TestIsAliYun::test_true_on_aliyun_product PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_cloud_info_file PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_cloud_info_file_ioerror PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_rhev PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_unknown PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetCloudType::test_vsphere PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_fail_rhev PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_fail_vsphere PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_rhev PASSED [ 36%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_unrecognized PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataCloudInfoFile::test_vsphere PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataNoCloudInfoFile::test_failure_no_cloud_file PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataNoCloudInfoFile::test_rhev_no_cloud_file PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestGetDataNoCloudInfoFile::test_vsphere_no_cloud_file PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_modprobe_fails PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_mount_cb_fails PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_no_modprobe_cmd PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_no_udevadm_cmd PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataRhevm::test_udevadm_fails PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataVsphere::test_user_data_vsphere_mcb_fail PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataVsphere::test_user_data_vsphere_no_cdrom PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestUserDataVsphere::test_user_data_vsphere_success PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_both PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_dc PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_non_dc PASSED [ 37%]
> tests/unittests/test_datasource/test_altcloud.py::TestReadUserDataCallback::test_callback_none PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_increases_route_metric_for_non_primary_nics PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_ipv4_and_ipv6_route_metrics_match_for_nics PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_ipv4_secondary_ips_will_be_static_addrs PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_ipv6_secondary_ips_will_be_static_cidrs PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestParseNetworkConfig::test_single_ipv4_nic_configuration PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_does_not_dhcp_if_network_is_up PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_from_imds_empty_when_no_imds_present FAILED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_from_imds_retries_on_timeout PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestGetMetadataFromIMDS::test_get_metadata_performs_dhcp_when_network_is_down PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_availability_zone_set_from_imds PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_basic_dev_file PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_basic_seed_dir PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_call_is_platform_viable_seed PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_cfg_has_no_fingerprint_has_value PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_cfg_has_pubkeys_fingerprint PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_cfg_has_pubkeys_value PASSED [ 38%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_on_reprovision_reports_ready PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_on_reprovision_reports_ready_using_lease PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_raises_invalid_metadata_on_error PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_crawl_metadata_returns_structured_data_and_caches_nothing PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_default_ephemeral PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_exception_fetching_fabric_data_doesnt_propagate PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_fabric_data_included_in_metadata PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_fallback_network_config PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_fallback_network_config_blacklist PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_data_non_ubuntu_will_not_remove_network_scripts PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_data_on_ubuntu_will_not_remove_network_scripts_disabled PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_data_on_ubuntu_will_remove_network_scripts PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_hostname_with_iterable_arg PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_hostname_with_no_args PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_hostname_with_string_arg PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_get_resource_disk PASSED [ 39%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_imds_network_config PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_imds_network_ignored_when_apply_network_config_false PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_instance_id_endianness PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_instance_id_from_dmidecode_used PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_instance_id_from_dmidecode_used_for_builtin PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_list_possible_azure_ds_devs PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_network_config_set_from_imds PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_network_config_set_from_imds_route_metric_for_secondary_nic PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_no_datasource_expected PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_ovf_can_include_unicode PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_ovf_env_arrives_in_waagent_dir PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_password_given PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_password_redacted_in_ovf PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_provide_disk_aliases PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_region_set_from_imds PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_sys_cfg_set_agent_command PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_sys_cfg_set_never_destroy_ntfs PASSED [ 40%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_user_cfg_set_agent_command PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_user_cfg_set_agent_command_plain PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_user_not_locked_if_password_redacted PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_userdata_arrives PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_userdata_found PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_userdata_plain PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_username_used PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSource::test_waagent_d_has_0700_perms PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_bounce_skipped_on_ifupdown_absent PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_default_bounce_command_ifup_used_by_default PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_different_hostnames_performs_bounce PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_different_hostnames_sets_hostname PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_different_hostnames_sets_hostname_back PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_disabled_bounce_does_not_change_hostname PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_disabled_bounce_does_not_perform_bounce PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_environment_correct_for_bounce_command PASSED [ 41%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_failure_in_bounce_still_resets_host_name PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_force_performs_bounce_regardless PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_same_hostname_does_not_change_hostname PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_set_hostname_option_can_disable_bounce PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_set_hostname_option_can_disable_hostname_set PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestAzureBounce::test_unchanged_hostname_does_not_perform_bounce PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestLoadAzureDsDir::test_missing_ovf_env_xml_raises_non_azure_datasource_error PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestLoadAzureDsDir::test_wb_invalid_ovf_env_xml_calls_read_azure_ovf PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestReadAzureOvf::test_invalid_xml_raises_non_azure_ds PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestReadAzureOvf::test_load_with_pubkeys PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_never_destroy_ntfs_config_false PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_no_partitions_is_false PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_ntfs_mount_errors_true PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_not_ntfs_false PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_ntfs_empty_is_true PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_ntfs_empty_with_dataloss_file_is_true PASSED [ 42%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_ntfs_populated_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_one_partition_through_realpath_is_true PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_three_partition_through_realpath_is_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_three_partitions_is_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_two_partitions_not_ntfs_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_two_partitions_ntfs_empty_is_true PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestCanDevBeReformatted::test_two_partitions_ntfs_populated_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestClearCachedData::test_clear_cached_attrs_clears_imds PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestAzureNetExists::test_azure_net_must_exist_for_legacy_objpkl PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningReadAzureOvfFlag::test_read_azure_ovf_with_false_flag PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningReadAzureOvfFlag::test_read_azure_ovf_with_true_flag PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningReadAzureOvfFlag::test_read_azure_ovf_without_flag PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test__should_reprovision_returns_false PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test__should_reprovision_with_file_existing PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test__should_reprovision_with_true_cfg PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningShouldReprovision::test_reprovision_calls__poll_imds PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningPollIMDS::test_poll_imds_re_dhcp_on_timeout PASSED [ 43%]
> tests/unittests/test_datasource/test_azure.py::TestPreprovisioningPollIMDS::test_poll_imds_report_ready_false PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSourcePreprovisioning::test__reprovision_calls__poll_imds PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestAzureDataSourcePreprovisioning::test_poll_imds_returns_ovf_env PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRemoveUbuntuNetworkConfigScripts::test_remove_network_scripts_default_removes_stock_scripts PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRemoveUbuntuNetworkConfigScripts::test_remove_network_scripts_only_attempts_removal_if_path_exists PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRemoveUbuntuNetworkConfigScripts::test_remove_network_scripts_removes_both_files_and_directories PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestWBIsPlatformViable::test_false_on_no_matching_azure_criteria PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestWBIsPlatformViable::test_true_on_azure_ovf_env_in_seed_dir PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestWBIsPlatformViable::test_true_on_non_azure_chassis PASSED [ 44%]
> tests/unittests/test_datasource/test_azure.py::TestRandomSeed::test_non_ascii_seed_is_serializable PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_from_dhcp_client PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_latest_lease_used PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_missing_file PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestFindEndpoint::test_missing_special_azure_line PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_hex_string PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_hex_string_with_single_character_part PASSED [ 44%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_packed_string PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_packed_string_containing_a_colon PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromLeaseValue::test_packed_string_with_escaped_quote PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_certificates_xml_parsed_and_fetched_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_container_id_parsed_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_incarnation_parsed_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_byte_swap PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_no_byte_swap_diff_instance_id PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_no_byte_swap_same_instance_id PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_instance_id_parsed_correctly PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGoalStateParsing::test_missing_certificates_skips_http_get PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_non_secure_get PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_post PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_post_with_extra_headers PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestAzureEndpointHttpClient::test_secure_get PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManager::test_clean_up PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManager::test_generate_certificate_uses_tmpdir PASSED [ 45%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManager::test_openssl_manager_creates_a_tmpdir PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManagerActions::test_parse_certificates SKIPPED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestOpenSSLManagerActions::test_pubkey_extract SKIPPED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_absent_certificates_produces_empty_public_keys PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_certificates_used_to_determine_public_keys PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_clean_up_can_be_called_at_any_time PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_clean_up_will_clean_up_openssl_manager_if_instantiated PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_correct_url_used_for_goalstate PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_correct_url_used_for_report_ready PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_failure_to_fetch_goalstate_bubbles_up PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_goal_state_values_used_for_report_ready PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestWALinuxAgentShim::test_http_client_uses_certificate PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGetMetadataFromFabric::test_data_from_shim_returned PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGetMetadataFromFabric::test_failure_in_registration_calls_clean_up PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestGetMetadataFromFabric::test_success_calls_clean_up PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_multiple_returns_first PASSED [ 46%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_no_valid_leases_is_none PASSED [ 47%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_option_245_is_found_in_single PASSED [ 47%]
> tests/unittests/test_datasource/test_azure_helper.py::TestExtractIpAddressFromNetworkd::test_option_245_not_found_returns_None PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_encoded_user_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_get_hostname PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_get_instance_id PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_get_public_ssh_keys PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_lack_of_cloudinit_key_in_vendor_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_lack_of_vendor_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_metadata PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_platform PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_user_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DataSourceCloudSigmaTest::test_vendor_data PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DsLoads::test_get_datasource_list_returns_in_local PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudsigma.py::DsLoads::test_list_sources_finds_ds PASSED [ 47%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_bad_request_doesnt_stop_ds_from_working SKIPPED [ 47%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_empty_password_doesnt_create_config SKIPPED [ 47%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_not_saved_if_already_saved SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_not_saved_if_bad_request SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_not_saved_if_empty SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_password_sets_password SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_saved_password_doesnt_create_config SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestCloudStackPasswordFetching::test_valid_response_means_password_marked_as_saved SKIPPED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_ignores_by_extension PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_selects_dhclient_dash_files PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_selects_dhclient_dot_files PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_selects_newest_matching PASSED [ 48%]
> tests/unittests/test_datasource/test_cloudstack.py::TestGetLatestLease::test_skips_dhcpv6_files PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::ExpectedDataSources::test_expected_default_local_sources_found PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::ExpectedDataSources::test_expected_default_network_sources_found PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::ExpectedDataSources::test_expected_nondefault_network_sources_found PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::TestDataSourceInvariants::test_data_sources_have_valid_network_config_sources PASSED [ 48%]
> tests/unittests/test_datasource/test_common.py::TestDataSourceInvariants::test_expected_dsname_defined PASSED [ 48%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_ec2_map PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_ec2_remap PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_os_map PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dev_os_remap PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_dir_valid PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_ec2_metadata PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_find_candidates PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_pubkeys_v2 PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_bad_json_metadata PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_missing PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_no_configdrive PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_seed_dir_valid_extra PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestConfigDriveDataSource::test_subplatform_config_drive_when_starts_with_dev PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_config_conversion_dhcp6 PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_config_conversions PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_config_is_converted PASSED [ 49%]
> tests/unittests/test_datasource/test_configdrive.py::TestNetJson::test_network_data_is_found PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_bond_conversion PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_conversion_fills_names PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_conversion_with_route PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_conversion_with_tap PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_convert_raises_value_error_on_missing_name PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_convert_reads_system_prefers_name PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_mac_addrs_can_be_upper_case PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_unknown_device_types_accepted PASSED [ 50%]
> tests/unittests/test_datasource/test_configdrive.py::TestConvertNetworkData::test_vlan PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestDataSourceDigitalOcean::test_metadata PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestDataSourceDigitalOcean::test_multiple_ssh_keys PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestDataSourceDigitalOcean::test_returns_false_not_on_docean PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_convert_without_private PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_correct_gateways_defined PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_networking_defined PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_private_interface_defined PASSED [ 50%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_anchor_ipv4 PASSED [ 51%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_defined PASSED [ 51%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_ipv4 PASSED [ 51%]
> tests/unittests/test_datasource/test_digitalocean.py::TestNetworkConvert::test_public_interface_ipv6 PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_aws_inaccessible_imds_service_fails_with_retries PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_aws_token_403_fails_without_retries FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_aws_token_redacted FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_classic_instance_false FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_classic_instance_true FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_get_instance_id_refreshes_identity_on_upgrade FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_local_performs_dhcp_on_non_bsd FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_local_returns_false_on_bsd PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_ec2_local_returns_false_on_non_aws PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_cached_property_refreshed_on_upgrade FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_is_cached_in_datasource PASSED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_returns_version_2_network_data FAILED [ 51%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_secondary_private_ips FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_network_config_property_set_dhcp4 FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_unknown_platform_with_strict_false FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_unknown_platform_with_strict_true PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_valid_platform_with_strict_false FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestEc2::test_valid_platform_with_strict_true FAILED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestGetSecondaryAddresses::test_invalid_ipv4_ipv6_cidr_metadata_logged_with_defaults PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestGetSecondaryAddresses::test_md_with_no_secondary_addresses PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestGetSecondaryAddresses::test_md_with_secondary_v4_and_v6_addresses PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_gets_macs_from_get_interfaces_by_mac PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_absent_dhcp4 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_dhcp4_and_dhcp6 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_local_v4_and_v6 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_multiple_nics PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_handles_only_dhcp6 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_local_only_dhcp4 PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TestConvertEc2MetadataNetworkConfig::test_convert_ec2_metadata_network_config_skips_absent_macs PASSED [ 52%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_e24cloud PASSED [ 53%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_e24cloud_negative PASSED [ 53%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_zstack PASSED [ 53%]
> tests/unittests/test_datasource/test_ec2.py::TesIdentifyPlatform::test_identify_zstack_full_domain_only PASSED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_activate_removes_set_passwords_semaphore PASSED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_get_data FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_get_data_no_password FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_get_data_saved_password FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_non_viable_platform PASSED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_password FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_password_empty FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_password_saved FAILED [ 53%]
> tests/unittests/test_datasource/test_exoscale.py::TestDatasourceExoscale::test_read_metadata_when_password_server_unreachable FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_block_project_ssh_keys_override FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_cloudinit_ssh_keys FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_connection FAILED [ 53%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_default_user_ssh_keys FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_get_data_returns_false_if_not_on_gce PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_has_expired PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_instance_ssh_keys_override FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_metadata FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_metadata_encoding FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_metadata_partial FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_missing_required_keys_return_false FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_no_ssh_keys_metadata FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_only_last_part_of_zone_used_for_availability_zone FAILED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_parse_public_keys_non_ascii PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_publish_host_keys PASSED [ 54%]
> tests/unittests/test_datasource/test_gce.py::TestDataSourceGCE::test_userdata_no_encoding FAILED [ 54%]
> tests/unittests/test_datasource/test_hetzner.py::TestDataSourceHetzner::test_not_on_hetzner_returns_false PASSED [ 54%]
> tests/unittests/test_datasource/test_hetzner.py::TestDataSourceHetzner::test_read_data PASSED [ 54%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_os_code PASSED [ 54%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_os_code_must_match_uuid PASSED [ 54%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_template_live_metadata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_template_prov_metadata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestGetIBMPlatform::test_id_template_prov_nodata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_os_code_live PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_os_code_live_no_userdata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_provisioning_md PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_provisioning_no_metadata PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_provisioning_not_ibm PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestReadMD::test_template_live PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_and_log_no_reference PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_only PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_with_new_log PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_config_with_old_log PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestIsIBMProvisioning::test_no_config PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestDataSourceIBMCloud::test_get_data_false PASSED [ 55%]
> tests/unittests/test_datasource/test_ibmcloud.py::TestDataSourceIBMCloud::test_get_data_processes_read_md PASSED [ 55%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_invalid PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_missing PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_none PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_valid PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_dir_valid_extra PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_url_valid PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestMAASDataSource::test_seed_url_vendor_data_dict PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetOauthHelper::test_all_required PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetOauthHelper::test_other_fields_not_passed_through PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetIdHash::test_v1_expected PASSED [ 56%]
> tests/unittests/test_datasource/test_maas.py::TestGetIdHash::test_v1_extra_fields_are_ignored PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_lowercase_label PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_lowercase_label_search_uppercase PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_uppercase_label PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_config_uppercase_label_search_uppercase PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_fs_label PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_config PASSED [ 56%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_config_over_interfaces PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_config_with_toplevel_network PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_metadata_network_interfaces PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_no_datasource_expected PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_get_devices_freebsd PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_no_vendordata PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_seed_dir_non_lxd_platform_is_nocloud PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_seed_dir_on_lxd PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_nocloud_seed_with_vendordata PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestNoCloudDataSource::test_seed_in_config PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestParseCommandLineData::test_parse_cmdline_data_none PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestParseCommandLineData::test_parse_cmdline_data_valid PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_no_remove_if_missing_config_or_version PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_no_remove_if_non_dict PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_no_remove_if_other_keys PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_remove_with_config_disabled PASSED [ 57%]
> tests/unittests/test_datasource/test_nocloud.py::TestMaybeRemoveToplevelNetwork::test_should_remove_safely PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_context_parser FAILED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_find_candidates PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data_broken_contextdisk PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data_invalid_identity PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_get_data_non_contextdisk PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_hostname PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_network_interfaces PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_broken_context PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_empty1_context FAILED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_empty2_context FAILED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_seed_dir_non_contextdisk PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_ssh_key PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_base64_encoding PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_encoding_required_for_decode PASSED [ 58%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaDataSource::test_user_data_plain PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_context_devname PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_eth0 PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_eth0_override PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_eth0_v4v6_override PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_dns PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_gateway PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_gateway6 PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_ipv6address PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_gen_conf_mtu PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_emptycontext PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_nonecontext PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_withdefaultvalue PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_field_withdefaultvalue_emptycontext PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_gateway PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_gateway6 PASSED [ 59%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6 PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_dual PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_prefix PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_prefix_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip6_ula PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_ip_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_mask PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_mask_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_mtu PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_nameservers PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_network PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_get_network_emptystring PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestOpenNebulaNetwork::test_multiple_nics PASSED [ 60%]
> tests/unittests/test_datasource/test_opennebula.py::TestParseShellConfig::test_no_seconds FAILED [ 60%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_bad_datasource_meta FAILED [ 60%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_bad_metadata FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_bad_uuid FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_datasource FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_disabled_datasource PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_local_datasource FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_metadata_invalid FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_network_config_cached PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_network_config_disabled_by_datasource_config PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_network_config_from_network_json PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_no_datasource PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_no_ec2 FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_successful FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_userdata_empty FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_vendordata_empty FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_vendordata_invalid FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestOpenStackDataSource::test_wb__crawl_metadata_does_not_persist FAILED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_ci_dict PASSED [ 61%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_ci_list PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_ci_string PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_dict_no_ci PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_list PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_none PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestVendorDataLoading::test_vd_load_string PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_by_proc_1_environ PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_intel_product_name_compute PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_non_intel_x86 PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_opentelekomcloud_chassis_asset_tag PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_oraclecloud_chassis_asset_tag PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_detect_openstack_sapccloud_chassis_asset_tag PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestDetectOpenStack::test_not_detect_openstack_intel_x86_ec2 PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestMetadataReader::test__find_working_version FAILED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestMetadataReader::test__find_working_version_uses_latest PASSED [ 62%]
> tests/unittests/test_datasource/test_openstack.py::TestMetadataReader::test_read_v2_os_ocata FAILED [ 62%]
> tests/unittests/test_datasource/test_ovf.py::TestReadOvfEnv::test_with_b64_userdata PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestReadOvfEnv::test_with_no_userdata PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestReadOvfEnv::test_with_non_b64_userdata PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestMarkerFiles::test_false_when_markerid_none PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestMarkerFiles::test_marker_file_setup PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestMarkerFiles::test_markerid_file_exist PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_cust_script_disabled PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_false_on_none_dmi_data PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_no_vmware_customization_disabled PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_non_vmware_seed_platform_info PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_vmware_customization_disabled PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestDatasourceOVF::test_get_data_vmware_seed_platform_info PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_find_already_mounted PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_find_already_mounted_matches_kname PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_find_already_mounted_skips_non_iso9660 PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_false_on_multi_dir_paths PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_non_string_exception PASSED [ 63%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_none PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_true_on_hd_partitions PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_true_on_valid_relative_paths PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_maybe_cdrom_device_true_on_xvd_partitions PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_called_on_blkdevs_with_iso9660 PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_called_on_blkdevs_with_iso9660_check_regex PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_called_require_iso_false PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportIso9660::test_mount_cb_not_called_no_matches PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_found_when_guestinfo_present PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_notfound_and_warns_on_unexpected_exit_code PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_notfound_if_no_content_but_exit_zero PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_notfound_on_exit_code_1 PASSED [ 64%]
> tests/unittests/test_datasource/test_ovf.py::TestTransportVmwareGuestinfo::test_without_vmware_rpctool_returns_notfound PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_continue_on_arping_error PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_generate_network_config PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_gratuitous_arp_run_standard_arping PASSED [ 64%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_handle_rhel_like_arping PASSED [ 65%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_seed_read_user_data_callback_empty_file PASSED [ 65%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_seed_read_user_data_callback_userdata PASSED [ 65%]
> tests/unittests/test_datasource/test_rbx.py::TestRbxDataSource::test_seed_read_user_data_callback_valid_disk PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_not_on_scaleway PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_on_scaleway_cmdline PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_on_scaleway_dmi PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestOnScaleway::test_on_scaleway_var_run_scaleway PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_metadata_404 FAILED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_metadata_ok FAILED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_metadata_rate_limit FAILED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_cached_none PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_existing PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_ipv6_ok PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_ok PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_network_config_unset PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_both PASSED [ 65%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_empty PASSED [ 66%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_only_conf PASSED [ 66%]
> tests/unittests/test_datasource/test_scaleway.py::TestDataSourceScaleway::test_ssh_keys_only_tags PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_default_ephemeral PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_default_vendor_data PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_disable_iptables_flag PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_hostname PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_hostname_b64 PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_hostname_if_no_sdc_hostname PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_motd_sys_info PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_no_base64 PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_override_disk_aliases PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_platform_info PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_reconfig_network_on_boot PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_root_keys PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_scripts_shebang_not_added PASSED [ 66%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_scripts_shebanged PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_hostname_if_no_hostname PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_nics PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_scripts PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_sdc_uuid_if_no_hostname_or_sdc_hostname PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_userdata PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_userdata_removed PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_uuid PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestSmartOSDataSource::test_vendor_data_not_default PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestIdentifyFile::test_file_happy_path PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestIdentifyFile::test_returns_none_on_error PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_flush_failure PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_flush_many_timeouts PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_base64_encodes_argument PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_calculates_length_correctly PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_checksums_correctly PASSED [ 67%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_line_starts_with_v2 PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_reads_a_line PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_returns_None_if_value_not_found PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_returns_valid_value PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_throws_exception_for_incorrect_crc PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_throws_exception_for_incorrect_length PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_throws_exception_for_request_id_mismatch PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_uses_appropriate_request_id PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_uses_get_command PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_uses_random_number_for_request_id PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_writes_a_single_line PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_get_metadata_writes_bytes PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_list_metadata_returns_empty_list_if_no_customer_metadata PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_list_metadata_returns_list PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_negotiate PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_negotiate_bad_response PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_negotiate_short_response PASSED [ 68%]
> tests/unittests/test_datasource/test_smartos.py::TestJoyentMetadataClient::test_serial_open_transport PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_alt PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_both_ipv4_ipv6 PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_dhcp PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_multi_ip PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_simple_multi_ipv6 PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_convert_with_dns PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_gateways_not_on_all_nics PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestNetworkConversion::test_routes_on_all_nics PASSED [ 69%]
> tests/unittests/test_datasource/test_smartos.py::TestSerialConcurrency::test_all_keys SKIPPED [ 69%]
> tests/unittests/test_distros/test_arch.py::TestArch::test_get_distro PASSED [ 69%]
> tests/unittests/test_distros/test_arch.py::TestRenderNetwork::test_basic_static PASSED [ 69%]
> tests/unittests/test_distros/test_bsd_utils.py::TestBsdUtils::test_get_rc_config_value PASSED [ 69%]
> tests/unittests/test_distros/test_bsd_utils.py::TestBsdUtils::test_set_rc_config_value PASSED [ 69%]
> tests/unittests/test_distros/test_bsd_utils.py::TestBsdUtils::test_set_rc_config_value_unchanged PASSED [ 69%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_basic PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_groups_with_whitespace_string PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_user_with_ssh_redirect_user_does_not_disable_auth_keys PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_user_with_ssh_redirect_user_no_cloud_keys PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_create_user_with_ssh_redirect_user_with_cloud_keys PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_explicit_no_home_false PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_explicit_sudo_false PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_group_added PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_lock_raises_runtime_if_no_commands PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_lock_with_passwd_if_available PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_lock_with_usermod_if_no_passwd PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_no_home PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_only_new_group_added PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_set_password PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_setup_ssh_authorized_keys_with_integer PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_setup_ssh_authorized_keys_with_list PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_setup_ssh_authorized_keys_with_string PASSED [ 70%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_system_user PASSED [ 71%]
> tests/unittests/test_distros/test_create_users.py::TestCreateUser::test_unlocked PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_falseish_locale_raises_valueerror PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_no_regen_on_c_utf8 PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_no_rerun PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_if_different PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_if_no_file PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_on_mismatched_keys PASSED [ 71%]
> tests/unittests/test_distros/test_debian.py::TestDebianApplyLocale::test_rerun_on_unset_system_locale PASSED [ 71%]
> tests/unittests/test_distros/test_freebsd.py::TestDeviceLookUp::test_find_freebsd_part_gpt PASSED [ 71%]
> tests/unittests/test_distros/test_freebsd.py::TestDeviceLookUp::test_find_freebsd_part_label PASSED [ 71%]
> tests/unittests/test_distros/test_freebsd.py::TestDeviceLookUp::test_get_path_dev_freebsd_label PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_arch_package_mirror_info_known PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_arch_package_mirror_info_unknown PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_expire_passwd_freebsd_uses_pw_command PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_expire_passwd_uses_chpasswd PASSED [ 71%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_locale_rhel PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_locale_ubuntu PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_package_mirror_info_az_ec2 PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_package_mirror_info_az_non_ec2 PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_get_package_mirror_info_none PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_append PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_new PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_rules PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_sudoers_ensure_rules_list PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_systemd_in_use PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_systemd_not_in_use PASSED [ 72%]
> tests/unittests/test_distros/test_generic.py::TestGenericDistro::test_systemd_symlink PASSED [ 72%]
> tests/unittests/test_distros/test_hostname.py::TestHostnameHelper::test_adjust_hostname PASSED [ 72%]
> tests/unittests/test_distros/test_hostname.py::TestHostnameHelper::test_no_adjust_hostname PASSED [ 72%]
> tests/unittests/test_distros/test_hostname.py::TestHostnameHelper::test_parse_same PASSED [ 72%]
> tests/unittests/test_distros/test_hosts.py::TestHostsHelper::test_add PASSED [ 72%]
> tests/unittests/test_distros/test_hosts.py::TestHostsHelper::test_del PASSED [ 72%]
> tests/unittests/test_distros/test_hosts.py::TestHostsHelper::test_parse PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroFreeBSD::test_apply_network_config_freebsd_ifrename PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroFreeBSD::test_apply_network_config_freebsd_nameserver PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroFreeBSD::test_apply_network_config_freebsd_standard PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuEni::test_apply_network_config_eni_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuEni::test_apply_network_config_ipv6_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuNetplan::test_apply_network_config_v1_ipv6_to_netplan_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuNetplan::test_apply_network_config_v1_to_netplan_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroUbuntuNetplan::test_apply_network_config_v2_passthrough_ub PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroRedhat::test_apply_network_config_ipv6_rh PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroRedhat::test_apply_network_config_rh PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroOpensuse::test_apply_network_config_ipv6_opensuse PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroOpensuse::test_apply_network_config_opensuse PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroArch::test_apply_network_config_v1_with_netplan PASSED [ 73%]
> tests/unittests/test_distros/test_netconfig.py::TestNetCfgDistroArch::test_apply_network_config_v1_without_netplan PASSED [ 73%]
> tests/unittests/test_distros/test_opensuse.py::TestopenSUSE::test_get_distro PASSED [ 73%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_local_domain PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_nameservers PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_parse_same PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_search_domains PASSED [ 74%]
> tests/unittests/test_distros/test_resolv.py::TestResolvHelper::test_write_works PASSED [ 74%]
> tests/unittests/test_distros/test_sles.py::TestSLES::test_get_distro PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_add_new PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_adjust PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_empty PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_no_adjust_shell PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_no_change PASSED [ 74%]
> tests/unittests/test_distros/test_sysconfig.py::TestSysConfHelper::test_parse_shell_vars PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_add_user_on_snappy_system PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_basic_groups PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_create_snap_user PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_create_snap_user_known PASSED [ 74%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_csv_groups PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_group_dict PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_member_groups PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_more_groups PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_default PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_default_additional PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_extract PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_dict_trans PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_old_user PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple_csv PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple_dict PASSED [ 75%]
> tests/unittests/test_distros/test_user_data_normalize.py::TestUGNormalize::test_users_simple_dict_no PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testConfigEmailIndex PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testHeaderEmailIndex PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testIndexes PASSED [ 75%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testMultiEmailIndex PASSED [ 76%]
> tests/unittests/test_filters/test_launch_index.py::TestLaunchFilter::testNoneIndex PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_apt_all_proxy_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_apt_http_proxy_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_apt_proxy_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_config_deleted PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_config_replaced PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_config_written PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_proxy_deleted PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestAptProxyConfig::test_proxy_replaced PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestConversion::test_convert_with_apt_mirror PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestConversion::test_convert_with_apt_mirror_as_empty_string PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_conf_v1.py::TestConversion::test_no_old_content PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_source_list_debian PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_source_list_ubuntu PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_srcl_custom PASSED [ 76%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_srcl_debian_mirrorfail PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py::TestAptSourceConfigSourceList::test_apt_v1_srcl_ubuntu_mirrorfail PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_centos PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_debian PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_psm PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_ubuntu PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_source_list_ubuntu_snappy PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py::TestAptSourceConfigSourceList::test_apt_v3_srcl_custom PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_dict PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_dict_tri PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_nofn PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_basic_tri PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_key PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_key_nofn PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid_nofn PASSED [ 77%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid_real PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyid_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyidonly PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_keyonly PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_longkeyid_ks_real PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_longkeyid_real PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_ppa PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_ppa_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace_dict_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace_nofn PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_apt_src_replace_tri PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_convert_to_new_format PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_convert_to_new_format_collision PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v1.py::TestAptSourceConfig::test_convert_to_new_format_dict_collision PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_disable_suites PASSED [ 78%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_get_def_mir_non_intel_no_arch PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_get_default_mirrors_non_intel_with_arch PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_list_rename PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_list_rename_non_slash PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_arches PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_arches_default PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_arches_sysdefault PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_default PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_search PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_search_dns SKIPPED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_mirror_search_many2 PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_proxy PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_basic PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_basic_tri PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_key PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid PASSED [ 79%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid_keyserver PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid_real PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyid_tri PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyidonly PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_keyonly PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_longkeyid_ks_real PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_longkeyid_real PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_ppa PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_ppa_tri PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_replace PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_replace_fn PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_src_replace_tri PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_apt_v3_url_resolvable PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestAptSourceConfig::test_disable_suites_blank_lines PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_dpkg_reconfigure_does_reconfigure PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_dpkg_reconfigure_not_done_if_no_cleaners PASSED [ 80%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_dpkg_reconfigure_not_done_on_no_data PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_no_set_sel_if_none_to_set PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_reconfigure_if_intersection PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_reconfigure_if_no_intersection PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_set_sel_appends_newline_if_absent PASSED [ 81%]
> tests/unittests/test_handler/test_handler_apt_source_v3.py::TestDebconfSelections::test_set_sel_call_has_expected_input PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_creates_and_runs_bootcmd_script_with_instance_id PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_invalid_command_set PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_runs_bootcmd_script_with_error PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_schema_validation_warns_non_array_item_type PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_schema_validation_warns_non_array_type PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestBootcmd::test_handler_skip_if_no_bootcmd PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestSchema::test_duplicates_are_fine_array_array PASSED [ 81%]
> tests/unittests/test_handler/test_handler_bootcmd.py::TestSchema::test_duplicates_are_fine_array_string PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestNoConfig::test_no_config PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_correct_order_for_remove_then_add PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_empty_trusted_list PASSED [ 81%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_multiple_trusted PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_no_remove_defaults_if_false PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_no_trusted_list PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_remove_default_ca_certs PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestConfig::test_single_trusted PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_multiple_certs PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_no_certs_in_list PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_single_cert_no_trailing_cr PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestAddCaCerts::test_single_cert_trailing_cr PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestUpdateCaCerts::test_commands PASSED [ 82%]
> tests/unittests/test_handler/test_handler_ca_certs.py::TestRemoveDefaultCaCerts::test_commands PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestInstallChefOmnibus::test_install_chef_from_omnibus_has_omnibus_version FAILED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestInstallChefOmnibus::test_install_chef_from_omnibus_retries_url PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestInstallChefOmnibus::test_install_chef_from_omnibus_runs_chef_url_content FAILED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_basic_config PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_firstboot_json PASSED [ 82%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_no_config PASSED [ 83%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_template_deletes PASSED [ 83%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_validation_cert_and_validation_key PASSED [ 83%]
> tests/unittests/test_handler/test_handler_chef.py::TestChef::test_validation_cert_with_system PASSED [ 83%]
> tests/unittests/test_handler/test_handler_debug.py::TestDebug::test_debug_no_write PASSED [ 83%]
> tests/unittests/test_handler/test_handler_debug.py::TestDebug::test_debug_write PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestIsDiskUsed::test_multiple_child_nodes_returns_true PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestIsDiskUsed::test_one_child_nodes_and_no_fs_returns_false PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestIsDiskUsed::test_valid_filesystem_returns_true PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_1024_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_2048_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_4096_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetMbrHddSize::test_size_for_512_byte_sectors PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_half_and_half PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_single_partition_using_boolean PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_single_partition_using_list PASSED [ 83%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestGetPartitionMbrLayout::test_thirds_with_different_partition_type PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestUpdateFsSetupDevices::test_dotted_devname PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestUpdateFsSetupDevices::test_dotted_devname_populates_partition PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestUpdateFsSetupDevices::test_regression_1634678 PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestMkfsCommandHandling::test_mkswap PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestMkfsCommandHandling::test_overwrite_and_extra_opts_without_cmd PASSED [ 84%]
> tests/unittests/test_handler/test_handler_disk_setup.py::TestMkfsCommandHandling::test_with_cmd PASSED [ 84%]
> tests/unittests/test_handler/test_handler_etc_hosts.py::TestHostsFile::test_write_etc_hosts_suse_localhost PASSED [ 84%]
> tests/unittests/test_handler/test_handler_etc_hosts.py::TestHostsFile::test_write_etc_hosts_suse_template PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestDisabled::test_mode_off PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_handle_with_no_growpart_entry PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_mode_auto_falls_back_to_gpart PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_mode_auto_prefers_growpart PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_no_resizers_auto_is_fine PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestConfig::test_no_resizers_mode_growpart_is_exception PASSED [ 84%]
> tests/unittests/test_handler/test_handler_growpart.py::TestResize::test_simple_devices PASSED [ 84%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_error_on_invalid_landscape_type PASSED [ 84%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_installs_client_and_creates_config_file PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_restarts_landscape_client PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_skips_empty_landscape_cloudconfig PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_writes_merged_client_config_file_with_defaults PASSED [ 85%]
> tests/unittests/test_handler/test_handler_landscape.py::TestLandscape::test_handler_writes_merged_provided_cloudconfig_with_defaults PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_locale_rhel_defaults_en_us_utf8 PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_locale_update_config_if_different_than_default PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_set_locale_sles PASSED [ 85%]
> tests/unittests/test_handler/test_handler_locale.py::TestLocale::test_set_locale_sles_default PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_existing PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_new_full PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_new_partial PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_cmd_none PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_existing PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_new_full PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_new_partial PASSED [ 85%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_debconf_none PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_init PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_lxd_install PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_no_init_does_nothing PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxd::test_no_lxd_does_nothing PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_device_removed_if_attach_true PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_did_init_false_does_not_delete PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_network_deleted_if_create_true PASSED [ 86%]
> tests/unittests/test_handler/test_handler_lxd.py::TestLxdMaybeCleanupDefault::test_network_other_than_default_not_deleted PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_basic_config PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_certificats_written PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_existing_config_is_saved PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestConfig::test_existing_updated PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mcollective.py::TestHandler::test_mcollective_install PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_disk_but_missing_partition_returns_none PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_disk_name_returns_full_path PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_full_disk_path_is_returned PASSED [ 86%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_meta_disk_is_returned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_meta_partition_is_returned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_existent_meta_partition_with_p_is_returned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_first_partition_returned_if_existent_disk_is_partitioned PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_missing_device_returns_none PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_missing_sys_returns_none PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_network_device_returns_network_device PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_nth_partition_returned_if_requested PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestSanitizeDevname::test_transformer_returning_none_returns_none PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_fstab_alternate_swap_device_already_configured PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_fstab_no_swap_device PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_fstab_same_swap_device_already_configured PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_no_change_fstab_sets_needs_mount_all PASSED [ 87%]
> tests/unittests/test_handler/test_handler_mounts.py::TestFstabHandling::test_swap_integrity PASSED [ 87%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_defaults_pools_empty_lists_sles PASSED [ 87%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_distro_ntp_client_configs PASSED [ 87%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_no_ntpcfg_does_nothing PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_custom_client_overrides_installed_clients PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_distro_searches_all_preferred_clients PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_enabled_false PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_real_distro_ntp_templates PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_allows_empty_ntp_config PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_invalid_key_present PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_non_string_item_type PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_of_duplicates PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_schema_validation_warns_of_non_array_type PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_handler_timesyncd PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_install PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_install_no_op_with_empty_pkg_list PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_install_not_needed PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_rename_ntp_conf PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_rename_ntp_conf_skip_missing PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_system_config_overrides_distro_builtin_clients PASSED [ 88%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_the_whole_package PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_user_config_overrides_system_cfg PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_user_provided_config_template_only PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ntp_user_provided_config_with_template PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_opensuse_picks_chrony PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_reload_ntp_defaults PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_reload_ntp_systemd PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_snappy_system_picks_timesyncd PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_timesyncd_template PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_ubuntu_xenial_picks_ntp PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_user_cfg_ntp_client_auto_uses_distro_clients PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_write_ntp_config_template_defaults_pools_w_empty_lists PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestNtp::test_write_ntp_config_template_uses_ntp_conf_distro_no_servers PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_on_missing_keys PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_on_non_list_values PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_on_non_string_values PASSED [ 89%]
> tests/unittests/test_handler/test_handler_ntp.py::TestSupplementalSchemaValidation::test_error_requiring_either_template_or_template_name PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_condition_default_is_true PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_condition_null_raises PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_empty_mode PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_invalid_delay PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_invalid_mode PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_irrelevant_config PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_message_present PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_no_config PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_no_message PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_valid_delay PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestLoadPowerState::test_valid_modes PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_cmd_exit_nonzero_warns PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_cmd_exit_one_false PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_cmd_exit_zero_true PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_false_is_false PASSED [ 90%]
> tests/unittests/test_handler/test_handler_power_state.py::TestCheckCondition::test_true_is_true PASSED [ 90%]
> tests/unittests/test_handler/test_handler_puppet.py::TestAutostartPuppet::test_wb_autostart_puppet_updates_puppet_default PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestAutostartPuppet::test_wb_autostart_pupppet_enables_puppet_chkconfig PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestAutostartPuppet::test_wb_autostart_pupppet_enables_puppet_systemctl PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_empty_puppet_config_installs_puppet PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_installs_puppet_on_true PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_installs_puppet_version PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_starts_puppet_service PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_updates_puppet_conf PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_writes_csr_attributes_file PASSED [ 91%]
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_skips_missing_puppet_key_in_cloudconfig PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_can_skip_resize_ext PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_modern_zfsroot PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_noops_on_disabled PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_schema_validation_logs_invalid_resize_rootfs_value PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_warns_on_undiscoverable_root_path_in_commandline PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_warns_on_unknown_mount_info PASSED [ 91%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_handle_zfs_root PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_ext_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_ufs_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_xfs_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_resize_zfs_cmd_return PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_skip_ufs_resize PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestResizefs::test_skip_ufs_resize_roundup PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_no_root PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_startswith_dev PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_with_label PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_with_uuid PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestRootDevFromCmdline::test_rootdev_from_cmdline_with_root_without_dev_prefix PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_does_not_exist PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_does_not_exist_in_container PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_non_block PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_non_block_on_container PASSED [ 92%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_none_on_overlayroot PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_raises_oserror PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_returns_cmdline_root PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_warns_missing_cmdline_root PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_maybe_get_writable_device_path_zfs_freebsd PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_resize_btrfs_mount_is_ro PASSED [ 93%]
> tests/unittests/test_handler/test_handler_resizefs.py::TestMaybeGetDevicePathAsWritableBlock::test_resize_btrfs_mount_is_rw PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_legacy_defaults PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_legacy_full PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_new_configs PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestLoadConfig::test_new_defaults PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_multiline_content PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_multiple_files PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_repeat_def PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestApplyChanges::test_simple PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_invalid_multiple_colon PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_invalid_port PASSED [ 93%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_name_in_string PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_valid_ipv6 PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_valid_ipv6_with_port PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestParseRemotesLine::test_valid_port PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestRemotesToSyslog::test_header_footer PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestRemotesToSyslog::test_simple PASSED [ 94%]
> tests/unittests/test_handler/test_handler_rsyslog.py::TestRemotesToSyslog::test_with_empty_or_null PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_invalid_command_set PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_schema_validation_warns_non_array_item_type PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_schema_validation_warns_non_array_type PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_skip_if_no_runcmd PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestRuncmd::test_handler_write_valid_runcmd_schema_to_file PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestSchema::test_duplicates_are_fine_array_array PASSED [ 94%]
> tests/unittests/test_handler/test_handler_runcmd.py::TestSchema::test_duplicates_are_fine_array_string PASSED [ 94%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random PASSED [ 94%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_b64 PASSED [ 94%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_base64 PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_gz PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_gzip PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_metadata PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_append_random_unknown_encoding PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_file_in_environment_for_command PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_seed_command_and_required PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_seed_command_not_provided PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_seed_command_provided_and_available PASSED [ 95%]
> tests/unittests/test_handler/test_handler_seed_random.py::TestRandomSeed::test_unavailable_seed_command_and_required_raises_error PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_error_on_distro_set_hostname_errors PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_multiple_calls_skips_unchanged_hostname PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_write_hostname_debian PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_write_hostname_rhel PASSED [ 95%]
> tests/unittests/test_handler/test_handler_set_hostname.py::TestHostname::test_write_hostname_sles PASSED [ 95%]
> tests/unittests/test_handler/test_handler_spacewalk.py::TestSpacewalk::test_do_register PASSED [ 95%]
> tests/unittests/test_handler/test_handler_spacewalk.py::TestSpacewalk::test_is_registered PASSED [ 95%]
> tests/unittests/test_handler/test_handler_spacewalk.py::TestSpacewalk::test_not_is_registered PASSED [ 96%]
> tests/unittests/test_handler/test_handler_timezone.py::TestTimezone::test_set_timezone_sles PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFilesSchema::test_schema_validation_warns_missing_path PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFilesSchema::test_schema_validation_warns_non_string_type_for_files PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFilesSchema::test_schema_validation_warns_on_additional_undefined_propertes PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_all_decodings PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_append PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_handler_schema_validation_warns_non_array_type PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_simple PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestWriteFiles::test_yaml_binary PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_integer PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_invalid_octal_string_returns_default_and_warns PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_none_returns_default PASSED [ 96%]
> tests/unittests/test_handler/test_handler_write_files.py::TestDecodePerms::test_valid_octal_string PASSED [ 96%]
> tests/unittests/test_handler/test_handler_yum_add_repo.py::TestConfig::test_bad_config PASSED [ 96%]
> tests/unittests/test_handler/test_handler_yum_add_repo.py::TestConfig::test_write_config PASSED [ 96%]
> tests/unittests/test_handler/test_handler_yum_add_repo.py::TestConfig::test_write_config_array PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_bad_repo_config PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_config_write PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_config_write_skip_configdir PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_empty_config_section_no_new_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_empty_config_value_no_new_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_handler_full_setup PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_no_config_section_no_new_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_no_repo_data PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_write_repo PASSED [ 97%]
> tests/unittests/test_handler/test_handler_zypper_add_repo.py::TestConfig::test_write_repos PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::GetSchemaTest::test_get_schema_coalesces_known_schema PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::GetSchemaTest::test_get_schema_returns_global_when_set PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::SchemaValidationErrorTest::test_schema_validation_error_expects_schema_errors PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_emits_warning_on_missing_jsonschema PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_honors_formats PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_non_strict_emits_warnings PASSED [ 97%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigSchemaTest::test_validateconfig_schema_strict_raises_errors PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_absent_file PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_invalid_header PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_non_yaml_parser_error PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_error_on_non_yaml_scanner_error PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::ValidateCloudConfigFileTest::test_validateconfig_file_sctrictly_validates_schema PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_enum_types PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_multiple_types PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_nested_oneof_property_types PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_handles_string_examples PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_raises_key_errors PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::GetSchemaDocTest::test_get_schema_doc_returns_restructured_text PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::AnnotatedCloudconfigFileTest::test_annotated_cloudconfig_file_annotates_separate_line_items PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::AnnotatedCloudconfigFileTest::test_annotated_cloudconfig_file_no_schema_errors PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::AnnotatedCloudconfigFileTest::test_annotated_cloudconfig_file_schema_annotates_and_adds_footer PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_absent_config_file PASSED [ 98%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_missing_args PASSED [ 99%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_prints_docs PASSED [ 99%]
> tests/unittests/test_handler/test_schema.py::MainTest::test_main_validates_config_file PASSED [ 99%]
> tests/unittests/test_handler/test_schema.py::CloudTestsIntegrationTest::test_all_integration_test_cloud_config_schema PASSED [ 99%]
> tests/unittests/test_runs/test_merge_run.py::TestMergeRun::test_none_ds PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_forces_run_via_unverified_modules PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_populates_var_lib_cloud PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_run_with_no_config_modules PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_runs_modules_which_distros_all PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_runs_modules_which_do_not_define_distros PASSED [ 99%]
> tests/unittests/test_runs/test_simple_run.py::TestSimpleRun::test_none_ds_skips_modules_which_define_unmatched_distros PASSED [ 99%]
> tests/unittests/test_vmware/test_custom_script.py::TestVmwareCustomScript::test_execute_post_cust PASSED [ 99%]
> tests/unittests/test_vmware/test_custom_script.py::TestVmwareCustomScript::test_prepare_custom_script PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_get_tools_config_internal_exception PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_get_tools_config_normal PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_get_tools_config_not_installed PASSED [ 99%]
> tests/unittests/test_vmware/test_guestcust_util.py::TestGuestCustUtil::test_set_gc_status PASSED [100%]
> 
> =================================== FAILURES ===================================
> _____________________ TestConsumeUserDataHttp.test_include _____________________
> 
> self = <tests.unittests.test_data.TestConsumeUserDataHttp testMethod=test_include>
> mock_sleep = <MagicMock name='sleep' id='140126866054160'>
> 
>     @mock.patch('cloudinit.url_helper.time.sleep')
>     def test_include(self, mock_sleep):
>         """Test #include."""
>         included_url = 'http://hostname/path'
>         included_data = '#cloud-config\nincluded: true\n'
>         httpretty.register_uri(httpretty.GET, included_url, included_data)
>     
>         blob = '#include\n%s\n' % included_url
>     
>         self.reRoot()
>         ci = stages.Init()
>         ci.datasource = FakeDataSource(blob)
>         ci.fetch()
> >       ci.consume_data()
> 
> tests/unittests/test_data.py:621: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/stages.py:551: in consume_data
>     self._consume_userdata(frequency)
> cloudinit/stages.py:622: in _consume_userdata
>     user_data_msg = self.datasource.get_userdata(True)
> cloudinit/sources/__init__.py:385: in get_userdata
>     self.userdata = self.ud_proc.process(self.get_userdata_raw())
> cloudinit/user_data.py:83: in process
>     self._process_msg(convert_string(blob), accumulating_msg)
> cloudinit/user_data.py:147: in _process_msg
>     self._do_include(payload, append_msg)
> cloudinit/user_data.py:226: in _do_include
>     resp = read_file_or_url(include_url, timeout=5, retries=10,
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d3201220>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.ft_dqzdc/etc/cloud/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.ft_dqzdc/run/cloud-init/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:940 Attempting to load yaml from string of length 0 with allowed root types (<class 'dict'>,)
> DEBUG    cloudinit.util:util.py:945 loaded blob returned None, returning default.
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/11] open 'http://hostname/path' with {'url': 'http://hostname/path', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): hostname:80
> _________________ TestConsumeUserDataHttp.test_include_bad_url _________________
> 
> self = <tests.unittests.test_data.TestConsumeUserDataHttp testMethod=test_include_bad_url>
> mock_sleep = <MagicMock name='sleep' id='140126836106960'>
> 
>     @mock.patch('cloudinit.url_helper.time.sleep')
>     def test_include_bad_url(self, mock_sleep):
>         """Test #include with a bad URL."""
>         bad_url = 'http://bad/forbidden'
>         bad_data = '#cloud-config\nbad: true\n'
>         httpretty.register_uri(httpretty.GET, bad_url, bad_data, status=403)
>     
>         included_url = 'http://hostname/path'
>         included_data = '#cloud-config\nincluded: true\n'
>         httpretty.register_uri(httpretty.GET, included_url, included_data)
>     
>         blob = '#include\n%s\n%s' % (bad_url, included_url)
>     
>         self.reRoot()
>         ci = stages.Init()
>         ci.datasource = FakeDataSource(blob)
>         log_file = self.capture_log(logging.WARNING)
>         ci.fetch()
> >       ci.consume_data()
> 
> tests/unittests/test_data.py:644: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/stages.py:551: in consume_data
>     self._consume_userdata(frequency)
> cloudinit/stages.py:622: in _consume_userdata
>     user_data_msg = self.datasource.get_userdata(True)
> cloudinit/sources/__init__.py:385: in get_userdata
>     self.userdata = self.ud_proc.process(self.get_userdata_raw())
> cloudinit/user_data.py:83: in process
>     self._process_msg(convert_string(blob), accumulating_msg)
> cloudinit/user_data.py:147: in _process_msg
>     self._do_include(payload, append_msg)
> cloudinit/user_data.py:226: in _do_include
>     resp = read_file_or_url(include_url, timeout=5, retries=10,
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2645040>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.z38hc_7a/etc/cloud/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestConsumeUserDataHttp.z38hc_7a/run/cloud-init/cloud.cfg (quiet=False)
> DEBUG    cloudinit.util:util.py:940 Attempting to load yaml from string of length 0 with allowed root types (<class 'dict'>,)
> DEBUG    cloudinit.util:util.py:945 loaded blob returned None, returning default.
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/11] open 'http://bad/forbidden' with {'url': 'http://bad/forbidden', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): bad:80
> _____________________ TestEc2Util.test_metadata_fetch_bdm ______________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_bdm>
> 
>     def test_metadata_fetch_bdm(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'block-device-mapping/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'block-device-mapping/'),
>                         status=200,
>                         body="\n".join(['ami', 'ephemeral0']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'block-device-mapping/ami'),
>                         status=200,
>                         body="sdb")
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url,
>                                        'block-device-mapping/ephemeral0'),
>                         status=200,
>                         body="sdc")
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:128: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> _____________________ TestEc2Util.test_metadata_fetch_key ______________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_key>
> 
>     def test_metadata_fetch_key(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'public-keys/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'public-keys/'),
>                         status=200, body='0=my-public-key')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'public-keys/0/openssh-key'),
>                         status=200, body='ssh-rsa AAAA.....wZEf my-public-key')
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:76: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> ___________________ TestEc2Util.test_metadata_fetch_no_keys ____________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_no_keys>
> 
>     def test_metadata_fetch_no_keys(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'ami-launch-index']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'ami-launch-index'),
>                         status=200, body='1')
>         md = eu.get_instance_metadata(self.VERSION, retries=0)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:56: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> _________________ TestEc2Util.test_metadata_fetch_with_2_keys __________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_fetch_with_2_keys>
> 
>     def test_metadata_fetch_with_2_keys(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['hostname',
>                                         'instance-id',
>                                         'public-keys/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'hostname'),
>                         status=200, body='ec2.fake.host.name.com')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='123')
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'public-keys/'),
>                         status=200,
>                         body="\n".join(['0=my-public-key', '1=my-other-key']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'public-keys/0/openssh-key'),
>                         status=200, body='ssh-rsa AAAA.....wZEf my-public-key')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'public-keys/1/openssh-key'),
>                         status=200, body='ssh-rsa AAAA.....wZEf my-other-key')
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['hostname'], 'ec2.fake.host.name.com')
> E       KeyError: 'hostname'
> 
> tests/unittests/test_ec2_util.py:100: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> ______________ TestEc2Util.test_metadata_no_security_credentials _______________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_metadata_no_security_credentials>
> 
>     def test_metadata_no_security_credentials(self):
>         base_url = 'http://169.254.169.254/%s/meta-data/' % (self.VERSION)
>         hp.register_uri(hp.GET, base_url, status=200,
>                         body="\n".join(['instance-id',
>                                         'iam/']))
>         hp.register_uri(hp.GET, uh.combine_url(base_url, 'instance-id'),
>                         status=200, body='i-0123451689abcdef0')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/'),
>                         status=200,
>                         body="\n".join(['info/', 'security-credentials/']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/info/'),
>                         status=200,
>                         body='LastUpdated')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/info/LastUpdated'),
>                         status=200, body='2016-10-27T17:29:39Z')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url, 'iam/security-credentials/'),
>                         status=200,
>                         body='ReadOnly/')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(base_url,
>                                        'iam/security-credentials/ReadOnly/'),
>                         status=200,
>                         body="\n".join(['LastUpdated', 'Expiration']))
>         hp.register_uri(hp.GET,
>                         uh.combine_url(
>                             base_url,
>                             'iam/security-credentials/ReadOnly/LastUpdated'),
>                         status=200, body='2016-10-27T17:28:17Z')
>         hp.register_uri(hp.GET,
>                         uh.combine_url(
>                             base_url,
>                             'iam/security-credentials/ReadOnly/Expiration'),
>                         status=200, body='2016-10-28T00:00:34Z')
>         md = eu.get_instance_metadata(self.VERSION, retries=0, timeout=0.1)
> >       self.assertEqual(md['instance-id'], 'i-0123451689abcdef0')
> E       KeyError: 'instance-id'
> 
> tests/unittests/test_ec2_util.py:173: KeyError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/latest/meta-data/' with {'url': 'http://169.254.169.254/latest/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.1, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/latest/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> _______________________ TestEc2Util.test_userdata_fetch ________________________
> 
> self = <tests.unittests.test_ec2_util.TestEc2Util testMethod=test_userdata_fetch>
> 
>     def test_userdata_fetch(self):
>         hp.register_uri(hp.GET,
>                         'http://169.254.169.254/%s/user-data' % (self.VERSION),
>                         body='stuff',
>                         status=200)
>         userdata = eu.get_instance_userdata(self.VERSION)
> >       self.assertEqual('stuff', userdata.decode('utf-8'))
> E       AttributeError: 'str' object has no attribute 'decode'
> 
> tests/unittests/test_ec2_util.py:20: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/latest/user-data' with {'url': 'http://169.254.169.254/latest/user-data', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching userdata from url http://169.254.169.254/latest/user-data
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching userdata from url http://169.254.169.254/latest/user-data
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 157, in get_instance_userdata
>     response = url_helper.read_file_or_url(
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> __________________ TestAliYunDatasource.test_with_mock_server __________________
> 
> self = <tests.unittests.test_datasource.test_aliyun.TestAliYunDatasource testMethod=test_with_mock_server>
> m_is_aliyun = <MagicMock name='_is_aliyun' id='140126840142624'>
> 
>     @mock.patch("cloudinit.sources.DataSourceAliYun._is_aliyun")
>     def test_with_mock_server(self, m_is_aliyun):
>         m_is_aliyun.return_value = True
>         self.regist_default_server()
>         ret = self.ds.get_data()
> >       self.assertEqual(True, ret)
> E       AssertionError: True != False
> 
> tests/unittests/test_datasource/test_aliyun.py:137: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceEc2:DataSourceEc2.py:90 strict_mode: warn, cloud_name=aliyun cloud_platform=ec2
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://100.100.100.200 took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://100.100.100.200/2016-01-01/meta-data/instance-id' with {'url': 'http://100.100.100.200/2016-01-01/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 1.0} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 100.100.100.200:80
> WARNING  cloudinit.sources.DataSourceEc2:url_helper.py:447 Calling 'http://100.100.100.200/2016-01-01/meta-data/instance-id' failed [0/1s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> CRITICAL cloudinit.sources.DataSourceEc2:DataSourceEc2.py:295 Giving up on md from ['http://100.100.100.200/2016-01-01/meta-data/instance-id'] after 1 seconds
> DEBUG    cloudinit.sources.DataSourceEc2:util.py:2635 Crawl of metadata service took 1.004 seconds
> _ TestGetMetadataFromIMDS.test_get_metadata_from_imds_empty_when_no_imds_present _
> 
> self = <tests.unittests.test_datasource.test_azure.TestGetMetadataFromIMDS testMethod=test_get_metadata_from_imds_empty_when_no_imds_present>
> m_net_is_up = <MagicMock name='is_up' id='140126839982736'>
> m_sleep = <MagicMock name='sleep' id='140126835250656'>
> 
>     @mock.patch('cloudinit.url_helper.time.sleep')
>     @mock.patch(MOCKPATH + 'net.is_up')
>     def test_get_metadata_from_imds_empty_when_no_imds_present(
>             self, m_net_is_up, m_sleep):
>         """Return empty dict when IMDS network metadata is absent."""
>         httpretty.register_uri(
>             httpretty.GET,
>             dsaz.IMDS_URL + 'instance?api-version=2017-12-01',
>             body={}, status=404)
>     
>         m_net_is_up.return_value = True  # skips dhcp
>     
>         self.assertEqual({}, dsaz.get_metadata_from_imds('eth9', retries=2))
>     
>         m_net_is_up.assert_called_with('eth9')
> >       self.assertEqual([mock.call(1), mock.call(1)], m_sleep.call_args_list)
> E       AssertionError: [call(1), call(1)] != []
> 
> tests/unittests/test_datasource/test_azure.py:349: AssertionError
> _______________ TestEc2.test_aws_token_403_fails_without_retries _______________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_aws_token_403_fails_without_retries>
> 
>     def test_aws_token_403_fails_without_retries(self):
>         """Verify that 403s fetching AWS tokens are not retried."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md=None)
>         token_url = self.data_url('latest', data_item='api/token')
>         httpretty.register_uri(httpretty.PUT, token_url, body={}, status=403)
>         self.assertFalse(ds.get_data())
>         # Just one /latest/api/token request
>         logs = self.logs.getvalue()
>         failed_put_log = '"PUT /latest/api/token HTTP/1.1" 403 0'
>         expected_logs = [
>             'WARNING: Ec2 IMDS endpoint returned a 403 error. HTTP endpoint is'
>             ' disabled. Aborting.',
>             "WARNING: IMDS's HTTP endpoint is probably disabled",
>             failed_put_log
>         ]
>         for log in expected_logs:
> >           self.assertIn(log, logs)
> E           AssertionError: 'WARNING: Ec2 IMDS endpoint returned a 403 error. HTTP endpoint is disabled. Aborting.' not found in "DEBUG: strict_mode: false, cloud_name=aws cloud_platform=ec2\nDEBUG: detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}\nDEBUG: Resolving URL: http://169.254.169.254 took 0.000 seconds\nDEBUG: Resolving URL: http://instance-data.:8773 took 0.000 seconds\nDEBUG: Fetching Ec2 IMDSv2 API Token\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [0/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [1/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [2/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [3/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [4/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 1 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [5/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [7/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [9/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [11/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [13/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 2 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [15/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [18/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [21/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [24/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [27/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 3 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [30/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [34/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [38/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [42/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [46/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 4 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [50/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [55/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [60/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 50.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [65/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 49.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 49.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [70/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 5 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 44.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 44.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [75/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 38.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 38.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [81/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 32.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 32.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [87/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 26.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 26.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [93/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 20.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 20.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [99/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 6 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 14.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 14.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [105/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 7 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nDEBUG: Starting new HTTP connection (1): instance-data.:8773\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [112/120s]: unexpected error [No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).]\nDEBUG: Please wait 7 seconds while we wait to try again\nDEBUG: [0/1] open 'http://169.254.169.254/latest/api/token' with {'url': 'http://169.254.169.254/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nWARNING: Calling 'http://169.254.169.254/latest/api/token' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]\nDEBUG: [0/1] open 'http://instance-data.:8773/latest/api/token' with {'url': 'http://instance-data.:8773/latest/api/token', 'allow_redirects': True, 'method': 'PUT', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'X-aws-ec2-metadata-token-ttl-seconds': 'REDACTED'}} configuration\nWARNING: Calling 'http://instance-data.:8773/latest/api/token' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]\nDEBUG: Please wait 7 seconds while we wait to try again\nWARNING: IMDS's HTTP endpoint is probably disabled\nDEBUG: Crawl of metadata service took 126.235 seconds\n"
> 
> tests/unittests/test_datasource/test_ec2.py:611: AssertionError
> _______________________ TestEc2.test_aws_token_redacted ________________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_aws_token_redacted>
> 
>     def test_aws_token_redacted(self):
>         """Verify that aws tokens are redacted when logged."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:621: AssertionError
> _____________________ TestEc2.test_classic_instance_false ______________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_classic_instance_false>
> 
>     def test_classic_instance_false(self):
>         """If vpc-id in metadata, is_classic_instance must return false."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:566: AssertionError
> ______________________ TestEc2.test_classic_instance_true ______________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_classic_instance_true>
> 
>     def test_classic_instance_true(self):
>         """If no vpc-id in metadata, is_classic_instance must return true."""
>         md_copy = copy.deepcopy(DEFAULT_METADATA)
>         ifaces_md = md_copy.get('network', {}).get('interfaces', {})
>         for _mac, mac_data in ifaces_md.get('macs', {}).items():
>             if 'vpc-id' in mac_data:
>                 del mac_data['vpc-id']
>     
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': md_copy})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:557: AssertionError
> ________ TestEc2.test_ec2_get_instance_id_refreshes_identity_on_upgrade ________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_ec2_get_instance_id_refreshes_identity_on_upgrade>
> 
>     def test_ec2_get_instance_id_refreshes_identity_on_upgrade(self):
>         """get_instance-id gets DataSourceEc2Local.identity if not present.
>     
>         This handles an upgrade case where the old pickled datasource didn't
>         set up self.identity, but 'systemctl cloud-init init' runs
>         get_instance_id which traces on missing self.identity. lp:1748354.
>         """
>         self.datasource = ec2.DataSourceEc2Local
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>         # Mock 404s on all versions except latest
>         all_versions = (
>             [ds.min_metadata_version] + ds.extended_metadata_versions)
>         for ver in all_versions[:-1]:
>             register_mock_metaserver(
>                 'http://169.254.169.254/{0}/meta-data/instance-id'.format(ver),
>                 None)
>         ds.metadata_address = 'http://169.254.169.254'
>         register_mock_metaserver(
>             '{0}/{1}/meta-data/'.format(ds.metadata_address, all_versions[-1]),
>             DEFAULT_METADATA)
>         # Register dynamic/instance-identity document which we now read.
>         register_mock_metaserver(
>             '{0}/{1}/dynamic/'.format(ds.metadata_address, all_versions[-1]),
>             DYNAMIC_METADATA)
>         ds._cloud_name = ec2.CloudNames.AWS
>         # Setup cached metadata on the Datasource
>         ds.metadata = DEFAULT_METADATA
> >       self.assertEqual('my-identity-id', ds.get_instance_id())
> 
> tests/unittests/test_datasource/test_ec2.py:543: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceEc2.py:182: in get_instance_id
>     api_version = self.get_metadata_api_version()
> cloudinit/sources/DataSourceEc2.py:159: in get_metadata_api_version
>     headers = self._get_headers()
> cloudinit/sources/DataSourceEc2.py:566: in _get_headers
>     self._api_token = self._refresh_api_token()
> cloudinit/sources/DataSourceEc2.py:499: in _refresh_api_token
>     response = uhelp.readurl(token_url, headers=request_header,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d23d1c40>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _______________ TestEc2.test_ec2_local_performs_dhcp_on_non_bsd ________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_ec2_local_performs_dhcp_on_non_bsd>
> m_is_bsd = <MagicMock name='is_FreeBSD' id='140126840194192'>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126840174240'>
> m_fallback_nic = <MagicMock name='find_fallback_nic' id='140126839064656'>
> m_net = <MagicMock name='EphemeralIPv4Network' id='140126839034592'>
> 
>     @mock.patch('cloudinit.net.dhcp.EphemeralIPv4Network')
>     @mock.patch('cloudinit.net.find_fallback_nic')
>     @mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     @mock.patch('cloudinit.sources.DataSourceEc2.util.is_FreeBSD')
>     def test_ec2_local_performs_dhcp_on_non_bsd(self, m_is_bsd, m_dhcp,
>                                                 m_fallback_nic, m_net):
>         """Ec2Local returns True for valid platform data on non-BSD with dhcp.
>     
>         DataSourceEc2Local will setup initial IPv4 network via dhcp discovery.
>         Then the metadata services is crawled for more network config info.
>         When the platform data is valid, return True.
>         """
>     
>         m_fallback_nic.return_value = 'eth9'
>         m_is_bsd.return_value = False
>         m_dhcp.return_value = [{
>             'interface': 'eth9', 'fixed-address': '192.168.2.9',
>             'routers': '192.168.2.1', 'subnet-mask': '255.255.255.0',
>             'broadcast-address': '192.168.2.255'}]
>         self.datasource = ec2.DataSourceEc2Local
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>     
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:741: AssertionError
> _______ TestEc2.test_network_config_cached_property_refreshed_on_upgrade _______
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_cached_property_refreshed_on_upgrade>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126837553472'>
> 
>     @mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_network_config_cached_property_refreshed_on_upgrade(self, m_dhcp):
>         """Refresh the network_config Ec2 cache if network key is absent.
>     
>         This catches an upgrade issue where obj.pkl contained stale metadata
>         which lacked newly required network key.
>         """
>         old_metadata = copy.deepcopy(DEFAULT_METADATA)
>         old_metadata.pop('network')
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': old_metadata})
> >       self.assertTrue(ds.get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:494: AssertionError
> _____ TestEc2.test_network_config_property_returns_version_2_network_data ______
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_property_returns_version_2_network_data>
> 
>     def test_network_config_property_returns_version_2_network_data(self):
>         """network_config property returns network version 2 for metadata"""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': DEFAULT_METADATA})
>         find_fallback_path = M_PATH_NET + 'find_fallback_nic'
>         with mock.patch(find_fallback_path) as m_find_fallback:
>             m_find_fallback.return_value = 'eth9'
>             ds.get_data()
>     
>         mac1 = '06:17:04:d7:26:09'  # Defined in DEFAULT_METADATA
>         expected = {'version': 2, 'ethernets': {'eth9': {
>             'match': {'macaddress': '06:17:04:d7:26:09'}, 'set-name': 'eth9',
>             'dhcp4': True, 'dhcp6': True}}}
>         patch_path = M_PATH_NET + 'get_interfaces_by_mac'
>         get_interface_mac_path = M_PATH_NET + 'get_interface_mac'
>         with mock.patch(patch_path) as m_get_interfaces_by_mac:
>             with mock.patch(find_fallback_path) as m_find_fallback:
>                 with mock.patch(get_interface_mac_path) as m_get_mac:
>                     m_get_interfaces_by_mac.return_value = {mac1: 'eth9'}
>                     m_find_fallback.return_value = 'eth9'
>                     m_get_mac.return_value = mac1
> >                   self.assertEqual(expected, ds.network_config)
> E                   AssertionError: {'version': 2, 'ethernets': {'eth9': {'ma[89 chars]ue}}} != None
> 
> tests/unittests/test_datasource/test_ec2.py:409: AssertionError
> __________ TestEc2.test_network_config_property_secondary_private_ips __________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_property_secondary_private_ips>
> 
>     def test_network_config_property_secondary_private_ips(self):
>         """network_config property configures any secondary ipv4 addresses.
>     
>         Only one device is configured based on get_interfaces_by_mac even when
>         multiple MACs exist in metadata.
>         """
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': SECONDARY_IP_METADATA_2018_09_24})
>         find_fallback_path = M_PATH_NET + 'find_fallback_nic'
>         with mock.patch(find_fallback_path) as m_find_fallback:
>             m_find_fallback.return_value = 'eth9'
>             ds.get_data()
>     
>         mac1 = '0a:07:84:3d:6e:38'  # 1 secondary IPv4 and 2 secondary IPv6
>         expected = {'version': 2, 'ethernets': {'eth9': {
>             'match': {'macaddress': mac1}, 'set-name': 'eth9',
>             'addresses': ['172.31.45.70/20',
>                           '2600:1f16:292:100:f152:2222:3333:4444/128',
>                           '2600:1f16:292:100:f153:12a3:c37c:11f9/128'],
>             'dhcp4': True, 'dhcp6': True}}}
>         patch_path = M_PATH_NET + 'get_interfaces_by_mac'
>         get_interface_mac_path = M_PATH_NET + 'get_interface_mac'
>         with mock.patch(patch_path) as m_get_interfaces_by_mac:
>             with mock.patch(find_fallback_path) as m_find_fallback:
>                 with mock.patch(get_interface_mac_path) as m_get_mac:
>                     m_get_interfaces_by_mac.return_value = {mac1: 'eth9'}
>                     m_find_fallback.return_value = 'eth9'
>                     m_get_mac.return_value = mac1
> >                   self.assertEqual(expected, ds.network_config)
> E                   AssertionError: {'version': 2, 'ethernets': {'eth9': {'ma[213 chars]ue}}} != None
> 
> tests/unittests/test_datasource/test_ec2.py:470: AssertionError
> ________________ TestEc2.test_network_config_property_set_dhcp4 ________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_network_config_property_set_dhcp4>
> 
>     def test_network_config_property_set_dhcp4(self):
>         """network_config property configures dhcp4 on nics with local-ipv4s.
>     
>         Only one device is configured based on get_interfaces_by_mac even when
>         multiple MACs exist in metadata.
>         """
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': DEFAULT_METADATA})
>         find_fallback_path = M_PATH_NET + 'find_fallback_nic'
>         with mock.patch(find_fallback_path) as m_find_fallback:
>             m_find_fallback.return_value = 'eth9'
>             ds.get_data()
>     
>         mac1 = '06:17:04:d7:26:0A'  # IPv4 only in DEFAULT_METADATA
>         expected = {'version': 2, 'ethernets': {'eth9': {
>             'match': {'macaddress': mac1.lower()}, 'set-name': 'eth9',
>             'dhcp4': True, 'dhcp6': False}}}
>         patch_path = M_PATH_NET + 'get_interfaces_by_mac'
>         get_interface_mac_path = M_PATH_NET + 'get_interface_mac'
>         with mock.patch(patch_path) as m_get_interfaces_by_mac:
>             with mock.patch(find_fallback_path) as m_find_fallback:
>                 with mock.patch(get_interface_mac_path) as m_get_mac:
>                     m_get_interfaces_by_mac.return_value = {mac1: 'eth9'}
>                     m_find_fallback.return_value = 'eth9'
>                     m_get_mac.return_value = mac1
> >                   self.assertEqual(expected, ds.network_config)
> E                   AssertionError: {'version': 2, 'ethernets': {'eth9': {'ma[90 chars]se}}} != None
> 
> tests/unittests/test_datasource/test_ec2.py:438: AssertionError
> _______________ TestEc2.test_unknown_platform_with_strict_false ________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_unknown_platform_with_strict_false>
> 
>     def test_unknown_platform_with_strict_false(self):
>         """Unknown platform data with strict_id false should return True."""
>         uuid = 'ab439480-72bf-11d3-91fc-b8aded755F9a'
>         ds = self._setup_ds(
>             platform_data={'uuid': uuid, 'uuid_source': 'dmi', 'serial': ''},
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:673: AssertionError
> ________________ TestEc2.test_valid_platform_with_strict_false _________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_valid_platform_with_strict_false>
> 
>     def test_valid_platform_with_strict_false(self):
>         """Valid platform data should return true with strict_id false."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': False}}},
>             md={'md': DEFAULT_METADATA})
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:653: AssertionError
> _________________ TestEc2.test_valid_platform_with_strict_true _________________
> 
> self = <tests.unittests.test_datasource.test_ec2.TestEc2 testMethod=test_valid_platform_with_strict_true>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126834752192'>
> 
>     @mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_valid_platform_with_strict_true(self, m_dhcp):
>         """Valid platform data should return true with strict_id true."""
>         ds = self._setup_ds(
>             platform_data=self.valid_platform_data,
>             sys_cfg={'datasource': {'Ec2': {'strict_id': True}}},
>             md={'md': DEFAULT_METADATA})
>         ret = ds.get_data()
> >       self.assertTrue(ret)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_ec2.py:640: AssertionError
> _____________________ TestDatasourceExoscale.test_get_data _____________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_get_data>
> 
>     def test_get_data(self):
>         """The datasource conforms to expected behavior when supplied
>         full test data."""
>         path = helpers.Paths({'run_dir': self.tmp})
>         ds = DataSourceExoscale({}, None, path)
>         ds._is_platform_viable = lambda: True
>         expected_password = "p@ssw0rd"
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_password)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
> >       self.assertTrue(ds._get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_exoscale.py:105: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceExoscale:DataSourceExoscale.py:33 Initializing the Exoscale datasource
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> INFO     cloudinit.sources.DataSourceExoscale:util.py:2635 waiting for the metadata service took 126.195 seconds
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:2635 Crawl of metadata service took 126.195 seconds
> _______________ TestDatasourceExoscale.test_get_data_no_password _______________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_get_data_no_password>
> 
>     def test_get_data_no_password(self):
>         """The datasource conforms to expected behavior when no password is
>         returned by the password server."""
>         path = helpers.Paths({'run_dir': self.tmp})
>         ds = DataSourceExoscale({}, None, path)
>         ds._is_platform_viable = lambda: True
>         expected_answer = ""
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_answer)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
> >       self.assertTrue(ds._get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_exoscale.py:172: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceExoscale:DataSourceExoscale.py:33 Initializing the Exoscale datasource
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> INFO     cloudinit.sources.DataSourceExoscale:util.py:2635 waiting for the metadata service took 126.194 seconds
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:2635 Crawl of metadata service took 126.194 seconds
> _____________ TestDatasourceExoscale.test_get_data_saved_password ______________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_get_data_saved_password>
> 
>     def test_get_data_saved_password(self):
>         """The datasource conforms to expected behavior when saved_password is
>         returned by the password server."""
>         path = helpers.Paths({'run_dir': self.tmp})
>         ds = DataSourceExoscale({}, None, path)
>         ds._is_platform_viable = lambda: True
>         expected_answer = "saved_password"
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_answer)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
> >       self.assertTrue(ds._get_data())
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_exoscale.py:141: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.sources.DataSourceExoscale:DataSourceExoscale.py:33 Initializing the Exoscale datasource
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [0/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [1/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [2/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [3/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [4/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 1 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [5/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [7/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [9/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [11/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [13/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 2 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [15/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [18/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [21/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [24/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [27/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 3 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [30/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [34/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [38/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [42/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [46/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 4 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [50/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [55/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [60/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [65/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [70/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 5 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [75/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [81/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [87/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [93/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [99/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 6 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [105/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 7.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [112/120s]: unexpected error ['Thread' object has no attribute 'isAlive']
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://169.254.169.254/1.0/meta-data/instance-id' with {'url': 'http://169.254.169.254/1.0/meta-data/instance-id', 'allow_redirects': True, 'method': 'GET', 'timeout': 0.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> CRITICAL cloudinit.sources.DataSourceExoscale:url_helper.py:447 Calling 'http://169.254.169.254/1.0/meta-data/instance-id' failed [119/120s]: unexpected error [Attempted to set connect timeout to 0.0, but the timeout cannot be set to a value less than or equal to 0.]
> DEBUG    cloudinit.url_helper:url_helper.py:458 Please wait 7 seconds while we wait to try again
> INFO     cloudinit.sources.DataSourceExoscale:util.py:2635 waiting for the metadata service took 126.194 seconds
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:2635 Crawl of metadata service took 126.194 seconds
> _____________________ TestDatasourceExoscale.test_password _____________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_password>
> 
>     def test_password(self):
>         """The password is set to what is found in the metadata
>         service."""
>         expected_password = "p@ssw0rd"
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body=expected_password)
> >       password = get_password()
> 
> tests/unittests/test_datasource/test_exoscale.py:65: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceExoscale.py:164: in get_password
>     response = url_helper.read_file_or_url(
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d25e9160>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254:8080/1.0/' with {'url': 'http://169.254.169.254:8080/1.0/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'DomU_Request': 'send_my_password'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:8080
> __________________ TestDatasourceExoscale.test_password_empty __________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_password_empty>
> 
>     def test_password_empty(self):
>         """No password is set if the metadata service returns
>         an empty string."""
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body="")
> >       self.assertFalse(get_password())
> 
> tests/unittests/test_datasource/test_exoscale.py:56: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceExoscale.py:164: in get_password
>     response = url_helper.read_file_or_url(
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2566430>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254:8080/1.0/' with {'url': 'http://169.254.169.254:8080/1.0/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'DomU_Request': 'send_my_password'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:8080
> __________________ TestDatasourceExoscale.test_password_saved __________________
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_password_saved>
> 
>     def test_password_saved(self):
>         """The password is not set when it is not found
>         in the metadata service."""
>         httpretty.register_uri(httpretty.GET,
>                                self.password_url,
>                                body="saved_password")
> >       self.assertFalse(get_password())
> 
> tests/unittests/test_datasource/test_exoscale.py:48: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/DataSourceExoscale.py:164: in get_password
>     response = url_helper.read_file_or_url(
> cloudinit/url_helper.py:101: in read_file_or_url
>     return readurl(url, **kwargs)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2625dc0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254:8080/1.0/' with {'url': 'http://169.254.169.254:8080/1.0/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2', 'DomU_Request': 'send_my_password'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:8080
> __ TestDatasourceExoscale.test_read_metadata_when_password_server_unreachable __
> 
> self = <tests.unittests.test_datasource.test_exoscale.TestDatasourceExoscale testMethod=test_read_metadata_when_password_server_unreachable>
> m_password = <MagicMock name='get_password' id='140126839420240'>
> 
>     @mock.patch('cloudinit.sources.DataSourceExoscale.get_password')
>     def test_read_metadata_when_password_server_unreachable(self, m_password):
>         """The read_metadata function returns partial results in case the
>         password server (only) is unreachable."""
>         expected_id = "12345"
>         expected_hostname = "myname"
>         expected_userdata = "#cloud-config"
>     
>         m_password.side_effect = requests.Timeout('Fake Connection Timeout')
>         httpretty.register_uri(httpretty.GET,
>                                self.userdata_url,
>                                body=expected_userdata)
>         httpretty.register_uri(httpretty.GET,
>                                self.metadata_url,
>                                body="instance-id\nlocal-hostname")
>         httpretty.register_uri(httpretty.GET,
>                                "{}local-hostname".format(self.metadata_url),
>                                body=expected_hostname)
>         httpretty.register_uri(httpretty.GET,
>                                "{}instance-id".format(self.metadata_url),
>                                body=expected_id)
>     
>         result = read_metadata()
>     
>         self.assertIsNone(result.get("password"))
> >       self.assertEqual(result.get("user-data").decode("utf-8"),
>                          expected_userdata)
> E       AttributeError: 'str' object has no attribute 'decode'
> 
> tests/unittests/test_datasource/test_exoscale.py:203: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254/1.0/user-data' with {'url': 'http://169.254.169.254/1.0/user-data', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching userdata from url http://169.254.169.254/1.0/user-data
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching userdata from url http://169.254.169.254/1.0/user-data
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 157, in get_instance_userdata
>     response = url_helper.read_file_or_url(
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/7] open 'http://169.254.169.254/1.0/meta-data/' with {'url': 'http://169.254.169.254/1.0/meta-data/', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> WARNING  cloudinit.ec2_utils:util.py:1598 Failed fetching meta-data/ from url http://169.254.169.254/1.0/meta-data/
> DEBUG    cloudinit.ec2_utils:util.py:1607 Failed fetching meta-data/ from url http://169.254.169.254/1.0/meta-data/
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/ec2_utils.py", line 187, in _get_instance_metadata
>     response = caller(md_url)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 101, in read_file_or_url
>     return readurl(url, **kwargs)
>   File "/<<PKGBUILDDIR>>/cloudinit/url_helper.py", line 303, in readurl
>     r = sess.request(**req_args)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 530, in request
>     resp = self.send(prep, **send_kwargs)
>   File "/usr/lib/python3/dist-packages/requests/sessions.py", line 643, in send
>     r = adapter.send(request, **kwargs)
>   File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
>     resp = conn.urlopen(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 670, in urlopen
>     httplib_response = self._make_request(
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 426, in _make_request
>     six.raise_from(e, None)
>   File "<string>", line 3, in raise_from
>   File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
>     httplib_response = conn.getresponse()
>   File "/usr/lib/python3.9/http/client.py", line 1343, in getresponse
>     response = self.response_class(self.sock, method=self._method)
>   File "/usr/lib/python3.9/http/client.py", line 245, in __init__
>     self.fp = sock.makefile("rb")
>   File "/usr/lib/python3/dist-packages/httpretty/core.py", line 438, in makefile
>     if t.isAlive():
> AttributeError: 'Thread' object has no attribute 'isAlive'
> WARNING  cloudinit.sources.DataSourceExoscale:util.py:1598 failed to read from password server url http://169.254.169.254:8080 (Fake Connection Timeout)
> DEBUG    cloudinit.sources.DataSourceExoscale:util.py:1607 failed to read from password server url http://169.254.169.254:8080 (Fake Connection Timeout)
> Traceback (most recent call last):
>   File "/<<PKGBUILDDIR>>/cloudinit/sources/DataSourceExoscale.py", line 211, in read_metadata
>     crawled_metadata['password'] = get_password(
>   File "/usr/lib/python3.9/unittest/mock.py", line 1093, in __call__
>     return self._mock_call(*args, **kwargs)
>   File "/usr/lib/python3.9/unittest/mock.py", line 1097, in _mock_call
>     return self._execute_mock_call(*args, **kwargs)
>   File "/usr/lib/python3.9/unittest/mock.py", line 1152, in _execute_mock_call
>     raise effect
> requests.exceptions.Timeout: Fake Connection Timeout
> ____________ TestDataSourceGCE.test_block_project_ssh_keys_override ____________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_block_project_ssh_keys_override>
> 
>     def test_block_project_ssh_keys_override(self):
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': 'cloudinit:{0}'.format(invalid_key.format(0)),
>             'ssh-keys': 'cloudinit:{0}'.format(invalid_key.format(1)),
>         }
>         instance_attributes = {
>             'ssh-keys': 'cloudinit:{0}'.format(valid_key.format(0)),
>             'block-project-ssh-keys': 'True',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:288: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2865640>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> __________________ TestDataSourceGCE.test_cloudinit_ssh_keys ___________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_cloudinit_ssh_keys>
> 
>     def test_cloudinit_ssh_keys(self):
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': '\n'.join([
>                 'cloudinit:{0}'.format(valid_key.format(0)),
>                 'user:{0}'.format(invalid_key.format(0)),
>             ]),
>             'ssh-keys': '\n'.join([
>                 'cloudinit:{0}'.format(valid_key.format(1)),
>                 'user:{0}'.format(invalid_key.format(1)),
>             ]),
>         }
>         instance_attributes = {
>             'ssh-keys': '\n'.join([
>                 'cloudinit:{0}'.format(valid_key.format(2)),
>                 'user:{0}'.format(invalid_key.format(2)),
>             ]),
>             'block-project-ssh-keys': 'False',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:205: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b875f670>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ______________________ TestDataSourceGCE.test_connection _______________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_connection>
> 
>     def test_connection(self):
>         _set_mock_metadata()
> >       success = self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:113: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d268a760>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestDataSourceGCE.test_default_user_ssh_keys _________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_default_user_ssh_keys>
> mock_ug_util = <MagicMock name='ug_util' id='140126402191424'>
> 
>     @mock.patch("cloudinit.sources.DataSourceGCE.ug_util")
>     def test_default_user_ssh_keys(self, mock_ug_util):
>         mock_ug_util.normalize_users_groups.return_value = None, None
>         mock_ug_util.extract_default.return_value = 'ubuntu', None
>         ubuntu_ds = DataSourceGCE.DataSourceGCE(
>             settings.CFG_BUILTIN, self._make_distro('ubuntu'),
>             helpers.Paths({'run_dir': self.tmp_dir()}))
>     
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': '\n'.join([
>                 'ubuntu:{0}'.format(valid_key.format(0)),
>                 'user:{0}'.format(invalid_key.format(0)),
>             ]),
>             'ssh-keys': '\n'.join([
>                 'ubuntu:{0}'.format(valid_key.format(1)),
>                 'user:{0}'.format(invalid_key.format(1)),
>             ]),
>         }
>         instance_attributes = {
>             'ssh-keys': '\n'.join([
>                 'ubuntu:{0}'.format(valid_key.format(2)),
>                 'user:{0}'.format(invalid_key.format(2)),
>             ]),
>             'block-project-ssh-keys': 'False',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       ubuntu_ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:243: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d01f3cd0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ______________ TestDataSourceGCE.test_instance_ssh_keys_override _______________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_instance_ssh_keys_override>
> 
>     def test_instance_ssh_keys_override(self):
>         valid_key = 'ssh-rsa VALID {0}'
>         invalid_key = 'ssh-rsa INVALID {0}'
>         project_attributes = {
>             'sshKeys': 'cloudinit:{0}'.format(invalid_key.format(0)),
>             'ssh-keys': 'cloudinit:{0}'.format(invalid_key.format(1)),
>         }
>         instance_attributes = {
>             'sshKeys': 'cloudinit:{0}'.format(valid_key.format(0)),
>             'ssh-keys': 'cloudinit:{0}'.format(valid_key.format(1)),
>             'block-project-ssh-keys': 'False',
>         }
>     
>         meta = GCE_META.copy()
>         meta['project/attributes'] = project_attributes
>         meta['instance/attributes'] = instance_attributes
>     
>         _set_mock_metadata(meta)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:266: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b8634c10>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _______________________ TestDataSourceGCE.test_metadata ________________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_metadata>
> 
>     def test_metadata(self):
>         # UnicodeDecodeError if set to ds.userdata instead of userdata_raw
>         meta = GCE_META.copy()
>         meta['instance/attributes/user-data'] = b'/bin/echo \xff\n'
>     
>         _set_mock_metadata()
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:125: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b85c7a30>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ___________________ TestDataSourceGCE.test_metadata_encoding ___________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_metadata_encoding>
> 
>     def test_metadata_encoding(self):
>         """user-data is base64 encoded if user-data-encoding is 'base64'."""
>         _set_mock_metadata(GCE_META_ENCODING)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:159: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d01d5b20>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ___________________ TestDataSourceGCE.test_metadata_partial ____________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_metadata_partial>
> 
>     def test_metadata_partial(self):
>         _set_mock_metadata(GCE_META_PARTIAL)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:140: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b86c4a60>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> __________ TestDataSourceGCE.test_missing_required_keys_return_false ___________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_missing_required_keys_return_false>
> 
>     def test_missing_required_keys_return_false(self):
>         for required_key in ['instance/id', 'instance/zone',
>                              'instance/hostname']:
>             meta = GCE_META_PARTIAL.copy()
>             del meta[required_key]
>             _set_mock_metadata(meta)
> >           self.assertEqual(False, self.ds.get_data())
> 
> tests/unittests/test_datasource/test_gce.py:171: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d28488b0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestDataSourceGCE.test_no_ssh_keys_metadata __________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_no_ssh_keys_metadata>
> 
>     def test_no_ssh_keys_metadata(self):
>         _set_mock_metadata()
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:176: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2850cd0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> ___ TestDataSourceGCE.test_only_last_part_of_zone_used_for_availability_zone ___
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_only_last_part_of_zone_used_for_availability_zone>
> 
>     def test_only_last_part_of_zone_used_for_availability_zone(self):
>         _set_mock_metadata()
> >       r = self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:295: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b87948b0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestDataSourceGCE.test_userdata_no_encoding __________________
> 
> self = <tests.unittests.test_datasource.test_gce.TestDataSourceGCE testMethod=test_userdata_no_encoding>
> 
>     def test_userdata_no_encoding(self):
>         """check that user-data is read."""
>         _set_mock_metadata(GCE_USER_DATA_TEXT)
> >       self.ds.get_data()
> 
> tests/unittests/test_datasource/test_gce.py:151: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceGCE.py:70: in _get_data
>     ret = util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceGCE.py:212: in read_md
>     new_value = metadata_fetcher.get_value(path, is_text, is_recursive)
> cloudinit/sources/DataSourceGCE.py:38: in get_value
>     resp = url_helper.readurl(url=url, headers=HEADERS)
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d23d1f40>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1183 detected dns redirection: {'does-not-exist.example.com.': [': does-not-exist.example.com.'], 'example.invalid.': [': example.invalid.'], '__cloud_init_expected_not_found__': [': __cloud_init_expected_not_found__']}
> DEBUG    cloudinit.util:util.py:2635 Resolving URL: http://metadata.google.internal/computeMetadata/v1/ took 0.000 seconds
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/1] open 'http://metadata.google.internal/computeMetadata/v1/instance/id' with {'url': 'http://metadata.google.internal/computeMetadata/v1/instance/id', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2', 'Metadata-Flavor': 'Google'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): metadata.google.internal:80
> DEBUG    cloudinit.sources.DataSourceGCE:util.py:2635 Crawl of GCE metadata service took 0.002 seconds
> _________________ TestOpenNebulaDataSource.test_context_parser _________________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestOpenNebulaDataSource testMethod=test_context_parser>
> 
>     def test_context_parser(self):
>         populate_context_dir(self.seed_dir, TEST_VARS)
>         results = ds.read_context_disk_dir(self.seed_dir)
>     
>         self.assertTrue('metadata' in results)
> >       self.assertEqual(TEST_VARS, results['metadata'])
> E       AssertionError: {'VAR1': 'single', 'VAR2': 'double word', '[207 chars] '$'} != {'SRANDOM': '286584205', 'VAR1': 'single', [231 chars]e\n'}
> E       + {'SRANDOM': '286584205',
> E       - {'VAR1': 'single',
> E       ? ^
> E       
> E       +  'VAR1': 'single',
> E       ? ^
> E       
> E          'VAR10': '\\',
> E          'VAR11': "'",
> E          'VAR12': '$',
> E          'VAR2': 'double word',
> E          'VAR3': 'multi\nline\n',
> E          'VAR4': "'single'",
> E          'VAR5': "'double word'",
> E          'VAR6': "'multi\nline\n'",
> E          'VAR7': 'single\\t',
> E          'VAR8': 'double\\tword',
> E          'VAR9': 'multi\\t\nline\n'}
> 
> tests/unittests/test_datasource/test_opennebula.py:161: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestOpenNebulaDataSource.i70dj5oc/seed/opennebula/context.sh (quiet=False)
> DEBUG    cloudinit.util:util.py:1430 Read 262 bytes from /tmp/ci-TestOpenNebulaDataSource.i70dj5oc/seed/opennebula/context.sh
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> ____________ TestOpenNebulaDataSource.test_seed_dir_empty1_context _____________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestOpenNebulaDataSource testMethod=test_seed_dir_empty1_context>
> 
>     def test_seed_dir_empty1_context(self):
>         populate_dir(self.seed_dir, {'context.sh': ''})
>         results = ds.read_context_disk_dir(self.seed_dir)
>     
>         self.assertIsNone(results['userdata'])
> >       self.assertEqual(results['metadata'], {})
> E       AssertionError: {'SRANDOM': '1803867237'} != {}
> E       - {'SRANDOM': '1803867237'}
> E       + {}
> 
> tests/unittests/test_datasource/test_opennebula.py:140: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestOpenNebulaDataSource.sdtf9hoj/seed/opennebula/context.sh (quiet=False)
> DEBUG    cloudinit.util:util.py:1430 Read 0 bytes from /tmp/ci-TestOpenNebulaDataSource.sdtf9hoj/seed/opennebula/context.sh
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> ____________ TestOpenNebulaDataSource.test_seed_dir_empty2_context _____________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestOpenNebulaDataSource testMethod=test_seed_dir_empty2_context>
> 
>     def test_seed_dir_empty2_context(self):
>         populate_context_dir(self.seed_dir, {})
>         results = ds.read_context_disk_dir(self.seed_dir)
>     
>         self.assertIsNone(results['userdata'])
> >       self.assertEqual(results['metadata'], {})
> E       AssertionError: {'SRANDOM': '394719205'} != {}
> E       - {'SRANDOM': '394719205'}
> E       + {}
> 
> tests/unittests/test_datasource/test_opennebula.py:147: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:1419 Reading from /tmp/ci-TestOpenNebulaDataSource.zexnpedd/seed/opennebula/context.sh (quiet=False)
> DEBUG    cloudinit.util:util.py:1430 Read 44 bytes from /tmp/ci-TestOpenNebulaDataSource.zexnpedd/seed/opennebula/context.sh
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> _____________________ TestParseShellConfig.test_no_seconds _____________________
> 
> self = <tests.unittests.test_datasource.test_opennebula.TestParseShellConfig testMethod=test_no_seconds>
> 
>     def test_no_seconds(self):
>         cfg = '\n'.join(["foo=bar", "SECONDS=2", "xx=foo"])
>         # we could test 'sleep 2', but that would make the test run slower.
>         ret = ds.parse_shell_config(cfg)
> >       self.assertEqual(ret, {"foo": "bar", "xx": "foo"})
> E       AssertionError: {'foo': 'bar', 'xx': 'foo', 'SRANDOM': '560964075'} != {'foo': 'bar', 'xx': 'foo'}
> E       - {'SRANDOM': '560964075', 'foo': 'bar', 'xx': 'foo'}
> E       + {'foo': 'bar', 'xx': 'foo'}
> 
> tests/unittests/test_datasource/test_opennebula.py:922: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.util:util.py:2087 Running command ['bash', '-e'] with allowed return codes [0] (shell=False, capture=True)
> _______________ TestOpenStackDataSource.test_bad_datasource_meta _______________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_bad_datasource_meta>
> 
>     def test_bad_datasource_meta(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files[k] = '{'  # some invalid json
>         _register_uris(self.VERSION, {}, {}, os_files)
>         ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN,
>                                        None,
>                                        helpers.Paths({'run_dir': self.tmp}))
>         self.assertIsNone(ds_os.version)
>         mock_path = MOCK_PATH + 'detect_openstack'
>         with test_helpers.mock.patch(mock_path) as m_detect_os:
>             m_detect_os.return_value = True
>             found = ds_os.get_data()
>         self.assertFalse(found)
>         self.assertIsNone(ds_os.version)
> >       self.assertIn(
>             'InvalidMetaDataException: Broken metadata address'
>             ' http://169.254.169.25',
>             self.logs.getvalue())
> E       AssertionError: 'InvalidMetaDataException: Broken metadata address http://169.254.169.25' not found in 'DEBUG: detected dns redirection: {\'does-not-exist.example.com.\': [\': does-not-exist.example.com.\'], \'example.invalid.\': [\': example.invalid.\'], \'__cloud_init_expected_not_found__\': [\': __cloud_init_expected_not_found__\']}\nDEBUG: Resolving URL: http://169.254.169.254 took 0.000 seconds\nDEBUG: [0/1] open \'http://169.254.169.254/openstack\' with {\'url\': \'http://169.254.169.254/openstack\', \'allow_redirects\': True, \'method\': \'GET\', \'timeout\': 10.0, \'headers\': {\'User-Agent\': \'Cloud-Init/20.2\'}} configuration\nDEBUG: Starting new HTTP connection (1): 169.254.169.254:80\nDEBUG: Calling \'http://169.254.169.254/openstack\' failed [0/-1s]: unexpected error [\'Thread\' object has no attribute \'isAlive\']\nDEBUG: Giving up on OpenStack md from [\'http://169.254.169.254/openstack\'] after 0 seconds\nWARNING: No active metadata service found\nDEBUG: No active metadata service found\nTraceback (most recent call last):\n  File "/<<PKGBUILDDIR>>/cloudinit/sources/DataSourceOpenStack.py", line 143, in _get_data\n    results = self._crawl_metadata()\n  File "/<<PKGBUILDDIR>>/cloudinit/sources/DataSourceOpenStack.py", line 179, in _crawl_metadata\n    raise sources.InvalidMetaDataException(\ncloudinit.sources.InvalidMetaDataException: No active metadata service found\n'
> 
> tests/unittests/test_datasource/test_openstack.py:300: AssertionError
> __________________ TestOpenStackDataSource.test_bad_metadata ___________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_bad_metadata>
> 
>     def test_bad_metadata(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files.pop(k, None)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(openstack.NonReadable, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:178: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ____________________ TestOpenStackDataSource.test_bad_uuid _____________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_bad_uuid>
> 
>     def test_bad_uuid(self):
>         os_files = copy.deepcopy(OS_FILES)
>         os_meta = copy.deepcopy(OSTACK_META)
>         os_meta.pop('uuid')
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files[k] = json.dumps(os_meta)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(BrokenMetadata, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:188: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ___________________ TestOpenStackDataSource.test_datasource ____________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_datasource>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126400769280'>
> 
>     @test_helpers.mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_datasource(self, m_dhcp):
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
>         ds_os = ds.DataSourceOpenStack(
>             settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp}))
>         self.assertIsNone(ds_os.version)
>         mock_path = MOCK_PATH + 'detect_openstack'
>         with test_helpers.mock.patch(mock_path) as m_detect_os:
>             m_detect_os.return_value = True
>             found = ds_os.get_data()
> >       self.assertTrue(found)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_openstack.py:239: AssertionError
> ________________ TestOpenStackDataSource.test_local_datasource _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_local_datasource>
> m_dhcp = <MagicMock name='maybe_perform_dhcp_discovery' id='140126839066288'>
> m_net = <MagicMock name='EphemeralIPv4Network' id='140126402437856'>
> 
>     @hp.activate
>     @test_helpers.mock.patch('cloudinit.net.dhcp.EphemeralIPv4Network')
>     @test_helpers.mock.patch('cloudinit.net.dhcp.maybe_perform_dhcp_discovery')
>     def test_local_datasource(self, m_dhcp, m_net):
>         """OpenStackLocal calls EphemeralDHCPNetwork and gets instance data."""
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
>         ds_os_local = ds.DataSourceOpenStackLocal(
>             settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp}))
>         ds_os_local._fallback_interface = 'eth9'  # Monkey patch for dhcp
>         m_dhcp.return_value = [{
>             'interface': 'eth9', 'fixed-address': '192.168.2.9',
>             'routers': '192.168.2.1', 'subnet-mask': '255.255.255.0',
>             'broadcast-address': '192.168.2.255'}]
>     
>         self.assertIsNone(ds_os_local.version)
>         mock_path = MOCK_PATH + 'detect_openstack'
>         with test_helpers.mock.patch(mock_path) as m_detect_os:
>             m_detect_os.return_value = True
>             found = ds_os_local.get_data()
> >       self.assertTrue(found)
> E       AssertionError: False is not true
> 
> tests/unittests/test_datasource/test_openstack.py:271: AssertionError
> ________________ TestOpenStackDataSource.test_metadata_invalid _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_metadata_invalid>
> 
>     def test_metadata_invalid(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('meta_data.json'):
>                 os_files[k] = '{'  # some invalid json
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(BrokenMetadata, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:227: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _____________________ TestOpenStackDataSource.test_no_ec2 ______________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_no_ec2>
> 
>     def test_no_ec2(self):
>         _register_uris(self.VERSION, {}, {}, OS_FILES)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:164: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d23be250>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ___________________ TestOpenStackDataSource.test_successful ____________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_successful>
> 
>     def test_successful(self):
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:143: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d249b490>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _________________ TestOpenStackDataSource.test_userdata_empty __________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_userdata_empty>
> 
>     def test_userdata_empty(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('user_data'):
>                 os_files.pop(k, None)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:196: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b87e0d90>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ________________ TestOpenStackDataSource.test_vendordata_empty _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_vendordata_empty>
> 
>     def test_vendordata_empty(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('vendor_data.json'):
>                 os_files.pop(k, None)
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       f = _read_metadata_service()
> 
> tests/unittests/test_datasource/test_openstack.py:208: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2568820>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _______________ TestOpenStackDataSource.test_vendordata_invalid ________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_vendordata_invalid>
> 
>     def test_vendordata_invalid(self):
>         os_files = copy.deepcopy(OS_FILES)
>         for k in list(os_files.keys()):
>             if k.endswith('vendor_data.json'):
>                 os_files[k] = '{'  # some invalid json
>         _register_uris(self.VERSION, {}, {}, os_files)
> >       self.assertRaises(BrokenMetadata, _read_metadata_service)
> 
> tests/unittests/test_datasource/test_openstack.py:219: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> tests/unittests/test_datasource/test_openstack.py:129: in _read_metadata_service
>     return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
> cloudinit/sources/DataSourceOpenStack.py:220: in read_metadata_service
>     return reader.read_v2()
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> _______ TestOpenStackDataSource.test_wb__crawl_metadata_does_not_persist _______
> 
> self = <tests.unittests.test_datasource.test_openstack.TestOpenStackDataSource testMethod=test_wb__crawl_metadata_does_not_persist>
> 
>     @hp.activate
>     def test_wb__crawl_metadata_does_not_persist(self):
>         """_crawl_metadata returns current metadata and does not cache."""
>         _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
>         ds_os = ds.DataSourceOpenStack(
>             settings.CFG_BUILTIN, None, helpers.Paths({'run_dir': self.tmp}))
> >       crawled_data = ds_os._crawl_metadata()
> 
> tests/unittests/test_datasource/test_openstack.py:397: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <cloudinit.sources.DataSourceOpenStack.DataSourceOpenStack object at 0x7f71d2556940>
> 
>     def _crawl_metadata(self):
>         """Crawl metadata service when available.
>     
>         @returns: Dictionary with all metadata discovered for this datasource.
>         @raise: InvalidMetaDataException on unreadable or broken
>             metadata.
>         """
>         try:
>             if not self.wait_for_metadata_service():
> >               raise sources.InvalidMetaDataException(
>                     'No active metadata service found')
> E                   cloudinit.sources.InvalidMetaDataException: No active metadata service found
> 
> cloudinit/sources/DataSourceOpenStack.py:179: InvalidMetaDataException
> ________________ TestMetadataReader.test__find_working_version _________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestMetadataReader testMethod=test__find_working_version>
> 
>     def test__find_working_version(self):
>         """Test a working version ignores unsupported."""
>         unsup = "2016-11-09"
>         self.register_versions(
>             [openstack.OS_FOLSOM, openstack.OS_LIBERTY, unsup,
>              openstack.OS_LATEST])
> >       self.assertEqual(
>             openstack.OS_LIBERTY,
>             openstack.MetadataReader(self.burl)._find_working_version())
> E       AssertionError: '2015-10-15' != 'latest'
> E       - 2015-10-15
> E       + latest
> 
> tests/unittests/test_datasource/test_openstack.py:614: AssertionError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:189 Unable to read openstack versions from http://169.254.169.254/ due to: 'Thread' object has no attribute 'isAlive'
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:204 Selected version 'latest' from []
> ___________________ TestMetadataReader.test_read_v2_os_ocata ___________________
> 
> self = <tests.unittests.test_datasource.test_openstack.TestMetadataReader testMethod=test_read_v2_os_ocata>
> 
>     def test_read_v2_os_ocata(self):
>         """Validate return value of read_v2 for os_ocata data."""
>         md = copy.deepcopy(self.md_base)
>         md['devices'] = []
>         network_data = {'links': [], 'networks': [], 'services': []}
>         vendor_data = {}
>         vendor_data2 = {"static": {}}
>     
>         data = {
>             'meta_data.json': json.dumps(md),
>             'network_data.json': json.dumps(network_data),
>             'vendor_data.json': json.dumps(vendor_data),
>             'vendor_data2.json': json.dumps(vendor_data2),
>         }
>     
>         self.register_versions([openstack.OS_OCATA, openstack.OS_LATEST])
>         self.register_version(openstack.OS_OCATA, data)
>     
>         mock_read_ec2 = test_helpers.mock.MagicMock(
>             return_value={'instance-id': 'unused-ec2'})
>         expected_md = copy.deepcopy(md)
>         expected_md.update(
>             {'instance-id': md['uuid'], 'local-hostname': md['hostname']})
>         expected = {
>             'userdata': '',  # Annoying, no user-data results in empty string.
>             'version': 2,
>             'metadata': expected_md,
>             'vendordata': vendor_data,
>             'networkdata': network_data,
>             'ec2-metadata': mock_read_ec2.return_value,
>             'files': {},
>         }
>         reader = openstack.MetadataReader(self.burl)
>         reader._read_ec2_metadata = mock_read_ec2
> >       self.assertEqual(expected, reader.read_v2())
> 
> tests/unittests/test_datasource/test_openstack.py:660: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/helpers/openstack.py:266: in read_v2
>     data = self._path_read(path)
> cloudinit/sources/helpers/openstack.py:477: in _path_read
>     response = url_helper.readurl(path,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:392: in _make_request
>     conn.request(method, url, **httplib_request_kw)
> /usr/lib/python3.9/http/client.py:1255: in request
>     self._send_request(method, url, body, headers, encode_chunked)
> /usr/lib/python3.9/http/client.py:1301: in _send_request
>     self.endheaders(body, encode_chunked=encode_chunked)
> /usr/lib/python3.9/http/client.py:1250: in endheaders
>     self._send_output(message_body, encode_chunked=encode_chunked)
> /usr/lib/python3.9/http/client.py:1010: in _send_output
>     self.send(msg)
> /usr/lib/python3.9/http/client.py:971: in send
>     self.sock.sendall(data)
> /usr/lib/python3/dist-packages/httpretty/core.py:544: in sendall
>     self.real_sendall(data)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d28338e0>
> data = b'GET /openstack/latest/meta_data.json HTTP/1.1\r\nHost: 169.254.169.254\r\nUser-Agent: Cloud-Init/20.2\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\n\r\n'
> args = (), kw = {}
> 
>     def real_sendall(self, data, *args, **kw):
>         """Sends data to the remote server. This method is called
>         when HTTPretty identifies that someone is trying to send
>         non-http data.
>     
>         The received bytes are written in this socket's tempfile
>         buffer so that HTTPretty can return it accordingly when
>         necessary.
>         """
>         if not self.truesock:
> >           raise UnmockedError()
> E           httpretty.errors.UnmockedError: No mocking was registered, and real connections are not allowed (httpretty.allow_net_connect = False).
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:453: UnmockedError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:189 Unable to read openstack versions from http://169.254.169.254/ due to: 'Thread' object has no attribute 'isAlive'
> DEBUG    cloudinit.sources.helpers.openstack:openstack.py:204 Selected version 'latest' from []
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.169.254/openstack/latest/meta_data.json' with {'url': 'http://169.254.169.254/openstack/latest/meta_data.json', 'allow_redirects': True, 'method': 'GET', 'timeout': 5.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.169.254:80
> ___________________ TestDataSourceScaleway.test_metadata_404 ___________________
> 
> self = <tests.unittests.test_datasource.test_scaleway.TestDataSourceScaleway testMethod=test_metadata_404>
> sleep = <MagicMock name='sleep' id='140126838784160'>
> m_get_cmdline = <MagicMock name='get_cmdline' id='140126401547616'>
> dhcpv4 = <MagicMock name='EphemeralDHCPv4' id='140126838504752'>
> 
>     @mock.patch('cloudinit.sources.DataSourceScaleway.EphemeralDHCPv4')
>     @mock.patch('cloudinit.sources.DataSourceScaleway.SourceAddressAdapter',
>                 get_source_address_adapter)
>     @mock.patch('cloudinit.util.get_cmdline')
>     @mock.patch('time.sleep', return_value=None)
>     def test_metadata_404(self, sleep, m_get_cmdline, dhcpv4):
>         """
>         get_data() returns metadata, but no user data nor vendor data.
>         """
>         m_get_cmdline.return_value = 'scaleway'
>     
>         # Make user and vendor data APIs return HTTP/404, which means there is
>         # no user / vendor data for the server.
>         httpretty.register_uri(httpretty.GET, self.metadata_url,
>                                body=MetadataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.userdata_url,
>                                body=DataResponses.empty)
>         httpretty.register_uri(httpretty.GET, self.vendordata_url,
>                                body=DataResponses.empty)
> >       self.datasource.get_data()
> 
> tests/unittests/test_datasource/test_scaleway.py:309: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceScaleway.py:216: in _get_data
>     util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceScaleway.py:194: in _crawl_metadata
>     resp = url_helper.readurl(self.metadata_address,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d26e74f0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.42.42/conf?format=json' with {'url': 'http://169.254.42.42/conf?format=json', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.42.42:80
> DEBUG    cloudinit.sources.DataSourceScaleway:util.py:2635 Crawl of metadata service took 0.002 seconds
> ___________________ TestDataSourceScaleway.test_metadata_ok ____________________
> 
> self = <tests.unittests.test_datasource.test_scaleway.TestDataSourceScaleway testMethod=test_metadata_ok>
> sleep = <MagicMock name='sleep' id='140126400455392'>
> m_get_cmdline = <MagicMock name='get_cmdline' id='140126838979888'>
> dhcpv4 = <MagicMock name='EphemeralDHCPv4' id='140126837285168'>
> 
>     @mock.patch('cloudinit.sources.DataSourceScaleway.EphemeralDHCPv4')
>     @mock.patch('cloudinit.sources.DataSourceScaleway.SourceAddressAdapter',
>                 get_source_address_adapter)
>     @mock.patch('cloudinit.util.get_cmdline')
>     @mock.patch('time.sleep', return_value=None)
>     def test_metadata_ok(self, sleep, m_get_cmdline, dhcpv4):
>         """
>         get_data() returns metadata, user data and vendor data.
>         """
>         m_get_cmdline.return_value = 'scaleway'
>     
>         # Make user data API return a valid response
>         httpretty.register_uri(httpretty.GET, self.metadata_url,
>                                body=MetadataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.userdata_url,
>                                body=DataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.vendordata_url,
>                                body=DataResponses.get_ok)
> >       self.datasource.get_data()
> 
> tests/unittests/test_datasource/test_scaleway.py:207: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceScaleway.py:216: in _get_data
>     util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceScaleway.py:194: in _crawl_metadata
>     resp = url_helper.readurl(self.metadata_address,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d2768ee0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.42.42/conf?format=json' with {'url': 'http://169.254.42.42/conf?format=json', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.42.42:80
> DEBUG    cloudinit.sources.DataSourceScaleway:util.py:2635 Crawl of metadata service took 0.002 seconds
> _______________ TestDataSourceScaleway.test_metadata_rate_limit ________________
> 
> self = <tests.unittests.test_datasource.test_scaleway.TestDataSourceScaleway testMethod=test_metadata_rate_limit>
> sleep = <MagicMock name='sleep' id='140126837624784'>
> m_get_cmdline = <MagicMock name='get_cmdline' id='140126839758800'>
> dhcpv4 = <MagicMock name='EphemeralDHCPv4' id='140126849590656'>
> 
>     @mock.patch('cloudinit.sources.DataSourceScaleway.EphemeralDHCPv4')
>     @mock.patch('cloudinit.sources.DataSourceScaleway.SourceAddressAdapter',
>                 get_source_address_adapter)
>     @mock.patch('cloudinit.util.get_cmdline')
>     @mock.patch('time.sleep', return_value=None)
>     def test_metadata_rate_limit(self, sleep, m_get_cmdline, dhcpv4):
>         """
>         get_data() is rate limited two times by the metadata API when fetching
>         user data.
>         """
>         m_get_cmdline.return_value = 'scaleway'
>     
>         httpretty.register_uri(httpretty.GET, self.metadata_url,
>                                body=MetadataResponses.get_ok)
>         httpretty.register_uri(httpretty.GET, self.vendordata_url,
>                                body=DataResponses.empty)
>     
>         httpretty.register_uri(
>             httpretty.GET, self.userdata_url,
>             responses=[
>                 httpretty.Response(body=DataResponses.rate_limited),
>                 httpretty.Response(body=DataResponses.rate_limited),
>                 httpretty.Response(body=DataResponses.get_ok),
>             ]
>         )
> >       self.datasource.get_data()
> 
> tests/unittests/test_datasource/test_scaleway.py:339: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/sources/__init__.py:279: in get_data
>     return_value = self._get_data()
> cloudinit/sources/DataSourceScaleway.py:216: in _get_data
>     util.log_time(
> cloudinit/util.py:2618: in log_time
>     ret = func(*args, **kwargs)
> cloudinit/sources/DataSourceScaleway.py:194: in _crawl_metadata
>     resp = url_helper.readurl(self.metadata_address,
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d0066ca0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://169.254.42.42/conf?format=json' with {'url': 'http://169.254.42.42/conf?format=json', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): 169.254.42.42:80
> DEBUG    cloudinit.sources.DataSourceScaleway:util.py:2635 Crawl of metadata service took 0.002 seconds
> __ TestInstallChefOmnibus.test_install_chef_from_omnibus_has_omnibus_version ___
> 
> self = <tests.unittests.test_handler.test_handler_chef.TestInstallChefOmnibus testMethod=test_install_chef_from_omnibus_has_omnibus_version>
> m_subp_blob = <MagicMock name='subp_blob_in_tempfile' id='140126837139728'>
> 
>     @mock.patch("cloudinit.config.cc_chef.OMNIBUS_URL", OMNIBUS_URL_HTTP)
>     @mock.patch('cloudinit.config.cc_chef.util.subp_blob_in_tempfile')
>     def test_install_chef_from_omnibus_has_omnibus_version(self, m_subp_blob):
>         """install_chef_from_omnibus provides version arg to OMNIBUS_URL."""
>         chef_outfile = self.tmp_path('chef.out', self.new_root)
>         response = '#!/bin/bash\necho "Hi Mom" > {0}'.format(chef_outfile)
>         httpretty.register_uri(
>             httpretty.GET, cc_chef.OMNIBUS_URL, body=response)
> >       cc_chef.install_chef_from_omnibus(omnibus_version='2.0')
> 
> tests/unittests/test_handler/test_handler_chef.py:91: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/config/cc_chef.py:305: in install_chef_from_omnibus
>     content = url_helper.readurl(url=url, retries=retries).contents
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71b879d9a0>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://www.chef.io/chef/install.sh' with {'url': 'http://www.chef.io/chef/install.sh', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): www.chef.io:80
> _ TestInstallChefOmnibus.test_install_chef_from_omnibus_runs_chef_url_content __
> 
> self = <tests.unittests.test_handler.test_handler_chef.TestInstallChefOmnibus testMethod=test_install_chef_from_omnibus_runs_chef_url_content>
> 
>     @mock.patch("cloudinit.config.cc_chef.OMNIBUS_URL", OMNIBUS_URL_HTTP)
>     def test_install_chef_from_omnibus_runs_chef_url_content(self):
>         """install_chef_from_omnibus calls subp_blob_in_tempfile."""
>         response = b'#!/bin/bash\necho "Hi Mom"'
>         httpretty.register_uri(
>             httpretty.GET, cc_chef.OMNIBUS_URL, body=response, status=200)
>         ret = (None, None)  # stdout, stderr but capture=False
>     
>         with mock.patch("cloudinit.config.cc_chef.util.subp_blob_in_tempfile",
>                         return_value=ret) as m_subp_blob:
> >           cc_chef.install_chef_from_omnibus()
> 
> tests/unittests/test_handler/test_handler_chef.py:46: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> cloudinit/config/cc_chef.py:305: in install_chef_from_omnibus
>     content = url_helper.readurl(url=url, retries=retries).contents
> cloudinit/url_helper.py:303: in readurl
>     r = sess.request(**req_args)
> /usr/lib/python3/dist-packages/requests/sessions.py:530: in request
>     resp = self.send(prep, **send_kwargs)
> /usr/lib/python3/dist-packages/requests/sessions.py:643: in send
>     r = adapter.send(request, **kwargs)
> /usr/lib/python3/dist-packages/requests/adapters.py:439: in send
>     resp = conn.urlopen(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:670: in urlopen
>     httplib_response = self._make_request(
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:426: in _make_request
>     six.raise_from(e, None)
> <string>:3: in raise_from
>     ???
> /usr/lib/python3/dist-packages/urllib3/connectionpool.py:421: in _make_request
>     httplib_response = conn.getresponse()
> /usr/lib/python3.9/http/client.py:1343: in getresponse
>     response = self.response_class(self.sock, method=self._method)
> /usr/lib/python3.9/http/client.py:245: in __init__
>     self.fp = sock.makefile("rb")
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <httpretty.core.fakesock.socket object at 0x7f71d245cf70>, mode = 'rb'
> bufsize = -1
> 
>     def makefile(self, mode='r', bufsize=-1):
>         """Returns this fake socket's own tempfile buffer.
>     
>         If there is an entry associated with the socket, the file
>         descriptor gets filled in with the entry data before being
>         returned.
>         """
>         self._mode = mode
>         self._bufsize = bufsize
>     
>         if self._entry:
>             t = threading.Thread(
>                 target=self._entry.fill_filekind, args=(self.fd,)
>             )
>             t.start()
>             if self.timeout == socket._GLOBAL_DEFAULT_TIMEOUT:
>                 timeout = None
>             else:
>                 timeout = self.timeout
>             t.join(timeout)
> >           if t.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> /usr/lib/python3/dist-packages/httpretty/core.py:438: AttributeError
> ------------------------------ Captured log call -------------------------------
> DEBUG    cloudinit.url_helper:url_helper.py:295 [0/6] open 'http://www.chef.io/chef/install.sh' with {'url': 'http://www.chef.io/chef/install.sh', 'allow_redirects': True, 'method': 'GET', 'headers': {'User-Agent': 'Cloud-Init/20.2'}} configuration
> DEBUG    urllib3.connectionpool:connectionpool.py:226 Starting new HTTP connection (1): www.chef.io:80
> =============================== warnings summary ===============================
> tests/unittests/test_handler/test_handler_puppet.py::TestPuppetHandle::test_handler_puppet_config_updates_puppet_conf
>   /<<PKGBUILDDIR>>/cloudinit/config/cc_puppet.py:162: DeprecationWarning: This method will be removed in future versions.  Use 'parser.read_file()' instead.
>     puppet_config.readfp(  # pylint: disable=W1505
> 
> -- Docs: https://docs.pytest.org/en/latest/warnings.html
> ====== 65 failed, 1560 passed, 19 skipped, 1 warnings in 2299.04 seconds =======
> make[1]: *** [debian/rules:16: override_dh_auto_test] Error 1

The full build log is available from:
   http://qa-logs.debian.net/2020/10/27/cloud-init_20.2-2_unstable.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.


Reply to: