From ee7bed95a88c42a1792dcb702c848af81d2aef64 Mon Sep 17 00:00:00 2001 From: Brian Flad Date: Tue, 6 Feb 2018 15:49:45 -0500 Subject: [PATCH 1/2] resource/aws_codebuild_project: Prevent crash when using source auth configuration --- aws/resource_aws_codebuild_project.go | 2 +- aws/resource_aws_codebuild_project_test.go | 125 +++++++++++++++++++++ 2 files changed, 126 insertions(+), 1 deletion(-) diff --git a/aws/resource_aws_codebuild_project.go b/aws/resource_aws_codebuild_project.go index 8715e038fe6..e699548e517 100644 --- a/aws/resource_aws_codebuild_project.go +++ b/aws/resource_aws_codebuild_project.go @@ -532,7 +532,7 @@ func flattenAwsCodebuildProjectSource(source *codebuild.ProjectSource) []interfa m["type"] = *source.Type if source.Auth != nil { - m["auth"] = sourceAuthToMap(source.Auth) + m["auth"] = []interface{}{sourceAuthToMap(source.Auth)} } if source.Buildspec != nil { diff --git a/aws/resource_aws_codebuild_project_test.go b/aws/resource_aws_codebuild_project_test.go index e79e49a8ff2..719920bc6a5 100644 --- a/aws/resource_aws_codebuild_project_test.go +++ b/aws/resource_aws_codebuild_project_test.go @@ -2,6 +2,7 @@ package aws import ( "fmt" + "regexp" "strings" "testing" "unicode" @@ -41,6 +42,42 @@ func TestAccAWSCodeBuildProject_basic(t *testing.T) { }) } +func TestAccAWSCodeBuildProject_sourceAuth(t *testing.T) { + authResource1 := "FAKERESOURCE1" + authResource2 := "FAKERESOURCE2" + authType := "OAUTH" + name := acctest.RandString(10) + resourceName := "aws_codebuild_project.foo" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSCodeBuildProjectDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource1, "INVALID"), + ExpectError: regexp.MustCompile(`Source Auth Type can only be`), + }, + { + Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource1, authType), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSCodeBuildProjectExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.resource", authResource1), + resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.type", authType), + ), + }, + { + Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource2, authType), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSCodeBuildProjectExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.resource", authResource2), + resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.type", authType), + ), + }, + }, + }) +} + func TestAccAWSCodeBuildProject_default_build_timeout(t *testing.T) { name := acctest.RandString(10) @@ -570,3 +607,91 @@ resource "aws_codebuild_project" "foo" { } `, rName, rName, rName, rName) } + +func testAccAWSCodeBuildProjectConfig_sourceAuth(rName, authResource, authType string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "codebuild_role" { + name = "codebuild-role-%[1]s" + assume_role_policy = < Date: Tue, 6 Feb 2018 16:38:41 -0500 Subject: [PATCH 2/2] resource/aws_codebuild_project: Wrap source auth with schema.NewSet for now --- aws/resource_aws_codebuild_project.go | 2 +- aws/resource_aws_codebuild_project_test.go | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/aws/resource_aws_codebuild_project.go b/aws/resource_aws_codebuild_project.go index e699548e517..8539022836a 100644 --- a/aws/resource_aws_codebuild_project.go +++ b/aws/resource_aws_codebuild_project.go @@ -532,7 +532,7 @@ func flattenAwsCodebuildProjectSource(source *codebuild.ProjectSource) []interfa m["type"] = *source.Type if source.Auth != nil { - m["auth"] = []interface{}{sourceAuthToMap(source.Auth)} + m["auth"] = schema.NewSet(resourceAwsCodeBuildProjectSourceAuthHash, []interface{}{sourceAuthToMap(source.Auth)}) } if source.Buildspec != nil { diff --git a/aws/resource_aws_codebuild_project_test.go b/aws/resource_aws_codebuild_project_test.go index 719920bc6a5..dd22dbe8b8f 100644 --- a/aws/resource_aws_codebuild_project_test.go +++ b/aws/resource_aws_codebuild_project_test.go @@ -43,8 +43,7 @@ func TestAccAWSCodeBuildProject_basic(t *testing.T) { } func TestAccAWSCodeBuildProject_sourceAuth(t *testing.T) { - authResource1 := "FAKERESOURCE1" - authResource2 := "FAKERESOURCE2" + authResource := "FAKERESOURCE1" authType := "OAUTH" name := acctest.RandString(10) resourceName := "aws_codebuild_project.foo" @@ -55,23 +54,15 @@ func TestAccAWSCodeBuildProject_sourceAuth(t *testing.T) { CheckDestroy: testAccCheckAWSCodeBuildProjectDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource1, "INVALID"), + Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource, "INVALID"), ExpectError: regexp.MustCompile(`Source Auth Type can only be`), }, { - Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource1, authType), + Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource, authType), Check: resource.ComposeTestCheckFunc( testAccCheckAWSCodeBuildProjectExists(resourceName), - resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.resource", authResource1), - resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.type", authType), - ), - }, - { - Config: testAccAWSCodeBuildProjectConfig_sourceAuth(name, authResource2, authType), - Check: resource.ComposeTestCheckFunc( - testAccCheckAWSCodeBuildProjectExists(resourceName), - resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.resource", authResource2), - resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.0.type", authType), + resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.2706882902.resource", authResource), + resource.TestCheckResourceAttr(resourceName, "source.1060593600.auth.2706882902.type", authType), ), }, },