github.com/turtlemonvh/terraform@v0.6.9-0.20151204001754-8e40b6b855e8/terraform/graph_test.go (about) 1 package terraform 2 3 import ( 4 "reflect" 5 "strings" 6 "testing" 7 ) 8 9 func TestGraphAdd(t *testing.T) { 10 // Test Add since we override it and want to make sure we don't break it. 11 var g Graph 12 g.Add(42) 13 g.Add(84) 14 15 actual := strings.TrimSpace(g.String()) 16 expected := strings.TrimSpace(testGraphAddStr) 17 if actual != expected { 18 t.Fatalf("bad: %s", actual) 19 } 20 } 21 22 func TestGraphConnectDependent(t *testing.T) { 23 var g Graph 24 g.Add(&testGraphDependable{VertexName: "a"}) 25 b := g.Add(&testGraphDependable{ 26 VertexName: "b", 27 DependentOnMock: []string{"a"}, 28 }) 29 30 if missing := g.ConnectDependent(b); len(missing) > 0 { 31 t.Fatalf("bad: %#v", missing) 32 } 33 34 actual := strings.TrimSpace(g.String()) 35 expected := strings.TrimSpace(testGraphConnectDepsStr) 36 if actual != expected { 37 t.Fatalf("bad: %s", actual) 38 } 39 } 40 41 func TestGraphReplace_DependableWithNonDependable(t *testing.T) { 42 var g Graph 43 a := g.Add(&testGraphDependable{VertexName: "a"}) 44 b := g.Add(&testGraphDependable{ 45 VertexName: "b", 46 DependentOnMock: []string{"a"}, 47 }) 48 newA := "non-dependable-a" 49 50 if missing := g.ConnectDependent(b); len(missing) > 0 { 51 t.Fatalf("bad: %#v", missing) 52 } 53 54 if !g.Replace(a, newA) { 55 t.Fatalf("failed to replace") 56 } 57 58 c := g.Add(&testGraphDependable{ 59 VertexName: "c", 60 DependentOnMock: []string{"a"}, 61 }) 62 63 // This should fail by reporting missing, since a node with dependable 64 // name "a" is no longer in the graph. 65 missing := g.ConnectDependent(c) 66 expected := []string{"a"} 67 if !reflect.DeepEqual(expected, missing) { 68 t.Fatalf("expected: %#v, got: %#v", expected, missing) 69 } 70 } 71 72 type testGraphDependable struct { 73 VertexName string 74 DependentOnMock []string 75 } 76 77 func (v *testGraphDependable) Name() string { 78 return v.VertexName 79 } 80 81 func (v *testGraphDependable) DependableName() []string { 82 return []string{v.VertexName} 83 } 84 85 func (v *testGraphDependable) DependentOn() []string { 86 return v.DependentOnMock 87 } 88 89 const testGraphAddStr = ` 90 42 91 84 92 ` 93 94 const testGraphConnectDepsStr = ` 95 a 96 b 97 a 98 `