github.com/tarrant/terraform@v0.3.8-0.20150402012457-f68c9eee638e/config/module/tree_test.go (about) 1 package module 2 3 import ( 4 "reflect" 5 "strings" 6 "testing" 7 ) 8 9 func TestTreeChild(t *testing.T) { 10 storage := testStorage(t) 11 tree := NewTree("", testConfig(t, "child")) 12 if err := tree.Load(storage, GetModeGet); err != nil { 13 t.Fatalf("err: %s", err) 14 } 15 16 // Should be able to get the root child 17 if c := tree.Child([]string{}); c == nil { 18 t.Fatal("should not be nil") 19 } else if c.Name() != "root" { 20 t.Fatalf("bad: %#v", c.Name()) 21 } 22 23 // Should be able to get the root child 24 if c := tree.Child(nil); c == nil { 25 t.Fatal("should not be nil") 26 } else if c.Name() != "root" { 27 t.Fatalf("bad: %#v", c.Name()) 28 } 29 30 // Should be able to get the foo child 31 if c := tree.Child([]string{"foo"}); c == nil { 32 t.Fatal("should not be nil") 33 } else if c.Name() != "foo" { 34 t.Fatalf("bad: %#v", c.Name()) 35 } 36 37 // Should be able to get the nested child 38 if c := tree.Child([]string{"foo", "bar"}); c == nil { 39 t.Fatal("should not be nil") 40 } else if c.Name() != "bar" { 41 t.Fatalf("bad: %#v", c.Name()) 42 } 43 } 44 45 func TestTreeLoad(t *testing.T) { 46 storage := testStorage(t) 47 tree := NewTree("", testConfig(t, "basic")) 48 49 if tree.Loaded() { 50 t.Fatal("should not be loaded") 51 } 52 53 // This should error because we haven't gotten things yet 54 if err := tree.Load(storage, GetModeNone); err == nil { 55 t.Fatal("should error") 56 } 57 58 if tree.Loaded() { 59 t.Fatal("should not be loaded") 60 } 61 62 // This should get things 63 if err := tree.Load(storage, GetModeGet); err != nil { 64 t.Fatalf("err: %s", err) 65 } 66 67 if !tree.Loaded() { 68 t.Fatal("should be loaded") 69 } 70 71 // This should no longer error 72 if err := tree.Load(storage, GetModeNone); err != nil { 73 t.Fatalf("err: %s", err) 74 } 75 76 actual := strings.TrimSpace(tree.String()) 77 expected := strings.TrimSpace(treeLoadStr) 78 if actual != expected { 79 t.Fatalf("bad: \n\n%s", actual) 80 } 81 } 82 83 func TestTreeLoad_duplicate(t *testing.T) { 84 storage := testStorage(t) 85 tree := NewTree("", testConfig(t, "dup")) 86 87 if tree.Loaded() { 88 t.Fatal("should not be loaded") 89 } 90 91 // This should get things 92 if err := tree.Load(storage, GetModeGet); err == nil { 93 t.Fatalf("should error") 94 } 95 } 96 97 func TestTreeLoad_parentRef(t *testing.T) { 98 storage := testStorage(t) 99 tree := NewTree("", testConfig(t, "basic-parent")) 100 101 if tree.Loaded() { 102 t.Fatal("should not be loaded") 103 } 104 105 // This should error because we haven't gotten things yet 106 if err := tree.Load(storage, GetModeNone); err == nil { 107 t.Fatal("should error") 108 } 109 110 if tree.Loaded() { 111 t.Fatal("should not be loaded") 112 } 113 114 // This should get things 115 if err := tree.Load(storage, GetModeGet); err != nil { 116 t.Fatalf("err: %s", err) 117 } 118 119 if !tree.Loaded() { 120 t.Fatal("should be loaded") 121 } 122 123 // This should no longer error 124 if err := tree.Load(storage, GetModeNone); err != nil { 125 t.Fatalf("err: %s", err) 126 } 127 128 actual := strings.TrimSpace(tree.String()) 129 expected := strings.TrimSpace(treeLoadParentStr) 130 if actual != expected { 131 t.Fatalf("bad: \n\n%s", actual) 132 } 133 } 134 135 func TestTreeLoad_subdir(t *testing.T) { 136 storage := testStorage(t) 137 tree := NewTree("", testConfig(t, "basic-subdir")) 138 139 if tree.Loaded() { 140 t.Fatal("should not be loaded") 141 } 142 143 // This should error because we haven't gotten things yet 144 if err := tree.Load(storage, GetModeNone); err == nil { 145 t.Fatal("should error") 146 } 147 148 if tree.Loaded() { 149 t.Fatal("should not be loaded") 150 } 151 152 // This should get things 153 if err := tree.Load(storage, GetModeGet); err != nil { 154 t.Fatalf("err: %s", err) 155 } 156 157 if !tree.Loaded() { 158 t.Fatal("should be loaded") 159 } 160 161 // This should no longer error 162 if err := tree.Load(storage, GetModeNone); err != nil { 163 t.Fatalf("err: %s", err) 164 } 165 166 actual := strings.TrimSpace(tree.String()) 167 expected := strings.TrimSpace(treeLoadSubdirStr) 168 if actual != expected { 169 t.Fatalf("bad: \n\n%s", actual) 170 } 171 } 172 173 func TestTreeModules(t *testing.T) { 174 tree := NewTree("", testConfig(t, "basic")) 175 actual := tree.Modules() 176 177 expected := []*Module{ 178 &Module{Name: "foo", Source: "./foo"}, 179 } 180 181 if !reflect.DeepEqual(actual, expected) { 182 t.Fatalf("bad: %#v", actual) 183 } 184 } 185 186 func TestTreeName(t *testing.T) { 187 tree := NewTree("", testConfig(t, "basic")) 188 actual := tree.Name() 189 190 if actual != RootName { 191 t.Fatalf("bad: %#v", actual) 192 } 193 } 194 195 func TestTreeValidate_badChild(t *testing.T) { 196 tree := NewTree("", testConfig(t, "validate-child-bad")) 197 198 if err := tree.Load(testStorage(t), GetModeGet); err != nil { 199 t.Fatalf("err: %s", err) 200 } 201 202 if err := tree.Validate(); err == nil { 203 t.Fatal("should error") 204 } 205 } 206 207 func TestTreeValidate_badChildOutput(t *testing.T) { 208 tree := NewTree("", testConfig(t, "validate-bad-output")) 209 210 if err := tree.Load(testStorage(t), GetModeGet); err != nil { 211 t.Fatalf("err: %s", err) 212 } 213 214 if err := tree.Validate(); err == nil { 215 t.Fatal("should error") 216 } 217 } 218 219 func TestTreeValidate_badChildVar(t *testing.T) { 220 tree := NewTree("", testConfig(t, "validate-bad-var")) 221 222 if err := tree.Load(testStorage(t), GetModeGet); err != nil { 223 t.Fatalf("err: %s", err) 224 } 225 226 if err := tree.Validate(); err == nil { 227 t.Fatal("should error") 228 } 229 } 230 231 func TestTreeValidate_badRoot(t *testing.T) { 232 tree := NewTree("", testConfig(t, "validate-root-bad")) 233 234 if err := tree.Load(testStorage(t), GetModeGet); err != nil { 235 t.Fatalf("err: %s", err) 236 } 237 238 if err := tree.Validate(); err == nil { 239 t.Fatal("should error") 240 } 241 } 242 243 func TestTreeValidate_good(t *testing.T) { 244 tree := NewTree("", testConfig(t, "validate-child-good")) 245 246 if err := tree.Load(testStorage(t), GetModeGet); err != nil { 247 t.Fatalf("err: %s", err) 248 } 249 250 if err := tree.Validate(); err != nil { 251 t.Fatalf("err: %s", err) 252 } 253 } 254 255 func TestTreeValidate_notLoaded(t *testing.T) { 256 tree := NewTree("", testConfig(t, "basic")) 257 258 if err := tree.Validate(); err == nil { 259 t.Fatal("should error") 260 } 261 } 262 263 func TestTreeValidate_requiredChildVar(t *testing.T) { 264 tree := NewTree("", testConfig(t, "validate-required-var")) 265 266 if err := tree.Load(testStorage(t), GetModeGet); err != nil { 267 t.Fatalf("err: %s", err) 268 } 269 270 if err := tree.Validate(); err == nil { 271 t.Fatal("should error") 272 } 273 } 274 275 const treeLoadStr = ` 276 root 277 foo 278 ` 279 280 const treeLoadParentStr = ` 281 root 282 a 283 b 284 ` 285 const treeLoadSubdirStr = ` 286 root 287 foo 288 bar 289 `