github.com/pbthorste/terraform@v0.8.6-0.20170127005045-deb56bd93da2/builtin/providers/google/resource_google_project_test.go (about) 1 package google 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/acctest" 9 "github.com/hashicorp/terraform/helper/resource" 10 "github.com/hashicorp/terraform/terraform" 11 "google.golang.org/api/cloudresourcemanager/v1" 12 ) 13 14 var ( 15 org = multiEnvSearch([]string{ 16 "GOOGLE_ORG", 17 }) 18 19 pname = "Terraform Acceptance Tests" 20 originalPolicy *cloudresourcemanager.Policy 21 ) 22 23 func multiEnvSearch(ks []string) string { 24 for _, k := range ks { 25 if v := os.Getenv(k); v != "" { 26 return v 27 } 28 } 29 return "" 30 } 31 32 // Test that a Project resource can be created and an IAM policy 33 // associated 34 func TestAccGoogleProject_create(t *testing.T) { 35 pid := "terraform-" + acctest.RandString(10) 36 resource.Test(t, resource.TestCase{ 37 PreCheck: func() { testAccPreCheck(t) }, 38 Providers: testAccProviders, 39 Steps: []resource.TestStep{ 40 // This step imports an existing project 41 resource.TestStep{ 42 Config: testAccGoogleProject_create(pid, pname, org), 43 Check: resource.ComposeTestCheckFunc( 44 testAccCheckGoogleProjectExists("google_project.acceptance", pid), 45 ), 46 }, 47 }, 48 }) 49 } 50 51 func testAccCheckGoogleProjectExists(r, pid string) resource.TestCheckFunc { 52 return func(s *terraform.State) error { 53 rs, ok := s.RootModule().Resources[r] 54 if !ok { 55 return fmt.Errorf("Not found: %s", r) 56 } 57 58 if rs.Primary.ID == "" { 59 return fmt.Errorf("No ID is set") 60 } 61 62 if rs.Primary.ID != pid { 63 return fmt.Errorf("Expected project %q to match ID %q in state", pid, rs.Primary.ID) 64 } 65 66 return nil 67 } 68 } 69 70 func testAccGoogleProjectImportExisting(pid string) string { 71 return fmt.Sprintf(` 72 resource "google_project" "acceptance" { 73 project_id = "%s" 74 75 } 76 `, pid) 77 } 78 79 func testAccGoogleProjectImportExistingWithIam(pid string) string { 80 return fmt.Sprintf(` 81 resource "google_project" "acceptance" { 82 project_id = "%v" 83 policy_data = "${data.google_iam_policy.admin.policy_data}" 84 } 85 data "google_iam_policy" "admin" { 86 binding { 87 role = "roles/storage.objectViewer" 88 members = [ 89 "user:evanbrown@google.com", 90 ] 91 } 92 binding { 93 role = "roles/compute.instanceAdmin" 94 members = [ 95 "user:evanbrown@google.com", 96 "user:evandbrown@gmail.com", 97 ] 98 } 99 }`, pid) 100 }