github.com/joshgarnett/terraform@v0.5.4-0.20160219181435-92dc20bb3594/builtin/providers/google/resource_storage_bucket_acl_test.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/helper/acctest"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  	//"google.golang.org/api/storage/v1"
    11  )
    12  
    13  var roleEntityBasic1 = "OWNER:user-omeemail@gmail.com"
    14  
    15  var roleEntityBasic2 = "READER:user-anotheremail@gmail.com"
    16  
    17  var roleEntityBasic3_owner = "OWNER:user-yetanotheremail@gmail.com"
    18  
    19  var roleEntityBasic3_reader = "READER:user-yetanotheremail@gmail.com"
    20  
    21  func testAclBucketName() string {
    22  	return fmt.Sprintf("%s-%d", "tf-test-acl-bucket", acctest.RandInt())
    23  }
    24  
    25  func TestAccGoogleStorageBucketAcl_basic(t *testing.T) {
    26  	bucketName := testAclBucketName()
    27  	resource.Test(t, resource.TestCase{
    28  		PreCheck:     func() { testAccPreCheck(t) },
    29  		Providers:    testAccProviders,
    30  		CheckDestroy: testAccGoogleStorageBucketAclDestroy,
    31  		Steps: []resource.TestStep{
    32  			resource.TestStep{
    33  				Config: testGoogleStorageBucketsAclBasic1(bucketName),
    34  				Check: resource.ComposeTestCheckFunc(
    35  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic1),
    36  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
    37  				),
    38  			},
    39  		},
    40  	})
    41  }
    42  
    43  func TestAccGoogleStorageBucketAcl_upgrade(t *testing.T) {
    44  	bucketName := testAclBucketName()
    45  	resource.Test(t, resource.TestCase{
    46  		PreCheck:     func() { testAccPreCheck(t) },
    47  		Providers:    testAccProviders,
    48  		CheckDestroy: testAccGoogleStorageBucketAclDestroy,
    49  		Steps: []resource.TestStep{
    50  			resource.TestStep{
    51  				Config: testGoogleStorageBucketsAclBasic1(bucketName),
    52  				Check: resource.ComposeTestCheckFunc(
    53  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic1),
    54  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
    55  				),
    56  			},
    57  
    58  			resource.TestStep{
    59  				Config: testGoogleStorageBucketsAclBasic2(bucketName),
    60  				Check: resource.ComposeTestCheckFunc(
    61  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
    62  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_owner),
    63  				),
    64  			},
    65  
    66  			resource.TestStep{
    67  				Config: testGoogleStorageBucketsAclBasicDelete(bucketName),
    68  				Check: resource.ComposeTestCheckFunc(
    69  					testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic1),
    70  					testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic2),
    71  					testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic3_owner),
    72  				),
    73  			},
    74  		},
    75  	})
    76  }
    77  
    78  func TestAccGoogleStorageBucketAcl_downgrade(t *testing.T) {
    79  	bucketName := testAclBucketName()
    80  	resource.Test(t, resource.TestCase{
    81  		PreCheck:     func() { testAccPreCheck(t) },
    82  		Providers:    testAccProviders,
    83  		CheckDestroy: testAccGoogleStorageBucketAclDestroy,
    84  		Steps: []resource.TestStep{
    85  			resource.TestStep{
    86  				Config: testGoogleStorageBucketsAclBasic2(bucketName),
    87  				Check: resource.ComposeTestCheckFunc(
    88  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
    89  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_owner),
    90  				),
    91  			},
    92  
    93  			resource.TestStep{
    94  				Config: testGoogleStorageBucketsAclBasic3(bucketName),
    95  				Check: resource.ComposeTestCheckFunc(
    96  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic2),
    97  					testAccCheckGoogleStorageBucketAcl(bucketName, roleEntityBasic3_reader),
    98  				),
    99  			},
   100  
   101  			resource.TestStep{
   102  				Config: testGoogleStorageBucketsAclBasicDelete(bucketName),
   103  				Check: resource.ComposeTestCheckFunc(
   104  					testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic1),
   105  					testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic2),
   106  					testAccCheckGoogleStorageBucketAclDelete(bucketName, roleEntityBasic3_owner),
   107  				),
   108  			},
   109  		},
   110  	})
   111  }
   112  
   113  func TestAccGoogleStorageBucketAcl_predefined(t *testing.T) {
   114  	resource.Test(t, resource.TestCase{
   115  		PreCheck:     func() { testAccPreCheck(t) },
   116  		Providers:    testAccProviders,
   117  		CheckDestroy: testAccGoogleStorageBucketAclDestroy,
   118  		Steps: []resource.TestStep{
   119  			resource.TestStep{
   120  				Config: testGoogleStorageBucketsAclPredefined(bucketName),
   121  			},
   122  		},
   123  	})
   124  }
   125  
   126  func testAccCheckGoogleStorageBucketAclDelete(bucket, roleEntityS string) resource.TestCheckFunc {
   127  	return func(s *terraform.State) error {
   128  		roleEntity, _ := getRoleEntityPair(roleEntityS)
   129  		config := testAccProvider.Meta().(*Config)
   130  
   131  		_, err := config.clientStorage.BucketAccessControls.Get(bucket, roleEntity.Entity).Do()
   132  
   133  		if err != nil {
   134  			return nil
   135  		}
   136  
   137  		return fmt.Errorf("Error, entity %s still exists", roleEntity.Entity)
   138  	}
   139  }
   140  
   141  func testAccCheckGoogleStorageBucketAcl(bucket, roleEntityS string) resource.TestCheckFunc {
   142  	return func(s *terraform.State) error {
   143  		roleEntity, _ := getRoleEntityPair(roleEntityS)
   144  		config := testAccProvider.Meta().(*Config)
   145  
   146  		res, err := config.clientStorage.BucketAccessControls.Get(bucket, roleEntity.Entity).Do()
   147  
   148  		if err != nil {
   149  			return fmt.Errorf("Error retrieving contents of acl for bucket %s: %s", bucket, err)
   150  		}
   151  
   152  		if res.Role != roleEntity.Role {
   153  			return fmt.Errorf("Error, Role mismatch %s != %s", res.Role, roleEntity.Role)
   154  		}
   155  
   156  		return nil
   157  	}
   158  }
   159  
   160  func testAccGoogleStorageBucketAclDestroy(s *terraform.State) error {
   161  	config := testAccProvider.Meta().(*Config)
   162  
   163  	for _, rs := range s.RootModule().Resources {
   164  		if rs.Type != "google_storage_bucket_acl" {
   165  			continue
   166  		}
   167  
   168  		bucket := rs.Primary.Attributes["bucket"]
   169  
   170  		_, err := config.clientStorage.BucketAccessControls.List(bucket).Do()
   171  
   172  		if err == nil {
   173  			return fmt.Errorf("Acl for bucket %s still exists", bucket)
   174  		}
   175  	}
   176  
   177  	return nil
   178  }
   179  
   180  func testGoogleStorageBucketsAclBasic1(bucketName string) string {
   181  	return fmt.Sprintf(`
   182  resource "google_storage_bucket" "bucket" {
   183  	name = "%s"
   184  }
   185  
   186  resource "google_storage_bucket_acl" "acl" {
   187  	bucket = "${google_storage_bucket.bucket.name}"
   188  	role_entity = ["%s", "%s"]
   189  }
   190  `, bucketName, roleEntityBasic1, roleEntityBasic2)
   191  }
   192  
   193  func testGoogleStorageBucketsAclBasic2(bucketName string) string {
   194  	return fmt.Sprintf(`
   195  resource "google_storage_bucket" "bucket" {
   196  	name = "%s"
   197  }
   198  
   199  resource "google_storage_bucket_acl" "acl" {
   200  	bucket = "${google_storage_bucket.bucket.name}"
   201  	role_entity = ["%s", "%s"]
   202  }
   203  `, bucketName, roleEntityBasic2, roleEntityBasic3_owner)
   204  }
   205  
   206  func testGoogleStorageBucketsAclBasicDelete(bucketName string) string {
   207  	return fmt.Sprintf(`
   208  resource "google_storage_bucket" "bucket" {
   209  	name = "%s"
   210  }
   211  
   212  resource "google_storage_bucket_acl" "acl" {
   213  	bucket = "${google_storage_bucket.bucket.name}"
   214  	role_entity = []
   215  }
   216  `, bucketName)
   217  }
   218  
   219  func testGoogleStorageBucketsAclBasic3(bucketName string) string {
   220  	return fmt.Sprintf(`
   221  resource "google_storage_bucket" "bucket" {
   222  	name = "%s"
   223  }
   224  
   225  resource "google_storage_bucket_acl" "acl" {
   226  	bucket = "${google_storage_bucket.bucket.name}"
   227  	role_entity = ["%s", "%s"]
   228  }
   229  `, bucketName, roleEntityBasic2, roleEntityBasic3_reader)
   230  }
   231  
   232  func testGoogleStorageBucketsAclPredefined(bucketName string) string {
   233  	return fmt.Sprintf(`
   234  resource "google_storage_bucket" "bucket" {
   235  	name = "%s"
   236  }
   237  
   238  resource "google_storage_bucket_acl" "acl" {
   239  	bucket = "${google_storage_bucket.bucket.name}"
   240  	predefined_acl = "projectPrivate"
   241  	default_acl = "projectPrivate"
   242  }
   243  `, bucketName)
   244  }