From 39a83b2fd11ee74e8c788f0f34f5e0465717f91f Mon Sep 17 00:00:00 2001 From: Martin Atkins Date: Fri, 11 May 2018 12:10:36 -0700 Subject: [PATCH] core: fix test for buildProviderConfig This was incorrectly comparing a cty.Value to an hcl.Body. Now we decode the body first so we can compare two of cty.Value. Also includes a fix to a stale comment in buildProviderConfig that was no longer accurate. --- terraform/eval_provider.go | 3 +-- terraform/eval_provider_test.go | 43 +++++++++++++++++++++------------ 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/terraform/eval_provider.go b/terraform/eval_provider.go index de56f0c2f..cb1360cd5 100644 --- a/terraform/eval_provider.go +++ b/terraform/eval_provider.go @@ -17,8 +17,7 @@ func buildProviderConfig(ctx EvalContext, addr addrs.ProviderConfig, body hcl.Bo // "input" is a map of the subset of config values that were known // during the input walk, set by EvalInputProvider. Note that // in particular it does *not* include attributes that had - // computed values at input time; those appear *only* in - // "cfg" here. + // computed values at input time. inputBody := configs.SynthBody("", input) body = configs.MergeBodies(body, inputBody) diff --git a/terraform/eval_provider_test.go b/terraform/eval_provider_test.go index 692867848..994208ec9 100644 --- a/terraform/eval_provider_test.go +++ b/terraform/eval_provider_test.go @@ -4,19 +4,19 @@ import ( "reflect" "testing" - "github.com/hashicorp/terraform/configs" + "github.com/hashicorp/hcl2/hcldec" "github.com/zclconf/go-cty/cty" "github.com/hashicorp/terraform/addrs" - "github.com/hashicorp/terraform/config" + "github.com/hashicorp/terraform/config/configschema" + "github.com/hashicorp/terraform/configs" ) func TestBuildProviderConfig(t *testing.T) { configBody := configs.SynthBody("", map[string]cty.Value{ - "set_in_config": cty.StringVal("config"), - "set_in_config_and_parent": cty.StringVal("config"), - "computed_in_config": cty.StringVal("config"), + "set_in_config": cty.StringVal("config"), + "set_in_config_and_input": cty.StringVal("config"), }) providerAddr := addrs.ProviderConfig{ Type: "foo", @@ -24,21 +24,32 @@ func TestBuildProviderConfig(t *testing.T) { ctx := &MockEvalContext{ ProviderInputValues: map[string]cty.Value{ - "set_in_config": cty.StringVal("input"), - "set_by_input": cty.StringVal("input"), + "set_in_config_and_input": cty.StringVal("input"), + "set_by_input": cty.StringVal("input"), }, } - got := buildProviderConfig(ctx, providerAddr, configBody) + gotBody := buildProviderConfig(ctx, providerAddr, configBody) + + schema := &configschema.Block{ + Attributes: map[string]*configschema.Attribute{ + "set_in_config": {Type: cty.String, Optional: true}, + "set_in_config_and_input": {Type: cty.String, Optional: true}, + "set_by_input": {Type: cty.String, Optional: true}, + }, + } + got, diags := hcldec.Decode(gotBody, schema.DecoderSpec(), nil) + if diags.HasErrors() { + t.Fatalf("body decode failed: %s", diags.Error()) + } // We expect the provider config with the added input value - want := map[string]cty.Value{ - "set_in_config": cty.StringVal("config"), - "set_in_config_and_parent": cty.StringVal("config"), - "computed_in_config": cty.StringVal("config"), - "set_by_input": cty.StringVal("input"), - } - if !reflect.DeepEqual(got, want) { - t.Fatalf("incorrect merged config\ngot: %#v\nwant: \n%#v", got, want) + want := cty.ObjectVal(map[string]cty.Value{ + "set_in_config": cty.StringVal("config"), + "set_in_config_and_input": cty.StringVal("input"), + "set_by_input": cty.StringVal("input"), + }) + if !got.RawEquals(want) { + t.Fatalf("incorrect merged config\ngot: %#v\nwant: %#v", got, want) } }