2017-07-28 17:49:02 +00:00
|
|
|
package google
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"testing"
|
|
|
|
|
2017-07-28 19:59:19 +00:00
|
|
|
"github.com/hashicorp/terraform/helper/acctest"
|
2017-07-28 17:49:02 +00:00
|
|
|
"github.com/hashicorp/terraform/helper/resource"
|
|
|
|
"github.com/hashicorp/terraform/terraform"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestAccComputeProjectMetadataItem_basic(t *testing.T) {
|
2017-10-12 22:07:29 +00:00
|
|
|
t.Parallel(
|
2017-07-28 19:59:19 +00:00
|
|
|
// Key must be unique to avoid concurrent tests interfering with each other
|
2017-10-12 22:07:29 +00:00
|
|
|
)
|
|
|
|
|
2017-07-28 19:59:19 +00:00
|
|
|
key := "myKey" + acctest.RandString(10)
|
|
|
|
|
2017-07-28 17:49:02 +00:00
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckProjectMetadataItemDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
{
|
2018-01-03 14:26:55 +00:00
|
|
|
Config: testAccProjectMetadataItem_basicWithResourceName("foobar", key, "myValue"),
|
2017-07-28 17:49:02 +00:00
|
|
|
Check: resource.ComposeTestCheckFunc(
|
2017-07-28 19:59:19 +00:00
|
|
|
testAccCheckProjectMetadataItem_hasMetadata(key, "myValue"),
|
2017-07-28 17:49:02 +00:00
|
|
|
),
|
|
|
|
},
|
2018-01-03 14:26:55 +00:00
|
|
|
{
|
|
|
|
ResourceName: "google_compute_project_metadata_item.foobar",
|
|
|
|
ImportState: true,
|
|
|
|
ImportStateVerify: true,
|
|
|
|
},
|
2017-07-28 17:49:02 +00:00
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2017-07-28 22:50:12 +00:00
|
|
|
func TestAccComputeProjectMetadataItem_basicMultiple(t *testing.T) {
|
2017-10-12 22:07:29 +00:00
|
|
|
t.Parallel(
|
2017-07-28 22:50:12 +00:00
|
|
|
// Generate a config of two config keys
|
2017-10-12 22:07:29 +00:00
|
|
|
)
|
|
|
|
|
2017-07-28 22:50:12 +00:00
|
|
|
config := testAccProjectMetadataItem_basic("myKey", "myValue") +
|
|
|
|
testAccProjectMetadataItem_basic("myOtherKey", "myOtherValue")
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckProjectMetadataItemDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
{
|
|
|
|
Config: config,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckProjectMetadataItem_hasMetadata("myKey", "myValue"),
|
|
|
|
testAccCheckProjectMetadataItem_hasMetadata("myOtherKey", "myOtherValue"),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2017-07-28 17:49:02 +00:00
|
|
|
func TestAccComputeProjectMetadataItem_basicWithEmptyVal(t *testing.T) {
|
2017-10-12 22:07:29 +00:00
|
|
|
t.Parallel(
|
2017-07-28 19:59:19 +00:00
|
|
|
// Key must be unique to avoid concurrent tests interfering with each other
|
2017-10-12 22:07:29 +00:00
|
|
|
)
|
|
|
|
|
2017-07-28 19:59:19 +00:00
|
|
|
key := "myKey" + acctest.RandString(10)
|
|
|
|
|
2017-07-28 17:49:02 +00:00
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckProjectMetadataItemDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
{
|
2018-01-03 14:26:55 +00:00
|
|
|
Config: testAccProjectMetadataItem_basicWithResourceName("foobar", key, ""),
|
2017-07-28 17:49:02 +00:00
|
|
|
Check: resource.ComposeTestCheckFunc(
|
2017-07-28 19:59:19 +00:00
|
|
|
testAccCheckProjectMetadataItem_hasMetadata(key, ""),
|
2017-07-28 17:49:02 +00:00
|
|
|
),
|
|
|
|
},
|
2018-01-03 14:26:55 +00:00
|
|
|
{
|
|
|
|
ResourceName: "google_compute_project_metadata_item.foobar",
|
|
|
|
ImportState: true,
|
|
|
|
ImportStateVerify: true,
|
|
|
|
},
|
2017-07-28 17:49:02 +00:00
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAccComputeProjectMetadataItem_basicUpdate(t *testing.T) {
|
2017-10-12 22:07:29 +00:00
|
|
|
t.Parallel(
|
2017-07-28 19:59:19 +00:00
|
|
|
// Key must be unique to avoid concurrent tests interfering with each other
|
2017-10-12 22:07:29 +00:00
|
|
|
)
|
|
|
|
|
2017-07-28 19:59:19 +00:00
|
|
|
key := "myKey" + acctest.RandString(10)
|
|
|
|
|
2017-07-28 17:49:02 +00:00
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckProjectMetadataItemDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
{
|
2017-08-08 20:05:13 +00:00
|
|
|
Config: testAccProjectMetadataItem_basicWithResourceName("foobar", key, "myValue"),
|
2017-07-28 17:49:02 +00:00
|
|
|
Check: resource.ComposeTestCheckFunc(
|
2017-07-28 19:59:19 +00:00
|
|
|
testAccCheckProjectMetadataItem_hasMetadata(key, "myValue"),
|
2017-07-28 17:49:02 +00:00
|
|
|
),
|
|
|
|
},
|
|
|
|
{
|
2017-08-08 20:05:13 +00:00
|
|
|
Config: testAccProjectMetadataItem_basicWithResourceName("foobar", key, "myUpdatedValue"),
|
2017-07-28 17:49:02 +00:00
|
|
|
Check: resource.ComposeTestCheckFunc(
|
2017-07-28 19:59:19 +00:00
|
|
|
testAccCheckProjectMetadataItem_hasMetadata(key, "myUpdatedValue"),
|
2017-07-28 17:49:02 +00:00
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func testAccCheckProjectMetadataItem_hasMetadata(key, value string) resource.TestCheckFunc {
|
|
|
|
return func(s *terraform.State) error {
|
|
|
|
config := testAccProvider.Meta().(*Config)
|
|
|
|
|
|
|
|
project, err := config.clientCompute.Projects.Get(config.Project).Do()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2017-11-29 17:47:42 +00:00
|
|
|
metadata := flattenMetadata(project.CommonInstanceMetadata)
|
2017-07-28 17:49:02 +00:00
|
|
|
|
|
|
|
val, ok := metadata[key]
|
|
|
|
if !ok {
|
|
|
|
return fmt.Errorf("Unable to find a value for key '%s'", key)
|
|
|
|
}
|
|
|
|
if val != value {
|
|
|
|
return fmt.Errorf("Value for key '%s' does not match. Expected '%s' but found '%s'", key, value, val)
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func testAccCheckProjectMetadataItemDestroy(s *terraform.State) error {
|
|
|
|
config := testAccProvider.Meta().(*Config)
|
|
|
|
|
|
|
|
project, err := config.clientCompute.Projects.Get(config.Project).Do()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2017-11-29 17:47:42 +00:00
|
|
|
metadata := flattenMetadata(project.CommonInstanceMetadata)
|
2017-07-28 17:49:02 +00:00
|
|
|
|
|
|
|
for _, rs := range s.RootModule().Resources {
|
|
|
|
if rs.Type != "google_compute_project_metadata_item" {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
_, ok := metadata[rs.Primary.ID]
|
|
|
|
if ok {
|
|
|
|
return fmt.Errorf("Metadata key/value '%s': '%s' still exist", rs.Primary.Attributes["key"], rs.Primary.Attributes["value"])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func testAccProjectMetadataItem_basic(key, val string) string {
|
2017-08-08 20:05:13 +00:00
|
|
|
return testAccProjectMetadataItem_basicWithResourceName(acctest.RandString(10), key, val)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testAccProjectMetadataItem_basicWithResourceName(resourceName, key, val string) string {
|
2017-07-28 17:49:02 +00:00
|
|
|
return fmt.Sprintf(`
|
2017-08-08 20:05:13 +00:00
|
|
|
resource "google_compute_project_metadata_item" "%s" {
|
2017-07-28 17:49:02 +00:00
|
|
|
key = "%s"
|
|
|
|
value = "%s"
|
|
|
|
}
|
2017-08-08 20:05:13 +00:00
|
|
|
`, resourceName, key, val)
|
2017-07-28 17:49:02 +00:00
|
|
|
}
|