Skip to content

Commit

Permalink
Acceptance test for aws_internet_gateway
Browse files Browse the repository at this point in the history
  • Loading branch information
jckuester committed Mar 28, 2018
1 parent eab37c9 commit 469ad6c
Show file tree
Hide file tree
Showing 2 changed files with 218 additions and 2 deletions.
5 changes: 3 additions & 2 deletions test/elb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ import (
)

func TestAccElb_deleteByTags(t *testing.T) {
t.SkipNow()
// TODO tag support

var lb1, lb2 elb.LoadBalancerDescription

// TODO implement tag support for aws_elb
t.SkipNow()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Expand Down
215 changes: 215 additions & 0 deletions test/internet_gateways_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
package test

import (
"fmt"
"testing"

"os"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/cloudetc/awsweeper/command"
res "github.com/cloudetc/awsweeper/resource"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
"github.com/spf13/afero"
)

func TestAccInternetGateways_deleteByTags(t *testing.T) {
t.SkipNow()
// TODO tag support

var ig1, ig2 ec2.InternetGateway

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccInternetGatewayConfig,
ExpectNonEmptyPlan: true,
Check: resource.ComposeTestCheckFunc(
testAccCheckInternetGatewayExists("aws_internet_gateway.foo", &ig1),
testAccCheckInternetGatewayExists("aws_internet_gateway.bar", &ig2),
testMainTags(argsDryRun, testAccInternetGatewayAWSweeperTagsConfig),
testInternetGatewayExists(&ig1),
testInternetGatewayExists(&ig2),
testMainTags(argsForceDelete, testAccInternetGatewayAWSweeperTagsConfig),
testInternetGatewayDeleted(&ig1),
),
},
},
})
}

func TestAccInternetGateway_deleteByIds(t *testing.T) {
var ig1, ig2 ec2.InternetGateway

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccInternetGatewayConfig,
ExpectNonEmptyPlan: true,
Check: resource.ComposeTestCheckFunc(
testAccCheckInternetGatewayExists("aws_internet_gateway.foo", &ig1),
testAccCheckInternetGatewayExists("aws_internet_gateway.bar", &ig2),
testMainInternetGatewayIds(argsDryRun, &ig1),
testInternetGatewayExists(&ig1),
testInternetGatewayExists(&ig2),
testMainInternetGatewayIds(argsForceDelete, &ig1),
testInternetGatewayDeleted(&ig1),
testInternetGatewayExists(&ig2),
),
},
},
})
}

func testAccCheckInternetGatewayExists(n string, ig *ec2.InternetGateway) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
return fmt.Errorf("Not found: %s", n)
}

if rs.Primary.ID == "" {
return fmt.Errorf("No ID is set")
}

conn := client.ec2conn
resp, err := conn.DescribeInternetGateways(&ec2.DescribeInternetGatewaysInput{
InternetGatewayIds: []*string{aws.String(rs.Primary.ID)},
})
if err != nil {
return err
}
if len(resp.InternetGateways) == 0 {
return fmt.Errorf("InternetGateway not found")
}

*ig = *resp.InternetGateways[0]

return nil
}
}

func testInternetGatewayExists(ig *ec2.InternetGateway) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := client.ec2conn
opts := &ec2.DescribeInternetGatewaysInput{
InternetGatewayIds: []*string{ig.InternetGatewayId},
}
desc, err := conn.DescribeInternetGateways(opts)
if err != nil {
return err
}

if len(desc.InternetGateways) == 0 {
return fmt.Errorf("InternetGateway has been deleted")
}

return nil
}
}

func testInternetGatewayDeleted(ig *ec2.InternetGateway) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := client.ec2conn
desc := &ec2.DescribeInternetGatewaysInput{
InternetGatewayIds: []*string{ig.InternetGatewayId},
}
resp, err := conn.DescribeInternetGateways(desc)
if err != nil {
ec2err, ok := err.(awserr.Error)
if !ok {
return err
}
if ec2err.Code() == "InvalidInternetGatewayID.NotFound" {
return nil
}
return err
}

if len(resp.InternetGateways) != 0 {
return fmt.Errorf("InternetGateway hasn't been deleted")
}

return nil
}
}

func testMainInternetGatewayIds(args []string, ig *ec2.InternetGateway) resource.TestCheckFunc {
return func(s *terraform.State) error {
res.AppFs = afero.NewMemMapFs()
afero.WriteFile(res.AppFs, "config.yml", []byte(testAccInternetGatewayAWSweeperIdsConfig(ig)), 0644)
os.Args = args

command.WrappedMain()
return nil
}
}

const testAccInternetGatewayConfig = `
resource "aws_internet_gateway" "foo" {
vpc_id = "${aws_vpc.foo.id}"
tags {
key = "foo"
value = "bar"
}
tags {
key = "Name"
value = "awsweeper-testacc"
}
}
resource "aws_internet_gateway" "bar" {
vpc_id = "${aws_vpc.bar.id}"
tags {
key = "foo"
value = "baz"
}
tags {
key = "Name"
value = "awsweeper-testacc"
}
}
resource "aws_vpc" "foo" {
cidr_block = "10.1.0.0/16"
tags {
Name = "awsweeper-testacc"
}
}
resource "aws_vpc" "bar" {
cidr_block = "10.2.0.0/16"
tags {
Name = "awsweeper-testacc"
}
}
`

const testAccInternetGatewayAWSweeperTagsConfig = `
aws_internet_gateway:
tags:
foo: bar
`

func testAccInternetGatewayAWSweeperIdsConfig(ig *ec2.InternetGateway) string {
id := ig.InternetGatewayId

return fmt.Sprintf(`
aws_internet_gateway:
ids:
- %s
`, *id)
}

0 comments on commit 469ad6c

Please sign in to comment.