Skip to content

Commit

Permalink
Issues hashicorp#143 - Add aws_iot_policy resource based on work from @…
Browse files Browse the repository at this point in the history
  • Loading branch information
alex.mabry committed Jul 19, 2017
1 parent 106b7ea commit f44424e
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 28 deletions.
2 changes: 1 addition & 1 deletion aws/resource_aws_iot_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func resourceAwsIotPolicyRead(d *schema.ResourceData, meta interface{}) error {
}

d.Set("arn", out.PolicyArn)
d.Set("defaultVersionId", out.DefaultVersionId)
d.Set("default_version_id", out.DefaultVersionId)

return nil
}
Expand Down
65 changes: 38 additions & 27 deletions aws/resource_aws_iot_policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,46 @@ import (
"fmt"
"testing"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/iot"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
"regexp"
)

func TestAccAWSIoTPolicy_basic(t *testing.T) {
rName := acctest.RandomWithPrefix("PubSubToAnyTopic-")

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckAWSIoTPolicyDestroy_basic,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccAWSIoTPolicy_basic,
Config: testAccAWSIoTPolicyConfigInitialState(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSIoTPolicyExists_basic("aws_iot_policy.pubsub"),
resource.TestCheckResourceAttr("aws_iot_policy.pubsub", "name", rName),
resource.TestCheckResourceAttrSet("aws_iot_policy.pubsub", "arn"),
resource.TestCheckResourceAttrSet("aws_iot_policy.pubsub", "default_version_id"),
resource.TestCheckResourceAttrSet("aws_iot_policy.pubsub", "policy"),
),
},
},
})
}

func TestAccAWSIoTPolicy_invalidJson(t *testing.T) {
rName := acctest.RandomWithPrefix("PubSubToAnyTopic-")

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckAWSIoTPolicyDestroy_basic,
Steps: []resource.TestStep{
{
Config: testAccAWSIoTPolicyInvalidJsonConfig,
Config: testAccAWSIoTPolicyInvalidJsonConfig(rName),
ExpectError: regexp.MustCompile("MalformedPolicyException.*"),
},
},
Expand All @@ -48,37 +58,35 @@ func testAccCheckAWSIoTPolicyDestroy_basic(s *terraform.State) error {
continue
}

out, err := conn.ListPolicies(&iot.ListPoliciesInput{})

if err != nil {
return err
// Try to find the Policy
GetPolicyOpts := &iot.GetPolicyInput{
PolicyName: aws.String(rs.Primary.Attributes["name"]),
}

for _, t := range out.Policies {
if *t.PolicyName == rs.Primary.ID {
return fmt.Errorf("IoT policy still exists:\n%s", t)
resp, err := conn.GetPolicy(GetPolicyOpts)

if err == nil {
if resp.PolicyName != nil {
return fmt.Errorf("IoT Policy still exists")
}
}

// Verify the error is what we want
if err != nil {
iotErr, ok := err.(awserr.Error)
if !ok || iotErr.Code() != "ResourceNotFoundException" {
return err
}
}
}

return nil
}

func testAccCheckAWSIoTPolicyExists_basic(name string) resource.TestCheckFunc {
return func(s *terraform.State) error {
_, ok := s.RootModule().Resources[name]
if !ok {
return fmt.Errorf("Not found: %s", name)
}

return nil
}
}

var testAccAWSIoTPolicy_basic = `
func testAccAWSIoTPolicyConfigInitialState(rName string) string {
return fmt.Sprintf(`
resource "aws_iot_policy" "pubsub" {
name = "PubSubToAnyTopic"
name = "%s"
policy = <<EOF
{
"Version": "2012-10-17",
Expand All @@ -90,11 +98,13 @@ resource "aws_iot_policy" "pubsub" {
}
EOF
}
`
`, rName)
}

var testAccAWSIoTPolicyInvalidJsonConfig = `
func testAccAWSIoTPolicyInvalidJsonConfig(rName string) string {
return fmt.Sprintf(`
resource "aws_iot_policy" "pubsub" {
name = "PubSubToAnyTopic"
name = "%s"
policy = <<EOF
{
"Version": "2012-10-17",
Expand All @@ -106,4 +116,5 @@ resource "aws_iot_policy" "pubsub" {
}
EOF
}
`
`, rName)
}
11 changes: 11 additions & 0 deletions website/aws.erb
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,17 @@

</ul>
</li>

<li<%= sidebar_current("docs-aws-resource-iot") %>>
<a href="#">IoT Resources</a>
<ul class="nav nav-visible">

<li<%= sidebar_current("docs-aws-resource-iot-policy") %>>
<a href="/docs/providers/aws/r/iot_policy.html">aws_iot_policy</a>
</li>

</ul>
</li>

<li<%= sidebar_current("docs-aws-resource-inspector") %>>
<a href="#">Inspector Resources</a>
Expand Down

0 comments on commit f44424e

Please sign in to comment.