| package terraform |
| |
| import ( |
| "strings" |
| "testing" |
| |
| "github.com/hashicorp/terraform/internal/addrs" |
| ) |
| |
| func TestRootTransformer(t *testing.T) { |
| t.Run("many nodes", func(t *testing.T) { |
| mod := testModule(t, "transform-root-basic") |
| |
| g := Graph{Path: addrs.RootModuleInstance} |
| { |
| tf := &ConfigTransformer{Config: mod} |
| if err := tf.Transform(&g); err != nil { |
| t.Fatalf("err: %s", err) |
| } |
| } |
| |
| { |
| transform := &MissingProviderTransformer{} |
| if err := transform.Transform(&g); err != nil { |
| t.Fatalf("err: %s", err) |
| } |
| } |
| |
| { |
| transform := &ProviderTransformer{} |
| if err := transform.Transform(&g); err != nil { |
| t.Fatalf("err: %s", err) |
| } |
| } |
| |
| { |
| transform := &RootTransformer{} |
| if err := transform.Transform(&g); err != nil { |
| t.Fatalf("err: %s", err) |
| } |
| } |
| |
| actual := strings.TrimSpace(g.String()) |
| expected := strings.TrimSpace(testTransformRootBasicStr) |
| if actual != expected { |
| t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected) |
| } |
| |
| root, err := g.Root() |
| if err != nil { |
| t.Fatalf("err: %s", err) |
| } |
| if _, ok := root.(graphNodeRoot); !ok { |
| t.Fatalf("bad: %#v", root) |
| } |
| }) |
| |
| t.Run("only one initial node", func(t *testing.T) { |
| g := Graph{Path: addrs.RootModuleInstance} |
| g.Add("foo") |
| addRootNodeToGraph(&g) |
| got := strings.TrimSpace(g.String()) |
| want := strings.TrimSpace(` |
| foo |
| root |
| foo |
| `) |
| if got != want { |
| t.Errorf("wrong final graph\ngot:\n%s\nwant:\n%s", got, want) |
| } |
| }) |
| |
| t.Run("graph initially empty", func(t *testing.T) { |
| g := Graph{Path: addrs.RootModuleInstance} |
| addRootNodeToGraph(&g) |
| got := strings.TrimSpace(g.String()) |
| want := `root` |
| if got != want { |
| t.Errorf("wrong final graph\ngot:\n%s\nwant:\n%s", got, want) |
| } |
| }) |
| |
| } |
| |
| const testTransformRootBasicStr = ` |
| aws_instance.foo |
| provider["registry.terraform.io/hashicorp/aws"] |
| do_droplet.bar |
| provider["registry.terraform.io/hashicorp/do"] |
| provider["registry.terraform.io/hashicorp/aws"] |
| provider["registry.terraform.io/hashicorp/do"] |
| root |
| aws_instance.foo |
| do_droplet.bar |
| ` |