Skip to content

Commit

Permalink
Add integration tests for aws_subnet
Browse files Browse the repository at this point in the history
  • Loading branch information
jckuester committed Jan 24, 2018
1 parent 22098c8 commit 107ad51
Show file tree
Hide file tree
Showing 11 changed files with 232 additions and 44 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# AWSweeper

AWSweeper wipes out all (or parts) of the resources in your AWS account. Resources to be deleted can be filtered by their tags or IDs
using [regular expressions](https://golang.org/pkg/regexp/syntax/) declared in a yaml file (see [test.yml](test.acceptance/test.yml)).
using [regular expressions](https://golang.org/pkg/regexp/syntax/) declared in a yaml file (see [test.yml](test/test.yml)).

AWSweeper [can delete many](#supported-resources), but not all resources yet.

Expand Down
40 changes: 0 additions & 40 deletions test.acceptance/provider_test.go

This file was deleted.

File renamed without changes.
File renamed without changes.
File renamed without changes
36 changes: 35 additions & 1 deletion test.acceptance/helper_test.go → test/helper.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package test_acceptance
package test

import (
"log"
"os"
"testing"

"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/autoscaling"
Expand All @@ -15,12 +17,18 @@ import (
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/sts"
"github.com/cloudetc/awsweeper/command_wipe"
"github.com/hashicorp/terraform/builtin/providers/aws"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/terraform"
"github.com/spf13/afero"
)

var client = initClient()

var testAccProviders map[string]terraform.ResourceProvider
var testAccProvider *schema.Provider

var argsDryRun = []string{"cmd", "--dry-run", "config.yml"}
var argsForceDelete = []string{"cmd", "--force", "config.yml"}

Expand Down Expand Up @@ -56,6 +64,32 @@ func initClient() *AWSClient {
}
}

func init() {
testAccProvider = aws.Provider().(*schema.Provider)
testAccProviders = map[string]terraform.ResourceProvider{
"aws": testAccProvider,
}
}

func testAccPreCheck(t *testing.T) {
if v := os.Getenv("AWS_PROFILE"); v == "" {
if v := os.Getenv("AWS_ACCESS_KEY_ID"); v == "" {
t.Fatal("AWS_ACCESS_KEY_ID must be set for acceptance tests")
}
if v := os.Getenv("AWS_SECRET_ACCESS_KEY"); v == "" {
t.Fatal("AWS_SECRET_ACCESS_KEY must be set for acceptance tests")
}
}
if v := os.Getenv("AWS_DEFAULT_REGION"); v == "" {
log.Println("[INFO] Test: Using us-west-2 as test region")
os.Setenv("AWS_DEFAULT_REGION", "us-west-2")
}
err := testAccProvider.Configure(terraform.NewResourceConfig(nil))
if err != nil {
t.Fatal(err)
}
}

func testMainTags(args []string, config string) resource.TestCheckFunc {
return func(s *terraform.State) error {
command_wipe.OsFs = afero.NewMemMapFs()
Expand Down
2 changes: 1 addition & 1 deletion test.acceptance/key_pair_test.go → test/key_pair_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package test_acceptance
package test

import (
"fmt"
Expand Down
194 changes: 194 additions & 0 deletions test/subnet_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
package test

import (
"fmt"
"os"
"testing"

"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_wipe"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
"github.com/spf13/afero"
)

func TestAccSubnet_deleteByTags(t *testing.T) {
var subnet1, subnet2 ec2.Subnet

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccSubnetConfig,
ExpectNonEmptyPlan: true,
Check: resource.ComposeTestCheckFunc(
testAccCheckSubnetExists("aws_subnet.foo", &subnet1),
testAccCheckSubnetExists("aws_subnet.bar", &subnet2),
testMainTags(argsDryRun, testAccSubnetAWSweeperTagsConfig),
testSubnetExists(&subnet1),
testSubnetExists(&subnet2),
testMainTags(argsForceDelete, testAccSubnetAWSweeperTagsConfig),
testSubnetDeleted(&subnet1),
testSubnetExists(&subnet2),
),
},
},
})
}

func TestAccSubnet_deleteByIds(t *testing.T) {
var subnet1, subnet2 ec2.Subnet

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccSubnetConfig,
ExpectNonEmptyPlan: true,
Check: resource.ComposeTestCheckFunc(
testAccCheckSubnetExists("aws_subnet.foo", &subnet1),
testAccCheckSubnetExists("aws_subnet.bar", &subnet2),
testMainSubnetIds(argsDryRun, &subnet1),
testSubnetExists(&subnet1),
testSubnetExists(&subnet2),
testMainSubnetIds(argsForceDelete, &subnet1),
testSubnetDeleted(&subnet1),
testSubnetExists(&subnet2),
),
},
},
})
}

func testAccCheckSubnetExists(n string, subnet *ec2.Subnet) 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 subnet ID is set")
}

conn := client.ec2conn
DescribeSubnetOpts := &ec2.DescribeSubnetsInput{
SubnetIds: []*string{aws.String(rs.Primary.ID)},
}
resp, err := conn.DescribeSubnets(DescribeSubnetOpts)
if err != nil {
return err
}
if len(resp.Subnets) == 0 {
return fmt.Errorf("Subnet not found")
}

*subnet = *resp.Subnets[0]

return nil
}
}

func testSubnetExists(subnet *ec2.Subnet) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := client.ec2conn
DescribeSubnetOpts := &ec2.DescribeSubnetsInput{
SubnetIds: []*string{subnet.SubnetId},
}
resp, err := conn.DescribeSubnets(DescribeSubnetOpts)
if err != nil {
return err
}
if len(resp.Subnets) == 0 {
return fmt.Errorf("Subnet has been deleted")
}

return nil
}
}

func testSubnetDeleted(subnet *ec2.Subnet) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := client.ec2conn
DescribeSubnetOpts := &ec2.DescribeSubnetsInput{
SubnetIds: []*string{subnet.SubnetId},
}
resp, err := conn.DescribeSubnets(DescribeSubnetOpts)
if err != nil {
ec2err, ok := err.(awserr.Error)
if !ok {
return err
}
if ec2err.Code() == "InvalidSubnetID.NotFound" {
return nil
}
return err
}

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

return nil
}
}

func testMainSubnetIds(args []string, subnet *ec2.Subnet) resource.TestCheckFunc {
return func(s *terraform.State) error {
command_wipe.OsFs = afero.NewMemMapFs()
afero.WriteFile(command_wipe.OsFs, "config.yml", []byte(testAccSubnetAWSweeperIdsConfig(subnet)), 0644)
os.Args = args

command_wipe.WrappedMain()
return nil
}
}

const testAccSubnetConfig = `
resource "aws_vpc" "foo" {
cidr_block = "10.1.0.0/16"
tags {
Name = "awsweeper-testacc"
}
}
resource "aws_subnet" "foo" {
vpc_id = "${aws_vpc.foo.id}"
cidr_block = "10.1.1.0/24"
tags {
foo = "bar"
Name = "awsweeper-testacc"
}
}
resource "aws_subnet" "bar" {
vpc_id = "${aws_vpc.foo.id}"
cidr_block = "10.1.2.0/24"
tags {
bar = "baz"
Name = "awsweeper-testacc"
}
}
`

const testAccSubnetAWSweeperTagsConfig = `
aws_subnet:
tags:
foo: bar
`

func testAccSubnetAWSweeperIdsConfig(subnet *ec2.Subnet) string {
id := subnet.SubnetId
return fmt.Sprintf(`
aws_subnet:
ids:
- %s
`, *id)
}
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion test.acceptance/vpc_test.go → test/vpc_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package test_acceptance
package test

import (
"fmt"
Expand Down

0 comments on commit 107ad51

Please sign in to comment.