github.com/nbering/terraform@v0.8.5-0.20170113232247-453f670684b5/terraform/transform_destroy_edge_test.go (about) 1 package terraform 2 3 import ( 4 "strings" 5 "testing" 6 ) 7 8 func TestDestroyEdgeTransformer_basic(t *testing.T) { 9 g := Graph{Path: RootModulePath} 10 g.Add(&graphNodeDestroyerTest{AddrString: "test.A"}) 11 g.Add(&graphNodeDestroyerTest{AddrString: "test.B"}) 12 tf := &DestroyEdgeTransformer{ 13 Module: testModule(t, "transform-destroy-edge-basic"), 14 } 15 if err := tf.Transform(&g); err != nil { 16 t.Fatalf("err: %s", err) 17 } 18 19 actual := strings.TrimSpace(g.String()) 20 expected := strings.TrimSpace(testTransformDestroyEdgeBasicStr) 21 if actual != expected { 22 t.Fatalf("bad:\n\n%s", actual) 23 } 24 } 25 26 func TestDestroyEdgeTransformer_create(t *testing.T) { 27 g := Graph{Path: RootModulePath} 28 g.Add(&graphNodeDestroyerTest{AddrString: "test.A"}) 29 g.Add(&graphNodeDestroyerTest{AddrString: "test.B"}) 30 g.Add(&graphNodeCreatorTest{AddrString: "test.A"}) 31 tf := &DestroyEdgeTransformer{ 32 Module: testModule(t, "transform-destroy-edge-basic"), 33 } 34 if err := tf.Transform(&g); err != nil { 35 t.Fatalf("err: %s", err) 36 } 37 38 actual := strings.TrimSpace(g.String()) 39 expected := strings.TrimSpace(testTransformDestroyEdgeCreatorStr) 40 if actual != expected { 41 t.Fatalf("bad:\n\n%s", actual) 42 } 43 } 44 45 func TestDestroyEdgeTransformer_multi(t *testing.T) { 46 g := Graph{Path: RootModulePath} 47 g.Add(&graphNodeDestroyerTest{AddrString: "test.A"}) 48 g.Add(&graphNodeDestroyerTest{AddrString: "test.B"}) 49 g.Add(&graphNodeDestroyerTest{AddrString: "test.C"}) 50 tf := &DestroyEdgeTransformer{ 51 Module: testModule(t, "transform-destroy-edge-multi"), 52 } 53 if err := tf.Transform(&g); err != nil { 54 t.Fatalf("err: %s", err) 55 } 56 57 actual := strings.TrimSpace(g.String()) 58 expected := strings.TrimSpace(testTransformDestroyEdgeMultiStr) 59 if actual != expected { 60 t.Fatalf("bad:\n\n%s", actual) 61 } 62 } 63 64 func TestDestroyEdgeTransformer_selfRef(t *testing.T) { 65 g := Graph{Path: RootModulePath} 66 g.Add(&graphNodeDestroyerTest{AddrString: "test.A"}) 67 tf := &DestroyEdgeTransformer{ 68 Module: testModule(t, "transform-destroy-edge-self-ref"), 69 } 70 if err := tf.Transform(&g); err != nil { 71 t.Fatalf("err: %s", err) 72 } 73 74 actual := strings.TrimSpace(g.String()) 75 expected := strings.TrimSpace(testTransformDestroyEdgeSelfRefStr) 76 if actual != expected { 77 t.Fatalf("bad:\n\n%s", actual) 78 } 79 } 80 81 func TestDestroyEdgeTransformer_module(t *testing.T) { 82 g := Graph{Path: RootModulePath} 83 g.Add(&graphNodeDestroyerTest{AddrString: "module.child.aws_instance.b"}) 84 g.Add(&graphNodeDestroyerTest{AddrString: "aws_instance.a"}) 85 tf := &DestroyEdgeTransformer{ 86 Module: testModule(t, "transform-destroy-edge-module"), 87 } 88 if err := tf.Transform(&g); err != nil { 89 t.Fatalf("err: %s", err) 90 } 91 92 actual := strings.TrimSpace(g.String()) 93 expected := strings.TrimSpace(testTransformDestroyEdgeModuleStr) 94 if actual != expected { 95 t.Fatalf("bad:\n\n%s", actual) 96 } 97 } 98 99 type graphNodeCreatorTest struct { 100 AddrString string 101 Refs []string 102 } 103 104 func (n *graphNodeCreatorTest) Name() string { return n.CreateAddr().String() } 105 func (n *graphNodeCreatorTest) CreateAddr() *ResourceAddress { 106 addr, err := ParseResourceAddress(n.AddrString) 107 if err != nil { 108 panic(err) 109 } 110 111 return addr 112 } 113 114 func (n *graphNodeCreatorTest) References() []string { return n.Refs } 115 116 type graphNodeDestroyerTest struct { 117 AddrString string 118 CBD bool 119 Modified bool 120 } 121 122 func (n *graphNodeDestroyerTest) Name() string { 123 result := n.DestroyAddr().String() + " (destroy)" 124 if n.Modified { 125 result += " (modified)" 126 } 127 128 return result 129 } 130 131 func (n *graphNodeDestroyerTest) CreateBeforeDestroy() bool { return n.CBD } 132 133 func (n *graphNodeDestroyerTest) ModifyCreateBeforeDestroy(v bool) error { 134 n.Modified = true 135 return nil 136 } 137 138 func (n *graphNodeDestroyerTest) DestroyAddr() *ResourceAddress { 139 addr, err := ParseResourceAddress(n.AddrString) 140 if err != nil { 141 panic(err) 142 } 143 144 return addr 145 } 146 147 const testTransformDestroyEdgeBasicStr = ` 148 test.A (destroy) 149 test.B (destroy) 150 test.B (destroy) 151 ` 152 153 const testTransformDestroyEdgeCreatorStr = ` 154 test.A 155 test.A (destroy) 156 test.A (destroy) 157 test.B (destroy) 158 test.B (destroy) 159 ` 160 161 const testTransformDestroyEdgeMultiStr = ` 162 test.A (destroy) 163 test.B (destroy) 164 test.C (destroy) 165 test.B (destroy) 166 test.C (destroy) 167 test.C (destroy) 168 ` 169 170 const testTransformDestroyEdgeSelfRefStr = ` 171 test.A (destroy) 172 ` 173 174 const testTransformDestroyEdgeModuleStr = ` 175 aws_instance.a (destroy) 176 module.child.aws_instance.b (destroy) 177 aws_instance.a (destroy) 178 `