Skip to content

Commit

Permalink
provider/test: Add test of data source count.index
Browse files Browse the repository at this point in the history
This adds a unit test to the test provider that verifies count.index
behaves correctly. Although not ideal this is hard to implement as a
context test without changing around the (non helper/schema)
implementation of the x_data_source.
  • Loading branch information
jen20 committed Sep 3, 2016
1 parent 2623d84 commit fb150ef
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 1 deletion.
18 changes: 17 additions & 1 deletion builtin/providers/test/data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,21 @@ func testDataSource() *schema.Resource {
Read: testDataSourceRead,

Schema: map[string]*schema.Schema{
"list": &schema.Schema{
"list": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Schema{Type: schema.TypeString},
},

"input": {
Type: schema.TypeString,
Optional: true,
},

"output": {
Type: schema.TypeString,
Computed: true,
},
},
}
}
Expand All @@ -24,5 +34,11 @@ func testDataSourceRead(d *schema.ResourceData, meta interface{}) error {
d.SetId(time.Now().UTC().String())
d.Set("list", []interface{}{"one", "two", "three"})

if input, hasInput := d.GetOk("input"); hasInput {
d.Set("output", input)
} else {
d.Set("output", "some output")
}

return nil
}
57 changes: 57 additions & 0 deletions builtin/providers/test/data_source_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package test

import (
"errors"
"strings"
"testing"

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)

func TestDataSource_dataSourceCount(t *testing.T) {
resource.UnitTest(t, resource.TestCase{
Providers: testAccProviders,
CheckDestroy: func(s *terraform.State) error {
return nil
},
Steps: []resource.TestStep{
{
Config: strings.TrimSpace(`
data "test_data_source" "test" {
count = 3
input = "count-${count.index}"
}
resource "test_resource" "foo" {
required = "yep"
required_map = {
key = "value"
}
list = ["${data.test_data_source.test.*.output}"]
}
`),
Check: func(s *terraform.State) error {
res, hasRes := s.RootModule().Resources["test_resource.foo"]
if !hasRes {
return errors.New("No test_resource.foo in state")
}
if res.Primary.Attributes["list.#"] != "3" {
return errors.New("Wrong list.#, expected 3")
}
if res.Primary.Attributes["list.0"] != "count-0" {
return errors.New("Wrong list.0, expected count-0")
}
if res.Primary.Attributes["list.1"] != "count-1" {
return errors.New("Wrong list.0, expected count-1")
}
if res.Primary.Attributes["list.2"] != "count-2" {
return errors.New("Wrong list.0, expected count-2")
}
return nil
},
},
},
})
}
7 changes: 7 additions & 0 deletions builtin/providers/test/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@ func testResource() *schema.Resource {
Type: schema.TypeMap,
Computed: true,
},
"list": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"list_of_map": {
Type: schema.TypeList,
Optional: true,
Expand Down

0 comments on commit fb150ef

Please sign in to comment.