github.com/opentofu/opentofu@v1.7.1/internal/tofu/transform_root_test.go (about) 1 // Copyright (c) The OpenTofu Authors 2 // SPDX-License-Identifier: MPL-2.0 3 // Copyright (c) 2023 HashiCorp, Inc. 4 // SPDX-License-Identifier: MPL-2.0 5 6 package tofu 7 8 import ( 9 "strings" 10 "testing" 11 12 "github.com/opentofu/opentofu/internal/addrs" 13 ) 14 15 func TestRootTransformer(t *testing.T) { 16 t.Run("many nodes", func(t *testing.T) { 17 mod := testModule(t, "transform-root-basic") 18 19 g := Graph{Path: addrs.RootModuleInstance} 20 { 21 tf := &ConfigTransformer{Config: mod} 22 if err := tf.Transform(&g); err != nil { 23 t.Fatalf("err: %s", err) 24 } 25 } 26 27 { 28 transform := &MissingProviderTransformer{} 29 if err := transform.Transform(&g); err != nil { 30 t.Fatalf("err: %s", err) 31 } 32 } 33 34 { 35 transform := &ProviderTransformer{} 36 if err := transform.Transform(&g); err != nil { 37 t.Fatalf("err: %s", err) 38 } 39 } 40 41 { 42 transform := &RootTransformer{} 43 if err := transform.Transform(&g); err != nil { 44 t.Fatalf("err: %s", err) 45 } 46 } 47 48 actual := strings.TrimSpace(g.String()) 49 expected := strings.TrimSpace(testTransformRootBasicStr) 50 if actual != expected { 51 t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected) 52 } 53 54 root, err := g.Root() 55 if err != nil { 56 t.Fatalf("err: %s", err) 57 } 58 if _, ok := root.(graphNodeRoot); !ok { 59 t.Fatalf("bad: %#v", root) 60 } 61 }) 62 63 t.Run("only one initial node", func(t *testing.T) { 64 g := Graph{Path: addrs.RootModuleInstance} 65 g.Add("foo") 66 addRootNodeToGraph(&g) 67 got := strings.TrimSpace(g.String()) 68 want := strings.TrimSpace(` 69 foo 70 root 71 foo 72 `) 73 if got != want { 74 t.Errorf("wrong final graph\ngot:\n%s\nwant:\n%s", got, want) 75 } 76 }) 77 78 t.Run("graph initially empty", func(t *testing.T) { 79 g := Graph{Path: addrs.RootModuleInstance} 80 addRootNodeToGraph(&g) 81 got := strings.TrimSpace(g.String()) 82 want := `root` 83 if got != want { 84 t.Errorf("wrong final graph\ngot:\n%s\nwant:\n%s", got, want) 85 } 86 }) 87 88 } 89 90 const testTransformRootBasicStr = ` 91 aws_instance.foo 92 provider["registry.opentofu.org/hashicorp/aws"] 93 do_droplet.bar 94 provider["registry.opentofu.org/hashicorp/do"] 95 provider["registry.opentofu.org/hashicorp/aws"] 96 provider["registry.opentofu.org/hashicorp/do"] 97 root 98 aws_instance.foo 99 do_droplet.bar 100 `