github.com/opentofu/opentofu@v1.7.1/internal/tofu/transform_config_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 TestConfigTransformer_nilModule(t *testing.T) { 16 g := Graph{Path: addrs.RootModuleInstance} 17 tf := &ConfigTransformer{} 18 if err := tf.Transform(&g); err != nil { 19 t.Fatalf("err: %s", err) 20 } 21 22 if len(g.Vertices()) > 0 { 23 t.Fatalf("graph is not empty: %s", g.String()) 24 } 25 } 26 27 func TestConfigTransformer(t *testing.T) { 28 g := Graph{Path: addrs.RootModuleInstance} 29 tf := &ConfigTransformer{Config: testModule(t, "graph-basic")} 30 if err := tf.Transform(&g); err != nil { 31 t.Fatalf("err: %s", err) 32 } 33 34 actual := strings.TrimSpace(g.String()) 35 expected := strings.TrimSpace(testConfigTransformerGraphBasicStr) 36 if actual != expected { 37 t.Fatalf("bad:\n\n%s", actual) 38 } 39 } 40 41 func TestConfigTransformer_mode(t *testing.T) { 42 g := Graph{Path: addrs.RootModuleInstance} 43 tf := &ConfigTransformer{ 44 Config: testModule(t, "transform-config-mode-data"), 45 ModeFilter: true, 46 Mode: addrs.DataResourceMode, 47 } 48 if err := tf.Transform(&g); err != nil { 49 t.Fatalf("err: %s", err) 50 } 51 52 actual := strings.TrimSpace(g.String()) 53 expected := strings.TrimSpace(` 54 data.aws_ami.foo 55 `) 56 if actual != expected { 57 t.Fatalf("bad:\n\n%s", actual) 58 } 59 } 60 61 func TestConfigTransformer_nonUnique(t *testing.T) { 62 g := Graph{Path: addrs.RootModuleInstance} 63 g.Add(NewNodeAbstractResource( 64 addrs.RootModule.Resource( 65 addrs.ManagedResourceMode, "aws_instance", "web", 66 ), 67 )) 68 tf := &ConfigTransformer{Config: testModule(t, "graph-basic")} 69 if err := tf.Transform(&g); err != nil { 70 t.Fatalf("err: %s", err) 71 } 72 73 actual := strings.TrimSpace(g.String()) 74 expected := strings.TrimSpace(` 75 aws_instance.web 76 aws_instance.web 77 aws_load_balancer.weblb 78 aws_security_group.firewall 79 openstack_floating_ip.random 80 `) 81 if actual != expected { 82 t.Fatalf("bad:\n\n%s", actual) 83 } 84 } 85 86 const testConfigTransformerGraphBasicStr = ` 87 aws_instance.web 88 aws_load_balancer.weblb 89 aws_security_group.firewall 90 openstack_floating_ip.random 91 `