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