github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/test/data_source_test.go (about) 1 package test 2 3 import ( 4 "errors" 5 "fmt" 6 "strings" 7 "testing" 8 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 func TestDataSource_dataSourceCount(t *testing.T) { 14 resource.UnitTest(t, resource.TestCase{ 15 Providers: testAccProviders, 16 CheckDestroy: func(s *terraform.State) error { 17 return nil 18 }, 19 Steps: []resource.TestStep{ 20 { 21 Config: strings.TrimSpace(` 22 data "test_data_source" "test" { 23 count = 3 24 input = "count-${count.index}" 25 } 26 27 resource "test_resource" "foo" { 28 required = "yep" 29 required_map = { 30 key = "value" 31 } 32 33 list = ["${data.test_data_source.test.*.output}"] 34 } 35 `), 36 Check: func(s *terraform.State) error { 37 res, hasRes := s.RootModule().Resources["test_resource.foo"] 38 if !hasRes { 39 return errors.New("No test_resource.foo in state") 40 } 41 if res.Primary.Attributes["list.#"] != "3" { 42 return errors.New("Wrong list.#, expected 3") 43 } 44 if res.Primary.Attributes["list.0"] != "count-0" { 45 return errors.New("Wrong list.0, expected count-0") 46 } 47 if res.Primary.Attributes["list.1"] != "count-1" { 48 return errors.New("Wrong list.0, expected count-1") 49 } 50 if res.Primary.Attributes["list.2"] != "count-2" { 51 return errors.New("Wrong list.0, expected count-2") 52 } 53 return nil 54 }, 55 }, 56 }, 57 }) 58 } 59 60 // Test that the output of a data source can be used as the value for 61 // a "count" in a real resource. This would fail with "count cannot be computed" 62 // at some point. 63 func TestDataSource_valueAsResourceCount(t *testing.T) { 64 resource.UnitTest(t, resource.TestCase{ 65 Providers: testAccProviders, 66 CheckDestroy: func(s *terraform.State) error { 67 return nil 68 }, 69 Steps: []resource.TestStep{ 70 { 71 Config: strings.TrimSpace(` 72 data "test_data_source" "test" { 73 input = "4" 74 } 75 76 resource "test_resource" "foo" { 77 count = "${data.test_data_source.test.output}" 78 79 required = "yep" 80 required_map = { 81 key = "value" 82 } 83 } 84 `), 85 Check: func(s *terraform.State) error { 86 count := 0 87 for k, _ := range s.RootModule().Resources { 88 if strings.HasPrefix(k, "test_resource.foo.") { 89 count++ 90 } 91 } 92 93 if count != 4 { 94 return fmt.Errorf("bad count: %d", count) 95 } 96 return nil 97 }, 98 }, 99 }, 100 }) 101 }