@ -2,8 +2,10 @@ package google
import (
"fmt"
"os"
"testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
"google.golang.org/api/compute/v1"
@ -11,7 +13,16 @@ import (
// Add two key value pairs
func TestAccComputeProjectMetadata_basic ( t * testing . T ) {
skipIfEnvNotSet ( t ,
[ ] string {
"GOOGLE_ORG" ,
"GOOGLE_BILLING_ACCOUNT" ,
} ... ,
)
billingId := os . Getenv ( "GOOGLE_BILLING_ACCOUNT" )
var project compute . Project
pid := "terrafom-test-" + acctest . RandString ( 10 )
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
@ -19,13 +30,13 @@ func TestAccComputeProjectMetadata_basic(t *testing.T) {
CheckDestroy : testAccCheckComputeProjectMetadataDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccComputeProject_basic0_metadata ,
Config : testAccComputeProject_basic0_metadata ( pid , pname , org , billingId ) ,
Check : resource . ComposeTestCheckFunc (
testAccCheckComputeProjectExists (
"google_compute_project_metadata.fizzbuzz" , & project ) ,
testAccCheckComputeProjectMetadataContains ( & project , "banana" , "orange" ) ,
testAccCheckComputeProjectMetadataContains ( & project , "sofa" , "darwinism" ) ,
testAccCheckComputeProjectMetadataSize ( & project , 2 ) ,
"google_compute_project_metadata.fizzbuzz" , pid , & project ) ,
testAccCheckComputeProjectMetadataContains ( pid , "banana" , "orange" ) ,
testAccCheckComputeProjectMetadataContains ( pid , "sofa" , "darwinism" ) ,
testAccCheckComputeProjectMetadataSize ( pid , 2 ) ,
) ,
} ,
} ,
@ -34,7 +45,16 @@ func TestAccComputeProjectMetadata_basic(t *testing.T) {
// Add three key value pairs, then replace one and modify a second
func TestAccComputeProjectMetadata_modify_1 ( t * testing . T ) {
skipIfEnvNotSet ( t ,
[ ] string {
"GOOGLE_ORG" ,
"GOOGLE_BILLING_ACCOUNT" ,
} ... ,
)
billingId := os . Getenv ( "GOOGLE_BILLING_ACCOUNT" )
var project compute . Project
pid := "terrafom-test-" + acctest . RandString ( 10 )
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
@ -42,26 +62,26 @@ func TestAccComputeProjectMetadata_modify_1(t *testing.T) {
CheckDestroy : testAccCheckComputeProjectMetadataDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccComputeProject_modify0_metadata ,
Config : testAccComputeProject_modify0_metadata ( pid , pname , org , billingId ) ,
Check : resource . ComposeTestCheckFunc (
testAccCheckComputeProjectExists (
"google_compute_project_metadata.fizzbuzz" , & project ) ,
testAccCheckComputeProjectMetadataContains ( & project , "paper" , "pen" ) ,
testAccCheckComputeProjectMetadataContains ( & project , "genghis_khan" , "french bread" ) ,
testAccCheckComputeProjectMetadataContains ( & project , "happy" , "smiling" ) ,
testAccCheckComputeProjectMetadataSize ( & project , 3 ) ,
"google_compute_project_metadata.fizzbuzz" , pid , & project ) ,
testAccCheckComputeProjectMetadataContains ( pid , "paper" , "pen" ) ,
testAccCheckComputeProjectMetadataContains ( pid , "genghis_khan" , "french bread" ) ,
testAccCheckComputeProjectMetadataContains ( pid , "happy" , "smiling" ) ,
testAccCheckComputeProjectMetadataSize ( pid , 3 ) ,
) ,
} ,
resource . TestStep {
Config : testAccComputeProject_modify1_metadata ,
Config : testAccComputeProject_modify1_metadata ( pid , pname , org , billingId ) ,
Check : resource . ComposeTestCheckFunc (
testAccCheckComputeProjectExists (
"google_compute_project_metadata.fizzbuzz" , & project ) ,
testAccCheckComputeProjectMetadataContains ( & project , "paper" , "pen" ) ,
testAccCheckComputeProjectMetadataContains ( & project , "paris" , "french bread" ) ,
testAccCheckComputeProjectMetadataContains ( & project , "happy" , "laughing" ) ,
testAccCheckComputeProjectMetadataSize ( & project , 3 ) ,
"google_compute_project_metadata.fizzbuzz" , pid , & project ) ,
testAccCheckComputeProjectMetadataContains ( pid , "paper" , "pen" ) ,
testAccCheckComputeProjectMetadataContains ( pid , "paris" , "french bread" ) ,
testAccCheckComputeProjectMetadataContains ( pid , "happy" , "laughing" ) ,
testAccCheckComputeProjectMetadataSize ( pid , 3 ) ,
) ,
} ,
} ,
@ -70,7 +90,16 @@ func TestAccComputeProjectMetadata_modify_1(t *testing.T) {
// Add two key value pairs, and replace both
func TestAccComputeProjectMetadata_modify_2 ( t * testing . T ) {
skipIfEnvNotSet ( t ,
[ ] string {
"GOOGLE_ORG" ,
"GOOGLE_BILLING_ACCOUNT" ,
} ... ,
)
billingId := os . Getenv ( "GOOGLE_BILLING_ACCOUNT" )
var project compute . Project
pid := "terraform-test-" + acctest . RandString ( 10 )
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
@ -78,24 +107,24 @@ func TestAccComputeProjectMetadata_modify_2(t *testing.T) {
CheckDestroy : testAccCheckComputeProjectMetadataDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccComputeProject_basic0_metadata ,
Config : testAccComputeProject_basic0_metadata ( pid , pname , org , billingId ) ,
Check : resource . ComposeTestCheckFunc (
testAccCheckComputeProjectExists (
"google_compute_project_metadata.fizzbuzz" , & project ) ,
testAccCheckComputeProjectMetadataContains ( & project , "banana" , "orange" ) ,
testAccCheckComputeProjectMetadataContains ( & project , "sofa" , "darwinism" ) ,
testAccCheckComputeProjectMetadataSize ( & project , 2 ) ,
"google_compute_project_metadata.fizzbuzz" , pid , & project ) ,
testAccCheckComputeProjectMetadataContains ( pid , "banana" , "orange" ) ,
testAccCheckComputeProjectMetadataContains ( pid , "sofa" , "darwinism" ) ,
testAccCheckComputeProjectMetadataSize ( pid , 2 ) ,
) ,
} ,
resource . TestStep {
Config : testAccComputeProject_basic1_metadata ,
Config : testAccComputeProject_basic1_metadata ( pid , pname , org , billingId ) ,
Check : resource . ComposeTestCheckFunc (
testAccCheckComputeProjectExists (
"google_compute_project_metadata.fizzbuzz" , & project ) ,
testAccCheckComputeProjectMetadataContains ( & project , "kiwi" , "papaya" ) ,
testAccCheckComputeProjectMetadataContains ( & project , "finches" , "darwinism" ) ,
testAccCheckComputeProjectMetadataSize ( & project , 2 ) ,
"google_compute_project_metadata.fizzbuzz" , pid , & project ) ,
testAccCheckComputeProjectMetadataContains ( pid , "kiwi" , "papaya" ) ,
testAccCheckComputeProjectMetadataContains ( pid , "finches" , "darwinism" ) ,
testAccCheckComputeProjectMetadataSize ( pid , 2 ) ,
) ,
} ,
} ,
@ -105,15 +134,21 @@ func TestAccComputeProjectMetadata_modify_2(t *testing.T) {
func testAccCheckComputeProjectMetadataDestroy ( s * terraform . State ) error {
config := testAccProvider . Meta ( ) . ( * Config )
project , err := config . clientCompute . Projects . Get ( config . Project ) . Do ( )
if err == nil && len ( project . CommonInstanceMetadata . Items ) > 0 {
return fmt . Errorf ( "Error, metadata items still exist" )
for _ , rs := range s . RootModule ( ) . Resources {
if rs . Type != "google_compute_project_metadata" {
continue
}
project , err := config . clientCompute . Projects . Get ( rs . Primary . ID ) . Do ( )
if err == nil && len ( project . CommonInstanceMetadata . Items ) > 0 {
return fmt . Errorf ( "Error, metadata items still exist in %s" , rs . Primary . ID )
}
}
return nil
}
func testAccCheckComputeProjectExists ( n string , project * compute . Project ) resource . TestCheckFunc {
func testAccCheckComputeProjectExists ( n , pid string , project * compute . Project ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
rs , ok := s . RootModule ( ) . Resources [ n ]
if ! ok {
@ -127,7 +162,7 @@ func testAccCheckComputeProjectExists(n string, project *compute.Project) resour
config := testAccProvider . Meta ( ) . ( * Config )
found , err := config . clientCompute . Projects . Get (
config. Project ) . Do ( )
pid ) . Do ( )
if err != nil {
return err
}
@ -142,10 +177,10 @@ func testAccCheckComputeProjectExists(n string, project *compute.Project) resour
}
}
func testAccCheckComputeProjectMetadataContains ( p roject * compute . Project , key string , value string ) resource . TestCheckFunc {
func testAccCheckComputeProjectMetadataContains ( p id, key , value string ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
config := testAccProvider . Meta ( ) . ( * Config )
project , err := config . clientCompute . Projects . Get ( config. Project ) . Do ( )
project , err := config . clientCompute . Projects . Get ( pid ) . Do ( )
if err != nil {
return fmt . Errorf ( "Error, failed to load project service for %s: %s" , config . Project , err )
}
@ -161,14 +196,14 @@ func testAccCheckComputeProjectMetadataContains(project *compute.Project, key st
}
}
return fmt . Errorf ( "Error, key %s not present ", key )
return fmt . Errorf ( "Error, key %s not present in %s ", key , project . SelfLink )
}
}
func testAccCheckComputeProjectMetadataSize ( p roject * compute . Project , size int ) resource . TestCheckFunc {
func testAccCheckComputeProjectMetadataSize ( p id string , size int ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
config := testAccProvider . Meta ( ) . ( * Config )
project , err := config . clientCompute . Projects . Get ( config. Project ) . Do ( )
project , err := config . clientCompute . Projects . Get ( pid ) . Do ( )
if err != nil {
return fmt . Errorf ( "Error, failed to load project service for %s: %s" , config . Project , err )
}
@ -182,36 +217,100 @@ func testAccCheckComputeProjectMetadataSize(project *compute.Project, size int)
}
}
const testAccComputeProject_basic0_metadata = `
func testAccComputeProject_basic0_metadata ( pid , name , org , billing string ) string {
return fmt . Sprintf ( `
resource "google_project" "project" {
project_id = "%s"
name = "%s"
org_id = "%s"
billing_account = "%s"
}
resource "google_project_services" "services" {
project = "${google_project.project.project_id}"
services = [ "compute-component.googleapis.com" ]
}
resource "google_compute_project_metadata" "fizzbuzz" {
metadata {
banana = "orange"
sofa = "darwinism"
}
} `
project = "${google_project.project.project_id}"
metadata {
banana = "orange"
sofa = "darwinism"
}
depends_on = [ "google_project_services.services" ]
} ` , pid , name , org , billing )
}
func testAccComputeProject_basic1_metadata ( pid , name , org , billing string ) string {
return fmt . Sprintf ( `
resource "google_project" "project" {
project_id = "%s"
name = "%s"
org_id = "%s"
billing_account = "%s"
}
resource "google_project_services" "services" {
project = "${google_project.project.project_id}"
services = [ "compute-component.googleapis.com" ]
}
const testAccComputeProject_basic1_metadata = `
resource "google_compute_project_metadata" "fizzbuzz" {
metadata {
kiwi = "papaya"
finches = "darwinism"
}
} `
project = "${google_project.project.project_id}"
metadata {
kiwi = "papaya"
finches = "darwinism"
}
depends_on = [ "google_project_services.services" ]
} ` , pid , name , org , billing )
}
func testAccComputeProject_modify0_metadata ( pid , name , org , billing string ) string {
return fmt . Sprintf ( `
resource "google_project" "project" {
project_id = "%s"
name = "%s"
org_id = "%s"
billing_account = "%s"
}
resource "google_project_services" "services" {
project = "${google_project.project.project_id}"
services = [ "compute-component.googleapis.com" ]
}
const testAccComputeProject_modify0_metadata = `
resource "google_compute_project_metadata" "fizzbuzz" {
metadata {
paper = "pen"
genghis_khan = "french bread"
happy = "smiling"
}
} `
project = "${google_project.project.project_id}"
metadata {
paper = "pen"
genghis_khan = "french bread"
happy = "smiling"
}
depends_on = [ "google_project_services.services" ]
} ` , pid , name , org , billing )
}
func testAccComputeProject_modify1_metadata ( pid , name , org , billing string ) string {
return fmt . Sprintf ( `
resource "google_project" "project" {
project_id = "%s"
name = "%s"
org_id = "%s"
billing_account = "%s"
}
resource "google_project_services" "services" {
project = "${google_project.project.project_id}"
services = [ "compute-component.googleapis.com" ]
}
const testAccComputeProject_modify1_metadata = `
resource "google_compute_project_metadata" "fizzbuzz" {
metadata {
paper = "pen"
paris = "french bread"
happy = "laughing"
}
} `
project = "${google_project.project.project_id}"
metadata {
paper = "pen"
paris = "french bread"
happy = "laughing"
}
depends_on = [ "google_project_services.services" ]
} ` , pid , name , org , billing )
}