github.com/jsoriano/terraform@v0.6.7-0.20151026070445-8b70867fdd95/builtin/providers/google/resource_storage_bucket_acl_test.go (about)

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