github.com/ticketmaster/terraform@v0.10.0-beta2.0.20170711045249-a12daf5aba4f/terraform/node_resource_refresh_test.go (about) 1 package terraform 2 3 import ( 4 "reflect" 5 "sync" 6 "testing" 7 8 "github.com/davecgh/go-spew/spew" 9 ) 10 11 func TestNodeRefreshableManagedResourceDynamicExpand_scaleOut(t *testing.T) { 12 var stateLock sync.RWMutex 13 14 addr, err := ParseResourceAddress("aws_instance.foo") 15 if err != nil { 16 t.Fatalf("bad: %s", err) 17 } 18 19 m := testModule(t, "refresh-resource-scale-inout") 20 21 state := &State{ 22 Modules: []*ModuleState{ 23 &ModuleState{ 24 Path: rootModulePath, 25 Resources: map[string]*ResourceState{ 26 "aws_instance.foo.0": &ResourceState{ 27 Type: "aws_instance", 28 Deposed: []*InstanceState{ 29 &InstanceState{ 30 ID: "foo", 31 }, 32 }, 33 }, 34 "aws_instance.foo.1": &ResourceState{ 35 Type: "aws_instance", 36 Deposed: []*InstanceState{ 37 &InstanceState{ 38 ID: "bar", 39 }, 40 }, 41 }, 42 }, 43 }, 44 }, 45 } 46 47 n := &NodeRefreshableManagedResource{ 48 NodeAbstractCountResource: &NodeAbstractCountResource{ 49 NodeAbstractResource: &NodeAbstractResource{ 50 Addr: addr, 51 Config: m.Config().Resources[0], 52 }, 53 }, 54 } 55 56 g, err := n.DynamicExpand(&MockEvalContext{ 57 PathPath: []string{"root"}, 58 StateState: state, 59 StateLock: &stateLock, 60 }) 61 62 actual := g.StringWithNodeTypes() 63 expected := `aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance 64 aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance 65 aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance 66 root - terraform.graphNodeRoot 67 aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance 68 aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance 69 aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance 70 ` 71 if expected != actual { 72 t.Fatalf("Expected:\n%s\nGot:\n%s", expected, actual) 73 } 74 } 75 76 func TestNodeRefreshableManagedResourceDynamicExpand_scaleIn(t *testing.T) { 77 var stateLock sync.RWMutex 78 79 addr, err := ParseResourceAddress("aws_instance.foo") 80 if err != nil { 81 t.Fatalf("bad: %s", err) 82 } 83 84 m := testModule(t, "refresh-resource-scale-inout") 85 86 state := &State{ 87 Modules: []*ModuleState{ 88 &ModuleState{ 89 Path: rootModulePath, 90 Resources: map[string]*ResourceState{ 91 "aws_instance.foo.0": &ResourceState{ 92 Type: "aws_instance", 93 Deposed: []*InstanceState{ 94 &InstanceState{ 95 ID: "foo", 96 }, 97 }, 98 }, 99 "aws_instance.foo.1": &ResourceState{ 100 Type: "aws_instance", 101 Deposed: []*InstanceState{ 102 &InstanceState{ 103 ID: "bar", 104 }, 105 }, 106 }, 107 "aws_instance.foo.2": &ResourceState{ 108 Type: "aws_instance", 109 Deposed: []*InstanceState{ 110 &InstanceState{ 111 ID: "baz", 112 }, 113 }, 114 }, 115 "aws_instance.foo.3": &ResourceState{ 116 Type: "aws_instance", 117 Deposed: []*InstanceState{ 118 &InstanceState{ 119 ID: "qux", 120 }, 121 }, 122 }, 123 }, 124 }, 125 }, 126 } 127 128 n := &NodeRefreshableManagedResource{ 129 NodeAbstractCountResource: &NodeAbstractCountResource{ 130 NodeAbstractResource: &NodeAbstractResource{ 131 Addr: addr, 132 Config: m.Config().Resources[0], 133 }, 134 }, 135 } 136 137 g, err := n.DynamicExpand(&MockEvalContext{ 138 PathPath: []string{"root"}, 139 StateState: state, 140 StateLock: &stateLock, 141 }) 142 143 actual := g.StringWithNodeTypes() 144 expected := `aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance 145 aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance 146 aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance 147 aws_instance.foo[3] - *terraform.NodeRefreshableManagedResourceInstance 148 root - terraform.graphNodeRoot 149 aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance 150 aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance 151 aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance 152 aws_instance.foo[3] - *terraform.NodeRefreshableManagedResourceInstance 153 ` 154 if expected != actual { 155 t.Fatalf("Expected:\n%s\nGot:\n%s", expected, actual) 156 } 157 } 158 159 func TestNodeRefreshableManagedResourceEvalTree_scaleOut(t *testing.T) { 160 addr, err := ParseResourceAddress("aws_instance.foo[2]") 161 if err != nil { 162 t.Fatalf("bad: %s", err) 163 } 164 165 m := testModule(t, "refresh-resource-scale-inout") 166 167 n := &NodeRefreshableManagedResourceInstance{ 168 NodeAbstractResource: &NodeAbstractResource{ 169 Addr: addr, 170 Config: m.Config().Resources[0], 171 }, 172 } 173 174 actual := n.EvalTree() 175 expected := n.evalTreeManagedResourceNoState() 176 177 if !reflect.DeepEqual(expected, actual) { 178 t.Fatalf("Expected:\n\n%s\nGot:\n\n%s\n", spew.Sdump(expected), spew.Sdump(actual)) 179 } 180 }