Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add thread-safe add and get methods for plugin storage #12936

Merged
merged 1 commit into from
May 1, 2024

Conversation

devashish-patel
Copy link
Contributor

@devashish-patel devashish-patel commented Apr 18, 2024

Description

  • Implement AddPlugin and GetPlugin methods in SafePluginsDetailsStorage to allow safe concurrent access to the plugins map. AddPlugin will not overwrite existing entries, enhancing data integrity during concurrent operations.
  • This change ensures that plugin details can be accessed and modified concurrently without causing data races or corruption.

@devashish-patel devashish-patel self-assigned this Apr 18, 2024
@devashish-patel devashish-patel requested a review from a team as a code owner April 18, 2024 02:30
Copy link
Collaborator

@lbajolet-hashicorp lbajolet-hashicorp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a couple nitpicks but aside from that LGTM!

packer/plugin.go Outdated
func (pds *PluginsDetailsStorage) Set(key string, plugin PluginDetails) {
pds.rwMutex.Lock()
defer pds.rwMutex.Unlock()
if _, exists := pds.data[key]; !exists {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I understand why we'd want to do this, are we sure this is what we do want? I would think that silently disregarding a write may lead to surprises down the road as it's not usual for a map-like structure to not write already present keys

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree here I would expect this decisions to be made the caller upstream. Set should always write but the caller can choose if the map needs to be updated or not. tl;dr lets not do this here but where we actually call Set.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bouncing on this, I would advise not doing this check at all, even at callsite; reason is right now we are overriding the plugin being registered potentially (required_plugins may override the default discovered plugin).
There's a patch ready to PR for changing this behaviour so required_plugins has precedence in the discovery order, I suggest this is where we do this change, not around the Set.

packer/plugin.go Outdated
@@ -268,4 +269,26 @@ type PluginDetails struct {
PluginPath string
}

var PluginsDetailsStorage = map[string]PluginDetails{}
type PluginsDetailsStorage struct {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This type doesn't need to be exported as it is used only within this scope. Since our usage exposes a package level var we have all the access we need.

packer/plugin.go Outdated
Comment on lines 281 to 291
func (pds *PluginsDetailsStorage) Set(key string, plugin PluginDetails) {
pds.rwMutex.Lock()
defer pds.rwMutex.Unlock()
if _, exists := pds.data[key]; !exists {
pds.data[key] = plugin
}
}

func (pds *PluginsDetailsStorage) Get(key string) (PluginDetails, bool) {
pds.rwMutex.RLock()
defer pds.rwMutex.RUnlock()
plugin, exists := pds.data[key]
return plugin, exists
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So on the Set and Get methods one of the concerns was having to construct the key using component type constant and name. Which I agree can be error prone.

As an alternative what about having setters and getters for the three component types.

Suggested change
func (pds *PluginsDetailsStorage) Set(key string, plugin PluginDetails) {
pds.rwMutex.Lock()
defer pds.rwMutex.Unlock()
if _, exists := pds.data[key]; !exists {
pds.data[key] = plugin
}
}
func (pds *PluginsDetailsStorage) Get(key string) (PluginDetails, bool) {
pds.rwMutex.RLock()
defer pds.rwMutex.RUnlock()
plugin, exists := pds.data[key]
return plugin, exists
}
func (pds *PluginsDetailsStorage) SetBuilder(name string, value PluginDetails) {
key := fmt.Sprintf("%q-%q", PluginComponentBuilder, name)
return pds.set(key, value)
}
func (pds *PluginsDetailsStorage) set(key string, plugin PluginDetails) {
pds.rwMutex.Lock()
defer pds.rwMutex.Unlock()
if _, exists := pds.data[key]; !exists {
pds.data[key] = plugin
}
}
func (pds *PluginsDetailsStorage) GetBuilder(name string) (PluginDetails, bool) {
key := fmt.Sprintf("%q-%q", PluginComponentBuilder, name)
return pds.get(key)
}
func (pds *PluginsDetailsStorage) get(key string) (PluginDetails, bool) {
pds.rwMutex.RLock()
defer pds.rwMutex.RUnlock()
plugin, exists := pds.data[key]
return plugin, exists
}

Not only does it consolidate the logic for building the key into a single location. It also makes it easier to change implementation if needed.

Copy link
Member

@nywilken nywilken left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I rebased and tested. All looks good.

~>  make testacc
--- PASS: TestDecodeConfig (0.00s)
--- PASS: TestLoadExternalComponentsFromConfig (0.00s)
--- PASS: TestLoadExternalComponentsFromConfig_onlyProvisioner (0.00s)
--- PASS: TestLoadSingleComponent (0.00s)
--- PASS: TestExcludeHelpFunc (0.00s)
--- PASS: TestExtractMachineReadable (0.00s)
--- PASS: TestRandom (0.00s)
PASS
--- PASS: TestTest_noEnv (0.00s)
--- PASS: TestTest_preCheck (0.00s)
PASS
--- PASS: TestAccInitAndBuildBasicAmazonAmiDatasource (217.18s)
--- PASS: TestAccInitAndBuildBasicAmazonEbs (72.89s)
PASS
--- PASS: TestNullArtifact (0.00s)
--- PASS: TestBuilder_implBuilder (0.00s)
--- PASS: TestBuilderFileAcc_content (0.00s)
--- PASS: TestBuilderFileAcc_copy (0.00s)
--- PASS: TestContentSourceConflict (0.00s)
--- PASS: TestNoFilename (0.00s)
--- PASS: TestNoContent (0.00s)
PASS
--- PASS: TestNullArtifact (0.00s)
--- PASS: TestBuilder_implBuilder (0.00s)
--- PASS: TestConfigPrepare_port (0.00s)
--- PASS: TestConfigPrepare_host (0.00s)
--- PASS: TestConfigPrepare_sshCredential (0.00s)
PASS
--- PASS: TestBuildCommand_RunContext_CtxCancel (0.00s)
    --- PASS: TestBuildCommand_RunContext_CtxCancel/cancel_1_locked_build_-_debug_-_parallel=true (0.00s)
    --- PASS: TestBuildCommand_RunContext_CtxCancel/cancel_1_locked_build_-_debug_-_parallel=false (0.00s)
    --- PASS: TestBuildCommand_RunContext_CtxCancel/cancel_2_locked_builds_-_debug_-_parallel=true (0.00s)
    --- PASS: TestBuildCommand_RunContext_CtxCancel/cancel_2_locked_builds_-_debug_-_parallel=false (0.00s)
    --- PASS: TestBuildCommand_RunContext_CtxCancel/cancel_in_the_middle_with_2_pending_builds_-_parallel=true (0.00s)
    --- PASS: TestBuildCommand_RunContext_CtxCancel/cancel_1_pending_build_-_parallel=true (0.00s)
--- PASS: TestBuildWithCleanupScript (2.15s)
--- PASS: TestBuildParallel_1 (0.07s)
--- PASS: TestBuildParallel_2 (0.10s)
--- PASS: TestBuildParallel_Timeout (0.07s)
--- PASS: TestBuild (7.46s)
    --- PASS: TestBuild/var-args:_json_-_json_varfile_sets_an_apple_env_var (0.70s)
    --- PASS: TestBuild/json_-_json_varfile_sets_an_apple_env_var,_override_with_banana_cli_var (0.59s)
    --- PASS: TestBuild/var-args:_json_-_arg_sets_a_pear_env_var (0.36s)
    --- PASS: TestBuild/var-args:_json_-_nonexistent_var_file_errs (0.00s)
    --- PASS: TestBuild/var-args:_hcl_-_nonexistent_json_var_file_errs (0.00s)
    --- PASS: TestBuild/var-args:_hcl_-_nonexistent_hcl_var_file_errs (0.00s)
    --- PASS: TestBuild/var-args:_hcl_-_auto_varfile_sets_a_chocolate_env_var (0.75s)
    --- PASS: TestBuild/var-args:_hcl_-_hcl_varfile_sets_a_apple_env_var (0.52s)
    --- PASS: TestBuild/var-args:_hcl_-_json_varfile_sets_a_apple_env_var (0.12s)
    --- PASS: TestBuild/var-args:_hcl_-_arg_sets_a_tomato_env_var (0.13s)
    --- PASS: TestBuild/source_name:_HCL (0.36s)
    --- PASS: TestBuild/build_name:_JSON_except_potato (0.10s)
    --- PASS: TestBuild/build_name:_JSON_only_potato (0.06s)
    --- PASS: TestBuild/hcl_-_'except'_a_build_block (0.06s)
    --- PASS: TestBuild/hcl_-_'only'_a_build_block (0.07s)
    --- PASS: TestBuild/hcl_-_recipes (0.60s)
    --- PASS: TestBuild/hcl_-_recipes_-_except_carbonara (0.42s)
    --- PASS: TestBuild/hcl_-_recipes_-_only_lasagna (0.37s)
    --- PASS: TestBuild/hcl_-_recipes_-_only_recipes (0.41s)
    --- PASS: TestBuild/hcl_-_build.name_accessible (0.15s)
    --- PASS: TestBuild/hcl_-_valid_validation_rule_for_default_value (0.07s)
    --- PASS: TestBuild/hcl_-_valid_setting_from_varfile (0.06s)
    --- PASS: TestBuild/hcl_-_invalid_setting_from_varfile (0.06s)
    --- PASS: TestBuild/hcl_-_valid_cmd_(_invalid_varfile_bypased_) (0.06s)
    --- PASS: TestBuild/hcl_-_invalid_cmd_(_valid_varfile_bypased_) (0.06s)
    --- PASS: TestBuild/hcl_-_execute_and_use_datasource (0.06s)
    --- PASS: TestBuild/hcl_-_dynamic_source_blocks_in_a_build_block (0.31s)
    --- PASS: TestBuild/hcl_-_variables_can_be_used_in_shared_post-processor_fields (0.23s)
    --- PASS: TestBuild/hcl_-_using_build_variables_in_post-processor (0.16s)
    --- PASS: TestBuild/hcl_-_test_crash_#11381 (0.06s)
    --- PASS: TestBuild/hcl_-_using_variables_in_build_block (0.16s)
    --- PASS: TestBuild/hcl_-_recursive_local_using_input_var (0.07s)
    --- PASS: TestBuild/hcl_-_recursive_local_using_an_unset_input_var (0.07s)
    --- PASS: TestBuild/hcl_-_var_with_default_value_empty_object/list_can_be_set (0.06s)
    --- PASS: TestBuild/hcl_-_unknown_ (0.16s)
--- PASS: Test_build_output (0.56s)
    --- PASS: Test_build_output/packer_[build_--color=false_test-fixtures/hcl/reprepare/shell-local.pkr.hcl] (0.10s)
    --- PASS: Test_build_output/packer_[build_--color=false_test-fixtures/hcl/provisioner-override.pkr.hcl] (0.24s)
    --- PASS: Test_build_output/packer_[build_--color=false_test-fixtures/provisioners/provisioner-override.json] (0.22s)
--- PASS: TestBuildOnlyFileCommaFlags (0.92s)
--- PASS: TestBuildStdin (1.20s)
--- PASS: TestBuildOnlyFileMultipleFlags (0.79s)
--- PASS: TestBuildProvisionAndPosProcessWithBuildVariablesSharing (0.26s)
--- PASS: TestBuildEverything (1.12s)
--- PASS: TestBuildExceptFileCommaFlags (1.21s)
    --- PASS: TestBuildExceptFileCommaFlags/JSON:_except_build_and_post-processor (0.38s)
    --- PASS: TestBuildExceptFileCommaFlags/HCL2:_except_build_and_post-processor (0.44s)
    --- PASS: TestBuildExceptFileCommaFlags/HCL2-JSON:_except_build_and_post-processor (0.39s)
--- PASS: TestHCL2PostProcessorForceFlag (0.17s)
--- PASS: TestBuildCommand_HCLOnlyExceptOptions (0.57s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-only=chocolate] (0.06s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-only=*chocolate*] (0.06s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-except=*chocolate*] (0.06s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-except=*ch*] (0.06s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-only=*chocolate*_-only=*vanilla*] (0.06s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-except=*chocolate*_-except=*vanilla*] (0.06s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-only=my_build.file.chocolate] (0.06s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-except=my_build.file.chocolate] (0.07s)
    --- PASS: TestBuildCommand_HCLOnlyExceptOptions/[-only=file.cherry] (0.06s)
--- PASS: TestBuildWithNonExistingBuilder (0.16s)
--- PASS: TestBuildCommand_ParseArgs (0.00s)
    --- PASS: TestBuildCommand_ParseArgs/[file.json] (0.00s)
    --- PASS: TestBuildCommand_ParseArgs/[-parallel-builds=10_file.json] (0.00s)
    --- PASS: TestBuildCommand_ParseArgs/[-parallel-builds=1_file.json] (0.00s)
    --- PASS: TestBuildCommand_ParseArgs/[-parallel-builds=5_file.json] (0.00s)
    --- PASS: TestBuildCommand_ParseArgs/[-parallel-builds=1_-parallel-builds=5_otherfile.json] (0.00s)
--- PASS: TestProvisionerAndPostProcessorOnlyExcept (0.91s)
    --- PASS: TestProvisionerAndPostProcessorOnlyExcept/json_-_only_named_build (0.23s)
    --- PASS: TestProvisionerAndPostProcessorOnlyExcept/json_-_only_unnamed_build (0.23s)
    --- PASS: TestProvisionerAndPostProcessorOnlyExcept/hcl_-_only_one_source_build (0.22s)
    --- PASS: TestProvisionerAndPostProcessorOnlyExcept/hcl_-_only_other_build (0.23s)
--- PASS: TestBuildCmd (0.26s)
    --- PASS: TestBuildCmd/hcl_-_no_build_block_error (0.08s)
    --- PASS: TestBuildCmd/hcl_-_undefined_var_set_in_pkrvars (0.06s)
    --- PASS: TestBuildCmd/hcl_-_build_block_without_source (0.06s)
    --- PASS: TestBuildCmd/hcl_-_exclude_post-processor,_expect_no_warning (0.06s)
--- PASS: TestBuildSleepTimeout (0.24s)
--- PASS: Test_console (0.28s)
    --- PASS: Test_console/echo_"help"_|_packer_[console] (0.03s)
    --- PASS: Test_console/echo_"help"_|_packer_[console_--config-type=hcl2] (0.03s)
    --- PASS: Test_console/echo_"var.fruit"_|_packer_[console_test-fixtures/var-arg/fruit_builder.pkr.hcl] (0.02s)
    --- PASS: Test_console/echo_"upper(var.fruit)"_|_packer_[console_test-fixtures/var-arg/fruit_builder.pkr.hcl] (0.02s)
    --- PASS: Test_console/echo_"1_+_5"_|_packer_[console_--config-type=hcl2] (0.02s)
    --- PASS: Test_console/echo_"var.images"_|_packer_[console_test-fixtures/var-arg/map.pkr.hcl] (0.02s)
    --- PASS: Test_console/echo_"path.cwd"_|_packer_[console_test-fixtures/var-arg/map.pkr.hcl] (0.02s)
    --- PASS: Test_console/echo_"path.root"_|_packer_[console_test-fixtures/var-arg/map.pkr.hcl] (0.02s)
    --- PASS: Test_console/echo_"var.list_of_string[0]"_|_packer_[console_-var=list_of_string=["first"]_test-fixtures/hcl/variables/list_of_string] (0.02s)
    --- PASS: Test_console/echo_"var.untyped[2]"_|_packer_[console_test-fixtures/hcl/variables/untyped_var] (0.02s)
    --- PASS: Test_console/echo_"var.untyped"_|_packer_[console_-var=untyped=just_a_string_test-fixtures/hcl/variables/untyped_var] (0.02s)
    --- PASS: Test_console/echo_"var.untyped"_|_packer_[console_test-fixtures/hcl/variables/untyped_var/var.pkr.hcl] (0.02s)
    --- PASS: Test_console/echo_"var.untyped"_|_packer_[console_test-fixtures/hcl/variables/untyped_var/var.pkr.hcl]#01 (0.02s)
--- PASS: TestHelperProcess (0.00s)
--- PASS: TestFix (0.00s)
--- PASS: TestFix_invalidTemplate (0.00s)
--- PASS: TestFix_invalidTemplateDisableValidation (0.00s)
--- PASS: TestFmt (0.00s)
--- PASS: TestFmt_unformattedPKRVarsTemplate (0.00s)
--- PASS: TestFmt_unfomattedTemlateDirectory (0.00s)
--- PASS: TestFmt_Recursive (0.00s)
    --- PASS: TestFmt_Recursive/nested_formats_recursively (0.00s)
    --- PASS: TestFmt_Recursive/nested_no_recursive_format (0.00s)
--- PASS: Test_fmt_pipe (0.04s)
    --- PASS: Test_fmt_pipe/echo_"\nami_filter_name_=\"amzn2-ami-hvm-*-x86_64-gp2\"\nami_filter_owners_=[_\"137112412989\"_]\n\n"_|_packer_[fmt_-] (0.02s)
    --- PASS: Test_fmt_pipe/echo_"\nami_filter_name___=_\"amzn2-ami-hvm-*-x86_64-gp2\"\nami_filter_owners_=_[\"137112412989\"]\n\n"_|_packer_[fmt_-] (0.02s)
--- PASS: TestFmtParseError (0.02s)
--- PASS: Test_hcl2_upgrade (0.42s)
    --- PASS: Test_hcl2_upgrade/unknown_builder (0.02s)
    --- PASS: Test_hcl2_upgrade/complete (0.02s)
    --- PASS: Test_hcl2_upgrade/without-annotations (0.02s)
    --- PASS: Test_hcl2_upgrade/minimal (0.02s)
    --- PASS: Test_hcl2_upgrade/source-name (0.02s)
    --- PASS: Test_hcl2_upgrade/error-cleanup-provisioner (0.02s)
    --- PASS: Test_hcl2_upgrade/aws-access-config (0.02s)
    --- PASS: Test_hcl2_upgrade/escaping (0.02s)
    --- PASS: Test_hcl2_upgrade/vsphere_linux_options_and_network_interface (0.03s)
    --- PASS: Test_hcl2_upgrade/nonexistent (0.02s)
    --- PASS: Test_hcl2_upgrade/placeholders (0.02s)
    --- PASS: Test_hcl2_upgrade/ami_test (0.02s)
    --- PASS: Test_hcl2_upgrade/azure_shg (0.02s)
    --- PASS: Test_hcl2_upgrade/variables-only (0.02s)
    --- PASS: Test_hcl2_upgrade/variables-with-variables (0.02s)
    --- PASS: Test_hcl2_upgrade/complete-variables-with-template-engine (0.02s)
    --- PASS: Test_hcl2_upgrade/undeclared-variables (0.02s)
    --- PASS: Test_hcl2_upgrade/varfile-with-no-variables-block (0.02s)
    --- PASS: Test_hcl2_upgrade/bundled-plugin-used (0.02s)
--- PASS: Test_commands (0.13s)
    --- PASS: Test_commands/packer_[inspect_test-fixtures/var-arg/fruit_builder.pkr.hcl] (0.02s)
    --- PASS: Test_commands/packer_[inspect_-var=fruit=banana_test-fixtures/var-arg/fruit_builder.pkr.hcl] (0.02s)
    --- PASS: Test_commands/packer_[inspect_-var=fruit=peach_-var=unknown_string=also_peach_-var=unknown_unknown=["peach_too"]_-var=unknown_list_of_string=["first_peach",_"second_peach"]_test-fixtures/hcl/inspect/fruit_string.pkr.hcl] (0.02s)
    --- PASS: Test_commands/packer_[inspect_-var=fruit=peach_-var=other_default_from_env=apple_test-fixtures/hcl/inspect] (0.02s)
    --- PASS: Test_commands/packer_[inspect_test-fixtures/inspect/unset_var.json] (0.02s)
    --- PASS: Test_commands/packer_[inspect_test-fixtures/hcl-inspect-with-sensitive-vars] (0.02s)
--- PASS: TestValidateCommand (0.84s)
    --- PASS: TestValidateCommand/test-fixtures/validate/build.json (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/validate/build.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/validate/build_with_vars.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/validate-invalid/bad_provisioner.json (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/validate-invalid/missing_build_block.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/validate/null_var.json (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/validate/var_foo_with_no_default.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/hcl/validation/wrong_pause_before.pkr.hcl (0.09s)
    --- PASS: TestValidateCommand/test-fixtures/version_req/base_failure (0.00s)
    --- PASS: TestValidateCommand/test-fixtures/version_req/base_success (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/version_req/wrong_field_name (0.00s)
    --- PASS: TestValidateCommand/test-fixtures/validate/invalid_packer_block.pkr.hcl (0.00s)
    --- PASS: TestValidateCommand/test-fixtures/validate/circular_error.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/hcl/data-source-validation.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/hcl/local-ds-validate.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand/test-fixtures/hcl/local-ds-validate.pkr.hcl#01 (0.06s)
--- PASS: TestValidateCommand_SkipDatasourceExecution (0.06s)
--- PASS: TestValidateCommand_SyntaxOnly (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate/build.json (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate/build.pkr.hcl (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate/build_with_vars.pkr.hcl (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate-invalid/bad_provisioner.json (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate-invalid/missing_build_block.pkr.hcl (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate-invalid/broken.json (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate/null_var.json (0.00s)
    --- PASS: TestValidateCommand_SyntaxOnly/test-fixtures/validate/var_foo_with_no_default.pkr.hcl (0.00s)
--- PASS: TestValidateCommandOKVersion (0.06s)
--- PASS: TestValidateCommandBadVersion (0.06s)
--- PASS: TestValidateCommandExcept (0.25s)
    --- PASS: TestValidateCommandExcept/JSON:_validate_except_build_and_post-processor (0.06s)
    --- PASS: TestValidateCommandExcept/JSON:_fail_validate_except_build_and_post-processor (0.06s)
    --- PASS: TestValidateCommandExcept/HCL2:_validate_except_build_and_post-processor (0.06s)
    --- PASS: TestValidateCommandExcept/HCL2:_fail_validation_except_build_and_post-processor (0.07s)
--- PASS: TestValidateCommand_VarFiles (0.18s)
    --- PASS: TestValidateCommand_VarFiles/test-fixtures/validate/var-file-tests/basic.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand_VarFiles/test-fixtures/validate/var-file-tests/basic.pkr.hcl#01 (0.06s)
    --- PASS: TestValidateCommand_VarFiles/test-fixtures/validate/var-file-tests/basic.pkr.hcl#02 (0.06s)
--- PASS: TestValidateCommand_VarFilesWarnOnUndeclared (0.12s)
    --- PASS: TestValidateCommand_VarFilesWarnOnUndeclared/test-fixtures/validate/var-file-tests/basic.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand_VarFilesWarnOnUndeclared/test-fixtures/validate/var-file-tests/basic.pkr.hcl#01 (0.06s)
--- PASS: TestValidateCommand_VarFilesDisableWarnOnUndeclared (0.13s)
    --- PASS: TestValidateCommand_VarFilesDisableWarnOnUndeclared/test-fixtures/validate/var-file-tests/basic.pkr.hcl (0.06s)
    --- PASS: TestValidateCommand_VarFilesDisableWarnOnUndeclared/test-fixtures/validate/var-file-tests/basic.pkr.hcl#01 (0.06s)
--- PASS: TestValidateCommand_ShowLineNumForMissing (0.06s)
    --- PASS: TestValidateCommand_ShowLineNumForMissing/test-fixtures/validate-invalid/missing_build_block.pkr.hcl (0.06s)
--- PASS: TestVersionCommand_implements (0.00s)
PASS
--- PASS: TestFlagJSON_impl (0.00s)
--- PASS: TestFlagJSON (0.00s)
--- PASS: TestStringSlice_Set (0.00s)
    --- PASS: TestStringSlice_Set/basic (0.00s)
--- PASS: TestFlag_impl (0.00s)
--- PASS: TestFlag (0.00s)
PASS
--- PASS: TestStringFlag_implements (0.00s)
--- PASS: TestStringFlagSet (0.00s)
--- PASS: TestMultiStringFlag (0.00s)
PASS
PASS
PASS
--- PASS: TestHttpDataSource (2.74s)
    --- PASS: TestHttpDataSource/basic_test (1.29s)
    --- PASS: TestHttpDataSource/url_is_empty (0.67s)
    --- PASS: TestHttpDataSource/404_url (0.78s)
PASS
--- PASS: TestFixerAmazonEnhancedNetworking_Impl (0.00s)
--- PASS: TestFixerAmazonEnhancedNetworking (0.00s)
--- PASS: TestFixerAmazonPrivateIP_Impl (0.00s)
--- PASS: TestFixerAmazonPrivateIP (0.00s)
--- PASS: TestFixerAmazonPrivateIPNonBoolean (0.00s)
--- PASS: TestFixerAmazonShutdownBehavior (0.00s)
--- PASS: TestFixerAmazonShutdownBehavior_Fix_shutdown_behaviour (0.00s)
--- PASS: TestFixerAmazonTemporarySecurityCIDRs_Impl (0.00s)
--- PASS: TestFixerAmazonTemporarySecurityCIDRs (0.00s)
--- PASS: TestFixerAzureExcludeFromLatest (0.00s)
--- PASS: TestFixerAzureExcludeFromLatest_Fix_exlude_from_latest (0.00s)
--- PASS: TestFixerCleanImageName_Impl (0.00s)
--- PASS: TestFixerCleanImageName_Fix (0.00s)
--- PASS: TestFixerCommConfig_Impl (0.00s)
--- PASS: TestFixerCommConfig_Fix (0.00s)
--- PASS: TestFixerCreateTime_Impl (0.00s)
--- PASS: TestFixerCreateTime_Fix (0.00s)
--- PASS: TestFixerGalaxyCommand_Impl (0.00s)
--- PASS: TestFixerGalaxyCommand_Fix (0.00s)
--- PASS: TestFixerHypervDeprecations_impl (0.00s)
--- PASS: TestFixerHypervDeprecations_Fix (0.00s)
--- PASS: TestFixerHypervVmxcTypo_impl (0.00s)
--- PASS: TestFixerHypervVmxcTypo_Fix (0.00s)
--- PASS: TestFixerISOChecksumTypeAndURL_Impl (0.00s)
--- PASS: TestFixerISOChecksumTypeAndURL_Fix (0.00s)
--- PASS: TestFixerISOMD5_Impl (0.00s)
--- PASS: TestFixerISOMD5_Fix (0.00s)
--- PASS: TestFixerParallelsDeprecations (0.00s)
--- PASS: TestFixerParallelsDeprecations_Fix_parallels_tools_guest_path (0.00s)
--- PASS: TestFixerParallelsDeprecations_Fix_guest_os_distribution (0.00s)
--- PASS: TestFixerParallelsHeadless_Impl (0.00s)
--- PASS: TestFixerParallelsHeadless_Fix (0.00s)
--- PASS: TestFixerDockerTags (0.00s)
--- PASS: TestFixerDockerTags_Fix (0.00s)
--- PASS: TestFixerManifestPPFilename_Impl (0.00s)
--- PASS: TestFixerManifestPPFilename_Fix (0.00s)
--- PASS: TestFixerVagrantPPOverride_Impl (0.00s)
--- PASS: TestFixerVagrantPPOverride_Fix (0.00s)
--- PASS: TestFixerProxmoxType_Impl (0.00s)
--- PASS: TestFixerProxmoxType_Fix (0.00s)
--- PASS: TestFixerQEMUDiskSize_impl (0.00s)
--- PASS: TestFixerQEMUDiskSize (0.00s)
--- PASS: TestFixerQEMUHostPort_impl (0.00s)
--- PASS: TestFixerQEMUHostPort (0.00s)
--- PASS: TestFixerScalewayAccessKey_Fix_Impl (0.00s)
--- PASS: TestFixerScalewayAccessKey_Fix (0.00s)
--- PASS: TestFixerSSHTimout_Impl (0.00s)
--- PASS: TestFixerSSHTimout_Fix (0.00s)
--- PASS: TestFixerSSHDisableAgent_Impl (0.00s)
--- PASS: TestFixerSSHDisableAgent_Fix (0.00s)
--- PASS: TestFixerSSHKeyPath_Impl (0.00s)
--- PASS: TestFixerSSHKeyPath_Fix (0.00s)
--- PASS: TestFix_allFixersEnabled (0.00s)
--- PASS: TestFixerVirtualBoxGAAttach_Impl (0.00s)
--- PASS: TestFixerVirtualBoxGAAttach_Fix (0.00s)
--- PASS: TestFixerVirtualBoxRename_impl (0.00s)
--- PASS: TestFixerVirtualBoxRename_Fix (0.00s)
--- PASS: TestFixerVirtualBoxRenameFix_provisionerOverride (0.00s)
--- PASS: TestFixerVMwareCompaction_impl (0.00s)
--- PASS: TestFixerVMwareCompaction_Fix (0.00s)
--- PASS: TestFixerVMwareRename_impl (0.00s)
--- PASS: TestFixerVMwareRename_Fix (0.00s)
--- PASS: TestFixerVSphereNetwork_impl (0.00s)
--- PASS: TestFixerVSphereNetwork_Fix (0.00s)
PASS
--- PASS: TestHCL2Formatter_Format (0.00s)
--- PASS: TestHCL2Formatter_Format_Write (0.00s)
--- PASS: TestHCL2Formatter_Format_ShowDiff (0.01s)
--- PASS: Test_ParseHCPPackerRegistryBlock (0.01s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/bucket_name_as_variable (0.00s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/bucket_labels_and_build_labels_as_variables (0.00s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/invalid_hcp_packer_registry_config (0.00s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/long_hcp_packer_registry.description (0.00s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/bucket_name_too_short (0.00s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/bucket_name_too_long (0.00s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/bucket_name_invalid_chars (0.00s)
    --- PASS: Test_ParseHCPPackerRegistryBlock/bucket_name_OK (0.00s)
--- PASS: TestPackerConfig_ParseProvisionerBlock (0.00s)
    --- PASS: TestPackerConfig_ParseProvisionerBlock/success_-_provisioner_is_valid (0.00s)
    --- PASS: TestPackerConfig_ParseProvisionerBlock/failure_-_provisioner_override_is_malformed (0.00s)
    --- PASS: TestPackerConfig_ParseProvisionerBlock/failure_-_provisioner_override.test_is_malformed (0.00s)
--- PASS: TestParse_build (0.02s)
    --- PASS: TestParse_build/basic_build_no_src (0.00s)
    --- PASS: TestParse_build/untyped_provisioner (0.00s)
    --- PASS: TestParse_build/nonexistent_provisioner (0.00s)
    --- PASS: TestParse_build/two_error-cleanup-provisioner (0.00s)
    --- PASS: TestParse_build/untyped_post-processor (0.00s)
    --- PASS: TestParse_build/nonexistent_post-processor (0.00s)
    --- PASS: TestParse_build/invalid_source (0.00s)
    --- PASS: TestParse_build/named_build (0.00s)
    --- PASS: TestParse_build/post-processor_with_only_and_except (0.01s)
    --- PASS: TestParse_build/provisioner_with_only_and_except (0.00s)
    --- PASS: TestParse_build/provisioner_with_packer_version_interpolation (0.00s)
    --- PASS: TestParse_build/variable_interpolation_for_build_name_and_description (0.00s)
    --- PASS: TestParse_build/invalid_variable_for_build_name (0.00s)
    --- PASS: TestParse_build/use_build.name_in_post-processor_block (0.00s)
    --- PASS: TestParse_build/use_build.name_in_provisioner_block (0.00s)
--- PASS: TestParse_datasource (0.01s)
    --- PASS: TestParse_datasource/two_basic_datasources (0.00s)
    --- PASS: TestParse_datasource/recursive_datasources (0.00s)
    --- PASS: TestParse_datasource/untyped_datasource (0.00s)
    --- PASS: TestParse_datasource/unnamed_source (0.00s)
    --- PASS: TestParse_datasource/nonexistent_source (0.00s)
    --- PASS: TestParse_datasource/duplicate_source (0.00s)
    --- PASS: TestParse_datasource/cyclic_dependency_between_data_sources (0.00s)
--- PASS: TestParser_complete (0.08s)
    --- PASS: TestParser_complete/working_build (0.07s)
--- PASS: TestParser_ValidateFilterOption (0.00s)
    --- PASS: TestParser_ValidateFilterOption/*foo* (0.00s)
    --- PASS: TestParser_ValidateFilterOption/foo[]bar (0.00s)
--- PASS: TestParser_no_init (0.00s)
    --- PASS: TestParser_no_init/working_build_with_imports (0.00s)
    --- PASS: TestParser_no_init/duplicate_required_plugin_accessor_fails (0.00s)
    --- PASS: TestParser_no_init/invalid_inexplicit_source.pkr.hcl (0.00s)
    --- PASS: TestParser_no_init/invalid_short_source.pkr.hcl (0.00s)
    --- PASS: TestParser_no_init/invalid_inexplicit_source_2.pkr.hcl (0.00s)
--- PASS: TestPackerConfig_required_plugin_parse (0.00s)
    --- PASS: TestPackerConfig_required_plugin_parse/required_plugin (0.00s)
    --- PASS: TestPackerConfig_required_plugin_parse/required_plugin_forked_no_redirect (0.00s)
    --- PASS: TestPackerConfig_required_plugin_parse/required_plugin_forked (0.00s)
    --- PASS: TestPackerConfig_required_plugin_parse/missing-required-plugin-for-pre-defined-builder (0.00s)
--- PASS: TestParse_source (0.00s)
    --- PASS: TestParse_source/two_basic_sources (0.00s)
    --- PASS: TestParse_source/untyped_source (0.00s)
    --- PASS: TestParse_source/unnamed_source (0.00s)
    --- PASS: TestParse_source/unused_source_with_unknown_type_fails (0.00s)
    --- PASS: TestParse_source/used_source_with_unknown_type_fails (0.00s)
    --- PASS: TestParse_source/duplicate_source (0.00s)
--- PASS: TestParse_variables (0.01s)
    --- PASS: TestParse_variables/basic_variables (0.00s)
    --- PASS: TestParse_variables/duplicate_variable (0.00s)
    --- PASS: TestParse_variables/duplicate_variable_in_variables (0.00s)
    --- PASS: TestParse_variables/duplicate_local_block (0.00s)
    --- PASS: TestParse_variables/invalid_default_type (0.00s)
    --- PASS: TestParse_variables/unknown_key (0.00s)
    --- PASS: TestParse_variables/unset_used_variable (0.00s)
    --- PASS: TestParse_variables/unset_unused_variable (0.00s)
    --- PASS: TestParse_variables/locals_within_another_locals_usage_in_different_files (0.00s)
    --- PASS: TestParse_variables/recursive_locals (0.00s)
    --- PASS: TestParse_variables/set_variable_from_var-file (0.00s)
    --- PASS: TestParse_variables/unknown_variable_from_var-file (0.00s)
    --- PASS: TestParse_variables/provisioner_variable_decoding (0.00s)
    --- PASS: TestParse_variables/valid_validation_block (0.00s)
    --- PASS: TestParse_variables/valid_validation_block_-_invalid_default (0.00s)
--- PASS: TestVariables_collectVariableValues (0.00s)
    --- PASS: TestVariables_collectVariableValues/string (0.00s)
    --- PASS: TestVariables_collectVariableValues/quoted_string (0.00s)
    --- PASS: TestVariables_collectVariableValues/array_of_strings (0.00s)
    --- PASS: TestVariables_collectVariableValues/bool (0.00s)
    --- PASS: TestVariables_collectVariableValues/invalid_env_var (0.00s)
    --- PASS: TestVariables_collectVariableValues/undefined_but_set_value_-_pkrvar_file_-_normal_mode (0.00s)
    --- PASS: TestVariables_collectVariableValues/undefined_but_set_value_-_pkrvar_file_-_strict_mode (0.00s)
    --- PASS: TestVariables_collectVariableValues/undefined_but_set_value_-_env (0.00s)
    --- PASS: TestVariables_collectVariableValues/undefined_but_set_value_-_argv (0.00s)
    --- PASS: TestVariables_collectVariableValues/value_not_corresponding_to_type_-_env (0.00s)
    --- PASS: TestVariables_collectVariableValues/value_not_corresponding_to_type_-_cfg_file (0.00s)
    --- PASS: TestVariables_collectVariableValues/value_not_corresponding_to_type_-_argv (0.00s)
    --- PASS: TestVariables_collectVariableValues/defining_a_variable_block_in_a_variables_file_is_invalid_ (0.00s)
PASS
--- PASS: TestPluginParseSourceString (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_only_one_component,_rejected (0.00s)
    --- PASS: TestPluginParseSourceString/valid:_two_components_in_name (0.00s)
    --- PASS: TestPluginParseSourceString/valid:_three_components,_nothing_superfluous (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_trailing_slash (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_reject_because_scheme_specified (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_reject_because_query_non_nil (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_reject_because_fragment_present (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_leading_and_trailing_slashes_are_removed (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_leading_slashes_are_removed (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_plugin_name_contains_packer- (0.00s)
    --- PASS: TestPluginParseSourceString/invalid:_plugin_name_contains_packer-plugin- (0.00s)
--- PASS: TestPluginName (0.00s)
    --- PASS: TestPluginName/valid_minimal_name (0.00s)
    --- PASS: TestPluginName/invalid_name_with_prefix (0.00s)
--- PASS: TestPluginParts (0.00s)
    --- PASS: TestPluginParts/valid_with_two_parts (0.00s)
    --- PASS: TestPluginParts/valid_with_four_parts (0.00s)
    --- PASS: TestPluginParts/valid,_with_double-slashes_in_the_name (0.00s)
PASS
--- PASS: TestLegacyIsotime_empty (0.00s)
--- PASS: TestLegacyIsotime_inputs (0.00s)
    --- PASS: TestLegacyIsotime_inputs/legacy_isotime(cty.StringVal("01-02-2006")) (0.00s)
    --- PASS: TestLegacyIsotime_inputs/legacy_isotime(cty.StringVal("Mon_Jan_02,_2006")) (0.00s)
--- PASS: TestIndex (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.StringVal("a"),_cty.StringVal("b"),_cty.StringVal("c")}),_cty.StringVal("a")) (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.StringVal("a"),_cty.StringVal("b"),_cty.UnknownVal(cty.String)}),_cty.StringVal("a")) (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.StringVal("a"),_cty.StringVal("b"),_cty.StringVal("c")}),_cty.StringVal("b")) (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.StringVal("a"),_cty.StringVal("b"),_cty.StringVal("c")}),_cty.StringVal("z")) (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.StringVal("1"),_cty.StringVal("2"),_cty.StringVal("3")}),_cty.NumberIntVal(1)) (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.NumberIntVal(1),_cty.NumberIntVal(2),_cty.NumberIntVal(3)}),_cty.NumberIntVal(2)) (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.NumberIntVal(1),_cty.NumberIntVal(2),_cty.NumberIntVal(3)}),_cty.NumberIntVal(4)) (0.00s)
    --- PASS: TestIndex/index(cty.ListVal([]cty.Value{cty.NumberIntVal(1),_cty.NumberIntVal(2),_cty.NumberIntVal(3)}),_cty.StringVal("1")) (0.00s)
    --- PASS: TestIndex/index(cty.TupleVal([]cty.Value{cty.NumberIntVal(1),_cty.NumberIntVal(2),_cty.NumberIntVal(3)}),_cty.NumberIntVal(1)) (0.00s)
--- PASS: TestLength (0.00s)
    --- PASS: TestLength/Length(cty.ListValEmpty(cty.Number)) (0.00s)
    --- PASS: TestLength/Length(cty.ListVal([]cty.Value{cty.True})) (0.00s)
    --- PASS: TestLength/Length(cty.ListVal([]cty.Value{cty.UnknownVal(cty.Bool)})) (0.00s)
    --- PASS: TestLength/Length(cty.SetValEmpty(cty.Number)) (0.00s)
    --- PASS: TestLength/Length(cty.SetVal([]cty.Value{cty.True})) (0.00s)
    --- PASS: TestLength/Length(cty.MapValEmpty(cty.Bool)) (0.00s)
    --- PASS: TestLength/Length(cty.MapVal(map[string]cty.Value{"hello":cty.True})) (0.00s)
    --- PASS: TestLength/Length(cty.EmptyTupleVal) (0.00s)
    --- PASS: TestLength/Length(cty.UnknownVal(cty.EmptyTuple)) (0.00s)
    --- PASS: TestLength/Length(cty.TupleVal([]cty.Value{cty.True})) (0.00s)
    --- PASS: TestLength/Length(cty.EmptyObjectVal) (0.00s)
    --- PASS: TestLength/Length(cty.UnknownVal(cty.EmptyObject)) (0.00s)
    --- PASS: TestLength/Length(cty.ObjectVal(map[string]cty.Value{"true":cty.True})) (0.00s)
    --- PASS: TestLength/Length(cty.UnknownVal(cty.List(cty.Bool))) (0.00s)
    --- PASS: TestLength/Length(cty.DynamicVal) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("hello")) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("")) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("1")) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("Живой_Журнал")) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("noël")) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("wé́́é́́é́́!")) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("baffle")) (0.00s)
    --- PASS: TestLength/Length(cty.StringVal("😸😾")) (0.00s)
    --- PASS: TestLength/Length(cty.UnknownVal(cty.String)) (0.00s)
--- PASS: TestTemplateFile (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/hello.txt"),_cty.EmptyObjectVal) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/icon.png"),_cty.EmptyObjectVal) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/missing"),_cty.EmptyObjectVal) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/hello.tmpl"),_cty.MapVal(map[string]cty.Value{"name":cty.StringVal("Jodie")})) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/hello.tmpl"),_cty.MapVal(map[string]cty.Value{"name!":cty.StringVal("Jodie")})) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/hello.tmpl"),_cty.ObjectVal(map[string]cty.Value{"name":cty.StringVal("Jimbo")})) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/hello.tmpl"),_cty.EmptyObjectVal) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/func.tmpl"),_cty.ObjectVal(map[string]cty.Value{"list":cty.ListVal([]cty.Value{cty.StringVal("a"),_cty.StringVal("b"),_cty.StringVal("c")})})) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/recursive.tmpl"),_cty.MapValEmpty(cty.String)) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/list.tmpl"),_cty.ObjectVal(map[string]cty.Value{"list":cty.ListVal([]cty.Value{cty.StringVal("a"),_cty.StringVal("b"),_cty.StringVal("c")})})) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/list.tmpl"),_cty.ObjectVal(map[string]cty.Value{"list":cty.True})) (0.00s)
    --- PASS: TestTemplateFile/TemplateFile(cty.StringVal("testdata/bare.tmpl"),_cty.ObjectVal(map[string]cty.Value{"val":cty.True})) (0.00s)
PASS
--- PASS: TestConfigValueFromHCL2 (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.True (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.False (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.NumberIntVal(12) (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.NumberFloatVal(12.5) (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.StringVal("hello_world") (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.ObjectVal(map[string]cty.Value{"address":cty.ObjectVal(map[string]cty.Value{"city":cty.StringVal("Fridgewater"),_"state":cty.StringVal("MA"),_"street":cty.ListVal([]cty.Value{cty.StringVal("421_Shoreham_Loop")}),_"zip":cty.StringVal("91037")}),_"age":cty.NumberIntVal(19),_"name":cty.StringVal("Ermintrude")}) (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.MapVal(map[string]cty.Value{"bar":cty.StringVal("baz"),_"foo":cty.StringVal("bar")}) (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.TupleVal([]cty.Value{cty.StringVal("foo"),_cty.True}) (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.NullVal(cty.String) (0.00s)
    --- PASS: TestConfigValueFromHCL2/cty.UnknownVal(cty.String) (0.00s)
--- PASS: TestWriteUnknownPlaceholderValues (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#01 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#02 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#03 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#04 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#05 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#06 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#07 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#08 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#09 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#10 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#11 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#12 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#13 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#14 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#15 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#16 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#17 (0.00s)
    --- PASS: TestWriteUnknownPlaceholderValues/TestWriteUnknownPlaceholderValues#18 (0.00s)
PASS
--- PASS: TestGetOldestProject (0.00s)
    --- PASS: TestGetOldestProject/Only_one_project,_project_exists,_success (0.00s)
    --- PASS: TestGetOldestProject/Multiple_projects,_pick_the_oldest (0.00s)
    --- PASS: TestGetOldestProject/Multiple_projects,_different_order,_pick_the_oldest (0.00s)
    --- PASS: TestGetOldestProject/No_projects,_should_error (0.00s)
PASS
--- PASS: Test_IsHCPDisabled (0.00s)
    --- PASS: Test_IsHCPDisabled/nothing_set (0.00s)
    --- PASS: Test_IsHCPDisabled/registry_set_with_1 (0.00s)
    --- PASS: Test_IsHCPDisabled/registry_set_with_0 (0.00s)
    --- PASS: Test_IsHCPDisabled/registry_set_with_OFF (0.00s)
    --- PASS: Test_IsHCPDisabled/registry_set_with_off (0.00s)
PASS
--- PASS: TestInitialize_NewBucketNewVersion (0.00s)
--- PASS: TestInitialize_UnsetTemplateTypeError (0.00s)
--- PASS: TestInitialize_ExistingBucketNewVersion (0.00s)
--- PASS: TestInitialize_ExistingBucketExistingVersion (0.00s)
--- PASS: TestInitialize_ExistingBucketCompleteVersion (0.00s)
--- PASS: TestUpdateBuildStatus (0.00s)
--- PASS: TestUpdateBuildStatus_DONENoImages (0.00s)
--- PASS: TestBucket_CreateInitialBuildForVersion (0.00s)
--- PASS: TestBucket_UpdateLabelsForBuild (0.00s)
    --- PASS: TestBucket_UpdateLabelsForBuild/no_bucket_or_build_specific_labels (0.00s)
    --- PASS: TestBucket_UpdateLabelsForBuild/bucket_build_labels (0.00s)
    --- PASS: TestBucket_UpdateLabelsForBuild/bucket_build_labels_and_build_specific_label (0.00s)
    --- PASS: TestBucket_UpdateLabelsForBuild/build_specific_label (0.00s)
--- PASS: TestBucket_UpdateLabelsForBuild_withMultipleBuilds (0.00s)
--- PASS: TestBucket_PopulateVersion (0.00s)
    --- PASS: TestBucket_PopulateVersion/populating_version_with_existing_incomplete_build_and_no_bucket_build_labels_does_nothing (0.00s)
    --- PASS: TestBucket_PopulateVersion/populating_version_with_existing_incomplete_build_should_add_bucket_build_labels (0.00s)
    --- PASS: TestBucket_PopulateVersion/populating_version_with_existing_incomplete_build_should_update_bucket_build_labels (0.00s)
    --- PASS: TestBucket_PopulateVersion/populating_version_with_completed_build_should_not_modify_any_labels (0.00s)
    --- PASS: TestBucket_PopulateVersion/populating_version_with_existing_build_should_only_modify_bucket_build_labels (0.00s)
--- PASS: TestReadFromHCLBuildBlock (0.00s)
    --- PASS: TestReadFromHCLBuildBlock/configure_bucket_using_only_hcp_packer_registry_block (0.00s)
--- PASS: TestCompleteBuild (0.00s)
    --- PASS: TestCompleteBuild/OK_-_one_artifact_compatible_with_HCP (0.00s)
    --- PASS: TestCompleteBuild/Fail_-_no_artifacts (0.00s)
    --- PASS: TestCompleteBuild/Fail_-_only_non_HCP_compatible_artifacts (0.00s)
    --- PASS: TestCompleteBuild/OK_-_one_hcp_artifact,_one_non_hcp_artifact_(order_matters) (0.00s)
    --- PASS: TestCompleteBuild/OK_-_one_non_hcp_artifact,_one_hcp_artifact_(order_matters) (0.00s)
--- PASS: TestVersion_Initialize (0.55s)
    --- PASS: TestVersion_Initialize/using_fingerprint_env_variable (0.00s)
    --- PASS: TestVersion_Initialize/using_git_fingerprint (0.55s)
    --- PASS: TestVersion_Initialize/using_no_fingerprint_in_clean_directory (0.00s)
PASS
--- PASS: TestBuild_Name (0.00s)
--- PASS: TestBuild_Prepare (0.00s)
--- PASS: TestBuild_Prepare_SkipWhenBuilderAlreadyInitialized (0.00s)
--- PASS: TestBuild_Prepare_Twice (0.00s)
--- PASS: TestBuildPrepare_BuilderWarnings (0.00s)
--- PASS: TestBuild_Prepare_Debug (0.00s)
--- PASS: TestBuildPrepare_variables_default (0.00s)
--- PASS: TestBuildPrepare_ProvisionerGetsGeneratedMap (0.00s)
--- PASS: TestBuild_Run (0.00s)
--- PASS: TestBuild_Run_Artifacts (0.00s)
--- PASS: TestBuild_RunBeforePrepare (0.00s)
--- PASS: TestBuild_Cancel (0.00s)
--- PASS: TestClient (0.01s)
--- PASS: TestClientStart_badVersion (0.01s)
--- PASS: TestClient_Start_Timeout (0.05s)
--- PASS: TestClient_Stderr (0.02s)
--- PASS: TestClient_Stdin (0.07s)
--- PASS: TestBuilder_NoExist (0.00s)
--- PASS: TestBuilder_Good (0.01s)
--- PASS: TestDatasource_NoExist (0.00s)
--- PASS: TestDatasource_Good (0.01s)
--- PASS: TestHook_NoExist (0.00s)
--- PASS: TestHook_Good (0.01s)
--- PASS: TestPostProcessor_NoExist (0.00s)
--- PASS: TestPostProcessor_Good (0.01s)
--- PASS: TestProvisioner_NoExist (0.00s)
--- PASS: TestProvisioner_Good (0.01s)
--- PASS: TestCoreBuildNames (0.00s)
--- PASS: TestCoreBuild_basic (0.00s)
--- PASS: TestCoreBuild_basicInterpolated (0.00s)
--- PASS: TestCoreBuild_env (0.00s)
--- PASS: TestCoreBuild_IgnoreTemplateVariables (0.00s)
--- PASS: TestCoreBuild_buildNameVar (0.00s)
--- PASS: TestCoreBuild_buildTypeVar (0.00s)
--- PASS: TestCoreBuild_nonExist (0.00s)
--- PASS: TestCoreBuild_prov (0.00s)
--- PASS: TestCoreBuild_provSkip (0.00s)
--- PASS: TestCoreBuild_provSkipInclude (0.00s)
--- PASS: TestCoreBuild_provOverride (0.00s)
--- PASS: TestCoreBuild_postProcess (0.00s)
--- PASS: TestCoreBuild_templatePath (0.00s)
--- PASS: TestCoreValidate (0.00s)
--- PASS: TestCore_InterpolateUserVars (0.01s)
--- PASS: TestCore_InterpolateUserVars_VarFile (0.01s)
--- PASS: TestSensitiveVars (0.00s)
--- PASS: TestIsDoneInterpolating (0.00s)
--- PASS: TestEnvAndFileVars (0.01s)
--- PASS: TestCoreBuild_provRetry (0.00s)
--- PASS: TestCoreBuild_packerVersion (0.00s)
--- PASS: TestCoreBuild_buildNameIntepolation (0.00s)
--- PASS: TestDiscoverReturnsIfMagicCookieSet (0.00s)
--- PASS: TestMultiPlugin_describe (1.50s)
--- PASS: TestMultiPlugin_describe_installed (1.35s)
--- PASS: TestMultiPlugin_describe_installed_for_invalid (0.00s)
    --- PASS: TestMultiPlugin_describe_installed_for_invalid/Incorrectly_named_plugins (0.00s)
    --- PASS: TestMultiPlugin_describe_installed_for_invalid/Plugins_missing_checksums (0.00s)
--- PASS: TestMultiPlugin_defaultName (0.08s)
--- PASS: TestMultiPlugin_IgnoreChecksumFile (0.00s)
--- PASS: TestMultiPlugin_defaultName_each_plugin_type (0.12s)
--- PASS: TestHelperPlugins (0.00s)
--- PASS: TestHelperProcess (0.00s)
--- PASS: TestProgressTracking_open_close (0.00s)
--- PASS: TestProgressTracking_multi_open_close (0.00s)
--- PASS: TestProgressTracking_races (0.00s)
--- PASS: TestProvisionHook_Impl (0.00s)
--- PASS: TestProvisionHook (0.00s)
--- PASS: TestProvisionHook_nilComm (0.00s)
--- PASS: TestProvisionHook_cancel (0.00s)
--- PASS: TestPausedProvisioner_impl (0.00s)
--- PASS: TestPausedProvisionerPrepare (0.00s)
--- PASS: TestPausedProvisionerProvision (0.00s)
--- PASS: TestPausedProvisionerProvision_waits (0.05s)
--- PASS: TestPausedProvisionerCancel (0.00s)
--- PASS: TestDebuggedProvisioner_impl (0.00s)
--- PASS: TestDebuggedProvisionerPrepare (0.00s)
--- PASS: TestDebuggedProvisionerProvision (0.00s)
--- PASS: TestDebuggedProvisionerCancel (0.00s)
--- PASS: TestRetriedProvisioner_impl (0.00s)
--- PASS: TestRetriedProvisionerPrepare (0.00s)
--- PASS: TestRetriedProvisionerProvision (0.00s)
--- PASS: TestRetriedProvisionerCancelledProvision (0.00s)
--- PASS: TestRetriedProvisionerCancel (0.00s)
--- PASS: TestFlattenConfigKeys_nil (0.00s)
--- PASS: TestFlattenConfigKeys_nested (0.00s)
--- PASS: TestCheckpointTelemetry (0.00s)
--- PASS: TestColoredUi (0.00s)
--- PASS: TestColoredUi_noColorEnv (0.00s)
--- PASS: TestTargetedUI (0.00s)
--- PASS: TestColoredUi_ImplUi (0.00s)
--- PASS: TestTargetedUI_ImplUi (0.00s)
--- PASS: TestBasicUi_ImplUi (0.00s)
--- PASS: TestBasicUi_Error (0.00s)
--- PASS: TestBasicUi_Say (0.00s)
--- PASS: TestBasicUi_Ask (0.00s)
--- PASS: TestMachineReadableUi_ImplUi (0.00s)
--- PASS: TestMachineReadableUi (0.00s)
PASS
--- PASS: TestChecksumFileEntry_init (0.00s)
--- PASS: TestRequirement_InstallLatest (0.01s)
    --- PASS: TestRequirement_InstallLatest/already-installed-same-api-version (0.00s)
    --- PASS: TestRequirement_InstallLatest/already-installed-compatible-api-minor-version (0.00s)
    --- PASS: TestRequirement_InstallLatest/ignore-incompatible-higher-protocol-version (0.00s)
    --- PASS: TestRequirement_InstallLatest/upgrade-with-diff-protocol-version (0.00s)
    --- PASS: TestRequirement_InstallLatest/upgrade-with-same-protocol-version (0.00s)
    --- PASS: TestRequirement_InstallLatest/upgrade-with-one-missing-checksum-file (0.00s)
    --- PASS: TestRequirement_InstallLatest/wrong-zip-checksum (0.00s)
    --- PASS: TestRequirement_InstallLatest/wrong-local-checksum (0.00s)
--- PASS: Test_LessInstallList (0.00s)
    --- PASS: Test_LessInstallList/v1.2.1_<_v1.2.2_=>_true (0.00s)
    --- PASS: Test_LessInstallList/v1.2.1_=_v1.2.1_=>_false (0.00s)
    --- PASS: Test_LessInstallList/v1.2.2_<_v1.2.1_=>_false (0.00s)
    --- PASS: Test_LessInstallList/v1.2.2-dev_<_v1.2.2_=>_true (0.00s)
    --- PASS: Test_LessInstallList/v1.2.2_<_v1.2.2-dev_=>_false (0.00s)
    --- PASS: Test_LessInstallList/v1.2.1_<_v1.2.2-dev_=>_true (0.00s)
    --- PASS: Test_LessInstallList/v1.2.3_<_v1.2.2-dev_=>_false (0.00s)
    --- PASS: Test_LessInstallList/v1.2.3_x5.0_<_v1.2.3_x5.1_=>_true (0.00s)
    --- PASS: Test_LessInstallList/v1.2.3_x5.0_<_v1.2.3_x5.0_=>_false (0.00s)
    --- PASS: Test_LessInstallList/v1.2.3_x4.15_<_v1.2.3_x5.0_=>_true (0.00s)
    --- PASS: Test_LessInstallList/v1.2.3_x9.0_<_v1.2.3_x10.0_=>_true (0.00s)
    --- PASS: Test_LessInstallList/v1.2.3_x5.9_<_v1.2.3_x5.10_=>_true (0.00s)
    --- PASS: Test_LessInstallList/v1.2.3_x5.0_<_v1.2.3_x4.15_=>_false (0.00s)
PASS
--- PASS: TestChecksumSHA1 (0.00s)
PASS
--- PASS: TestArtifact_ImplementsArtifact (0.00s)
--- PASS: TestDetectFilename (0.00s)
--- PASS: TestCompressOptions (0.00s)
--- PASS: TestCompressInterpolation (0.00s)
--- PASS: TestArchive (0.01s)
    --- PASS: TestArchive/tar.gz (0.00s)
    --- PASS: TestArchive/gz (0.00s)
    --- PASS: TestArchive/lz4 (0.00s)
    --- PASS: TestArchive/bzip2 (0.00s)
    --- PASS: TestArchive/zip (0.00s)
    --- PASS: TestArchive/tar (0.00s)
PASS
--- PASS: TestPostProcessor_ImplementsPostProcessor (0.00s)
--- PASS: TestPostProcessor_Impl (0.00s)
--- PASS: TestPostProcessorPrepare_Defaults (0.00s)
--- PASS: TestPostProcessorPrepare_InlineShebang (0.00s)
--- PASS: TestPostProcessorPrepare_InvalidKey (0.00s)
--- PASS: TestPostProcessorPrepare_Script (0.00s)
--- PASS: TestPostProcessorPrepare_ExecuteCommand (0.00s)
--- PASS: TestPostProcessorPrepare_ScriptAndInline (0.00s)
--- PASS: TestPostProcessorPrepare_ScriptAndScripts (0.00s)
--- PASS: TestPostProcessorPrepare_Scripts (0.00s)
--- PASS: TestPostProcessorPrepare_EnvironmentVars (0.00s)
PASS
--- PASS: TestProvisioner_Impl (0.00s)
--- PASS: TestProvisionerPrepare_InvalidKey (0.00s)
--- PASS: TestProvisionerPrepare_InvalidSource (0.00s)
--- PASS: TestProvisionerPrepare_ValidSource (0.00s)
--- PASS: TestProvisionerPrepare_GeneratedSource (0.00s)
--- PASS: TestProvisionerPrepare_EmptyDestination (0.00s)
--- PASS: TestProvisionerProvision_SendsFile (0.00s)
--- PASS: TestProvisionerProvision_SendsContent (0.00s)
--- PASS: TestProvisionerProvision_SendsFileMultipleFiles (0.00s)
--- PASS: TestProvisionerProvision_SendsFileMultipleDirs (0.00s)
--- PASS: TestProvisionerProvision_DownloadsMultipleFilesToFolder (0.00s)
--- PASS: TestProvisionerProvision_SendsFileMultipleFilesToFolder (0.00s)
--- PASS: TestProvisionDownloadMkdirAll (0.00s)
PASS
--- PASS: TestExecutionPolicy_Decode (0.00s)
--- PASS: TestProvisionerPrepare_extractScript (0.00s)
--- PASS: TestProvisioner_Impl (0.00s)
--- PASS: TestProvisionerPrepare_Defaults (0.00s)
--- PASS: TestProvisionerPrepare_Config (0.00s)
--- PASS: TestProvisionerPrepare_DebugMode (0.00s)
--- PASS: TestProvisionerPrepare_InvalidDebugMode (0.00s)
--- PASS: TestProvisionerPrepare_InvalidKey (0.00s)
--- PASS: TestProvisionerPrepare_Elevated (0.00s)
--- PASS: TestProvisionerPrepare_Script (0.00s)
--- PASS: TestProvisionerPrepare_ScriptAndInline (0.00s)
--- PASS: TestProvisionerPrepare_ScriptAndScripts (0.00s)
--- PASS: TestProvisionerPrepare_Scripts (0.00s)
--- PASS: TestProvisionerPrepare_Pwsh (0.00s)
--- PASS: TestProvisionerPrepare_EnvironmentVars (0.00s)
--- PASS: TestProvisionerQuote_EnvironmentVars (0.00s)
--- PASS: TestProvisionerProvision_ValidExitCodes (0.00s)
--- PASS: TestProvisionerProvision_PauseAfter (1.00s)
--- PASS: TestProvisionerProvision_InvalidExitCodes (0.00s)
--- PASS: TestProvisionerProvision_Inline (0.00s)
--- PASS: TestProvisionerProvision_Scripts (0.00s)
--- PASS: TestProvisionerProvision_ScriptsWithEnvVars (0.00s)
--- PASS: TestProvisionerProvision_SkipClean (0.00s)
--- PASS: TestProvisionerProvision_UploadFails (2.00s)
--- PASS: TestProvisioner_createFlattenedElevatedEnvVars_windows (0.00s)
--- PASS: TestProvisionerCorrectlyInterpolatesValidExitCodes (0.00s)
--- PASS: TestProvisionerCorrectlyInterpolatesExecutionPolicy (0.00s)
--- PASS: TestProvisioner_createFlattenedEnvVars_windows (0.00s)
--- PASS: TestProvision_createCommandText (0.00s)
--- PASS: TestProvision_uploadEnvVars (0.00s)
--- PASS: TestCancel (0.00s)
PASS
--- PASS: TestProvisioner_Impl (0.00s)
--- PASS: TestProvisionerPrepare_Defaults (0.00s)
--- PASS: TestProvisionerPrepare_ExpectDisconnect (0.00s)
--- PASS: TestProvisionerPrepare_InlineShebang (0.00s)
--- PASS: TestProvisionerPrepare_InvalidKey (0.00s)
--- PASS: TestProvisionerPrepare_Script (0.00s)
--- PASS: TestProvisionerPrepare_ScriptAndInline (0.00s)
--- PASS: TestProvisionerPrepare_ScriptAndScripts (0.00s)
--- PASS: TestProvisionerPrepare_Scripts (0.00s)
--- PASS: TestProvisionerPrepare_EnvironmentVars (0.00s)
--- PASS: TestProvisioner_createFlattenedEnvVars (0.00s)
--- PASS: TestProvisioner_createFlattenedEnvVars_withEnvVarFormat (0.00s)
--- PASS: TestProvisioner_createEnvVarFileContent (0.00s)
--- PASS: TestProvisioner_createEnvVarFileContent_withEnvVarFormat (0.00s)
--- PASS: TestProvisioner_RemoteFolderSetSuccessfully (0.00s)
--- PASS: TestProvisioner_RemoteFolderDefaultsToTmp (0.00s)
--- PASS: TestProvisioner_RemoteFileSetSuccessfully (0.00s)
--- PASS: TestProvisioner_RemoteFileDefaultsToScriptnnnn (0.00s)
--- PASS: TestProvisioner_RemotePathSetViaRemotePathAndRemoteFile (0.00s)
--- PASS: TestProvisioner_RemotePathOverridesRemotePathAndRemoteFile (0.00s)
--- PASS: TestProvisionerRemotePathDefaultsSuccessfully (0.00s)
--- PASS: TestUnixReader_impl (0.00s)
--- PASS: TestUnixReader (0.00s)
--- PASS: TestUnixReader_unixOnly (0.00s)
--- PASS: TestUnixReader_readsLastLine (0.00s)
PASS
--- PASS: TestProvisioner_impl (0.00s)
--- PASS: TestConfigPrepare (0.00s)
PASS
--- PASS: TestConfigPrepare_1s (0.00s)
--- PASS: TestProvisioner_Provision (0.00s)
    --- PASS: TestProvisioner_Provision/valid_sleep (0.00s)
    --- PASS: TestProvisioner_Provision/timeout (0.00s)
PASS
--- PASS: TestProvisioner_Impl (0.00s)
--- PASS: TestProvisionerPrepare_Defaults (0.00s)
--- PASS: TestProvisionerPrepare_ConfigRetryTimeout (0.00s)
--- PASS: TestProvisionerPrepare_ConfigErrors (0.00s)
--- PASS: TestProvisionerPrepare_InvalidKey (0.00s)
--- PASS: TestProvisionerProvision_Success (0.00s)
--- PASS: TestProvisionerProvision_CustomCommand (0.00s)
--- PASS: TestProvisionerProvision_RestartCommandFail (0.00s)
--- PASS: TestProvisionerProvision_WaitForRestartFail (0.00s)
--- PASS: TestProvision_waitForRestartTimeout (0.00s)
--- PASS: TestProvision_waitForCommunicator (0.01s)
--- PASS: TestProvision_waitForCommunicatorWithCancel (0.01s)
--- PASS: TestProvision_Cancel (0.00s)
PASS
--- PASS: TestProvisionerPrepare_extractScript (0.00s)
--- PASS: TestProvisioner_Impl (0.00s)
--- PASS: TestProvisionerPrepare_Defaults (0.00s)
--- PASS: TestProvisionerPrepare_Config (0.00s)
--- PASS: TestProvisionerPrepare_InvalidKey (0.00s)
--- PASS: TestProvisionerPrepare_Script (0.00s)
--- PASS: TestProvisionerPrepare_ScriptAndInline (0.00s)
--- PASS: TestProvisionerPrepare_ScriptAndScripts (0.00s)
--- PASS: TestProvisionerPrepare_Scripts (0.00s)
--- PASS: TestProvisionerPrepare_EnvironmentVars (0.00s)
--- PASS: TestProvisionerQuote_EnvironmentVars (0.00s)
--- PASS: TestProvisionerProvision_Inline (0.00s)
--- PASS: TestProvisionerProvision_Scripts (0.00s)
--- PASS: TestProvisionerProvision_ScriptsWithEnvVars (0.00s)
--- PASS: TestProvisioner_createFlattenedEnvVars_windows (0.00s)
--- PASS: TestCancel (0.00s)
PASS

@nywilken nywilken added the bug label Apr 30, 2024
@lbajolet-hashicorp lbajolet-hashicorp merged commit 403e35d into main May 1, 2024
12 checks passed
Copy link

github-actions bot commented Jun 1, 2024

I'm going to lock this pull request because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.
If you have found a problem that seems related to this change, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 1, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants