From 3ed396ad5c0eada495002b8f2239f98e46f978ea Mon Sep 17 00:00:00 2001 From: Martin Atkins Date: Tue, 8 May 2018 11:36:07 -0700 Subject: [PATCH] core: Update ProviderTransformer tests for new ImportTarget interface Prior to the refactoring to move provider address parsing/selection up into the frontend, there was some logic here to just-in-time default a provider config based on the given resource type. This is now expected to happen at a higher layer, with ImportTarget expecting an already-valid provider configuration address. The normal import codepath was already updated with this in mind, but some of the provider transform tests are using ImportStateTransformer as a shortcut for getting some resource nodes added to the graph, and so those tests now need to include a valid provider address in their ImportTarget values. Also includes some adjustments to test output to make the tests easier to debug. --- terraform/transform_import_state.go | 9 +++++++-- terraform/transform_provider_test.go | 30 ++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/terraform/transform_import_state.go b/terraform/transform_import_state.go index 15d56a5bc..7b15be538 100644 --- a/terraform/transform_import_state.go +++ b/terraform/transform_import_state.go @@ -27,7 +27,7 @@ func (t *ImportStateTransformer) Transform(g *Graph) error { type graphNodeImportState struct { Addr addrs.AbsResourceInstance // Addr is the resource address to import into ID string // ID is the ID to import as - ProviderAddr addrs.AbsProviderConfig // Provider address given by the user + ProviderAddr addrs.AbsProviderConfig // Provider address given by the user, or implied by the resource type ResolvedProvider addrs.AbsProviderConfig // provider node address after resolution states []*InstanceState @@ -41,11 +41,16 @@ var ( ) func (n *graphNodeImportState) Name() string { - return fmt.Sprintf("%s (import id: %s)", n.Addr, n.ID) + return fmt.Sprintf("%s (import id %q)", n.Addr, n.ID) } // GraphNodeProviderConsumer func (n *graphNodeImportState) ProvidedBy() (addrs.AbsProviderConfig, bool) { + // We assume that n.ProviderAddr has been properly populated here. + // It's the responsibility of the code creating a graphNodeImportState + // to populate this, possibly by calling DefaultProviderConfig() on the + // resource address to infer an implied provider from the resource type + // name. return n.ProviderAddr, false } diff --git a/terraform/transform_provider_test.go b/terraform/transform_provider_test.go index 7661bb9a8..2becac3b2 100644 --- a/terraform/transform_provider_test.go +++ b/terraform/transform_provider_test.go @@ -60,6 +60,9 @@ func TestProviderTransformer_moduleChild(t *testing.T) { "qux", addrs.NoKey, ), + ProviderAddr: addrs.RootModuleInstance. + Child("moo", addrs.NoKey). + ProviderConfigDefault("foo"), ID: "bar", }, }, @@ -67,6 +70,7 @@ func TestProviderTransformer_moduleChild(t *testing.T) { if err := tf.Transform(&g); err != nil { t.Fatalf("err: %s", err) } + t.Logf("graph after ImportStateTransformer:\n%s", g.String()) } { @@ -74,6 +78,7 @@ func TestProviderTransformer_moduleChild(t *testing.T) { if err := tf.Transform(&g); err != nil { t.Fatalf("err: %s", err) } + t.Logf("graph after MissingProviderTransformer:\n%s", g.String()) } { @@ -81,12 +86,13 @@ func TestProviderTransformer_moduleChild(t *testing.T) { if err := tf.Transform(&g); err != nil { t.Fatalf("err: %s", err) } + t.Logf("graph after ProviderTransformer:\n%s", g.String()) } actual := strings.TrimSpace(g.String()) expected := strings.TrimSpace(testTransformProviderModuleChildStr) if actual != expected { - t.Fatalf("bad:\n\n%s", actual) + t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected) } } @@ -271,6 +277,9 @@ func TestMissingProviderTransformer_moduleChild(t *testing.T) { "qux", addrs.NoKey, ), + ProviderAddr: addrs.RootModuleInstance. + Child("moo", addrs.NoKey). + ProviderConfigDefault("foo"), ID: "bar", }, }, @@ -313,6 +322,9 @@ func TestMissingProviderTransformer_moduleGrandchild(t *testing.T) { "qux", addrs.NoKey, ), + ProviderAddr: addrs.RootModuleInstance. + Child("moo", addrs.NoKey). + ProviderConfigDefault("foo"), ID: "bar", }, }, @@ -352,6 +364,9 @@ func TestParentProviderTransformer(t *testing.T) { "qux", addrs.NoKey, ), + ProviderAddr: addrs.RootModuleInstance. + Child("moo", addrs.NoKey). + ProviderConfigDefault("foo"), ID: "bar", }, }, @@ -403,6 +418,9 @@ func TestParentProviderTransformer_moduleGrandchild(t *testing.T) { "qux", addrs.NoKey, ), + ProviderAddr: addrs.RootModuleInstance. + Child("moo", addrs.NoKey). + ProviderConfigDefault("foo"), ID: "bar", }, }, @@ -656,27 +674,27 @@ provider.bar ` const testTransformMissingProviderModuleChildStr = ` -module.moo.foo_instance.qux (import id: bar) +module.moo.foo_instance.qux (import id "bar") provider.foo ` const testTransformMissingProviderModuleGrandchildStr = ` -module.a.module.b.foo_instance.qux (import id: bar) +module.a.module.b.foo_instance.qux (import id "bar") provider.foo ` const testTransformParentProviderStr = ` -module.moo.foo_instance.qux (import id: bar) +module.moo.foo_instance.qux (import id "bar") provider.foo ` const testTransformParentProviderModuleGrandchildStr = ` -module.a.module.b.foo_instance.qux (import id: bar) +module.a.module.b.foo_instance.qux (import id "bar") provider.foo ` const testTransformProviderModuleChildStr = ` -module.moo.foo_instance.qux (import id: bar) +module.moo.foo_instance.qux (import id "bar") provider.foo provider.foo `