-
-
Notifications
You must be signed in to change notification settings - Fork 81
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
1,046 additions
and
386 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,50 +1,109 @@ | ||
package test | ||
|
||
import ( | ||
"math/rand" | ||
"strconv" | ||
"testing" | ||
"time" | ||
|
||
"github.com/gruntwork-io/terratest/modules/logger" | ||
"github.com/gruntwork-io/terratest/modules/random" | ||
"github.com/gruntwork-io/terratest/modules/terraform" | ||
testStructure "github.com/gruntwork-io/terratest/modules/test-structure" | ||
"github.com/stretchr/testify/assert" | ||
"os" | ||
"regexp" | ||
"strings" | ||
"testing" | ||
) | ||
|
||
func cleanup(t *testing.T, terraformOptions *terraform.Options, tempTestFolder string) { | ||
terraform.Destroy(t, terraformOptions) | ||
os.RemoveAll(tempTestFolder) | ||
} | ||
|
||
// Test the Terraform module in examples/complete using Terratest. | ||
func TestExamplesComplete(t *testing.T) { | ||
t.Parallel() | ||
randID := strings.ToLower(random.UniqueId()) | ||
attributes := []string{randID} | ||
|
||
rand.Seed(time.Now().UnixNano()) | ||
rootFolder := "../../" | ||
terraformFolderRelativeToRoot := "examples/complete" | ||
varFiles := []string{"fixtures.us-east-2.tfvars"} | ||
|
||
randId := strconv.Itoa(rand.Intn(100000)) | ||
attributes := []string{randId} | ||
tempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot) | ||
|
||
terraformOptions := &terraform.Options{ | ||
// The path to where our Terraform code is located | ||
TerraformDir: "../../examples/complete", | ||
TerraformDir: tempTestFolder, | ||
Upgrade: true, | ||
// Variables to pass to our Terraform code using -var-file options | ||
VarFiles: []string{"fixtures.us-east-2.tfvars"}, | ||
VarFiles: varFiles, | ||
Vars: map[string]interface{}{ | ||
"attributes": attributes, | ||
}, | ||
} | ||
// Keep the output quiet | ||
if !testing.Verbose() { | ||
terraformOptions.Logger = logger.Discard | ||
} | ||
|
||
// At the end of the test, run `terraform destroy` to clean up any resources that were created | ||
defer terraform.Destroy(t, terraformOptions) | ||
defer cleanup(t, terraformOptions, tempTestFolder) | ||
|
||
// This will run `terraform init` and `terraform apply` and fail the test if there are any errors | ||
terraform.InitAndApply(t, terraformOptions) | ||
|
||
// Run `terraform output` to get the value of an output variable | ||
cloudtrailBucketId := terraform.Output(t, terraformOptions, "cloudtrail_bucket_id") | ||
expectedCloudtrailBucketId := "eg-test-cloudtrail-test-" + randId | ||
expectedCloudtrailBucketId := "eg-test-cloudtrail-test-" + randID | ||
// Verify we're getting back the outputs we expect | ||
assert.Equal(t, expectedCloudtrailBucketId, cloudtrailBucketId) | ||
|
||
// Run `terraform output` to get the value of an output variable | ||
cloudtrailId := terraform.Output(t, terraformOptions, "cloudtrail_id") | ||
expectedCloudtrailId := "eg-test-cloudtrail-test-" + randId | ||
// Verify we're getting back the outputs we expect | ||
assert.Equal(t, expectedCloudtrailId, cloudtrailId) | ||
expectedCloudtrailId := "eg-test-cloudtrail-test-" + randID | ||
// With AWS Provider v4 and earlier, ID was trail name, | ||
// but with v5 (and presumably later), ID is full ARN. | ||
// Allow the module to follow the provider's behavior. | ||
if !strings.HasSuffix(cloudtrailId, expectedCloudtrailId) { | ||
t.Errorf("Output %s does not end with %s", cloudtrailId, expectedCloudtrailId) | ||
} | ||
} | ||
|
||
func TestExamplesCompleteDisabled(t *testing.T) { | ||
t.Parallel() | ||
randID := strings.ToLower(random.UniqueId()) | ||
attributes := []string{randID} | ||
|
||
rootFolder := "../../" | ||
terraformFolderRelativeToRoot := "examples/complete" | ||
varFiles := []string{"fixtures.us-east-2.tfvars"} | ||
|
||
tempTestFolder := testStructure.CopyTerraformFolderToTemp(t, rootFolder, terraformFolderRelativeToRoot) | ||
|
||
terraformOptions := &terraform.Options{ | ||
// The path to where our Terraform code is located | ||
TerraformDir: tempTestFolder, | ||
Upgrade: true, | ||
// Variables to pass to our Terraform code using -var-file options | ||
VarFiles: varFiles, | ||
Vars: map[string]interface{}{ | ||
"attributes": attributes, | ||
"enabled": "false", | ||
}, | ||
} | ||
|
||
// At the end of the test, run `terraform destroy` to clean up any resources that were created | ||
defer cleanup(t, terraformOptions, tempTestFolder) | ||
|
||
// Keep the output quiet | ||
if !testing.Verbose() { | ||
terraformOptions.Logger = logger.Discard | ||
} | ||
|
||
// This will run `terraform init` and `terraform apply` and fail the test if there are any errors | ||
results := terraform.InitAndApply(t, terraformOptions) | ||
|
||
// Should complete successfully without creating or changing any resources. | ||
// Extract the "Resources:" section of the output to make the error message more readable. | ||
re := regexp.MustCompile(`Resources: [^.]+\.`) | ||
match := re.FindString(results) | ||
assert.Equal(t, "Resources: 0 added, 0 changed, 0 destroyed.", match, "Re-applying the same configuration should not change any resources") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,97 @@ | ||
module github.com/cloudposse/terraform-aws-cloudtrail | ||
|
||
go 1.14 | ||
go 1.21 | ||
|
||
require ( | ||
github.com/gruntwork-io/terratest v0.31.4 | ||
github.com/stretchr/testify v1.6.1 | ||
github.com/gruntwork-io/terratest v0.46.13 | ||
github.com/stretchr/testify v1.9.0 | ||
) | ||
|
||
require ( | ||
cloud.google.com/go v0.110.0 // indirect | ||
cloud.google.com/go/compute v1.19.1 // indirect | ||
cloud.google.com/go/compute/metadata v0.2.3 // indirect | ||
cloud.google.com/go/iam v0.13.0 // indirect | ||
cloud.google.com/go/storage v1.28.1 // indirect | ||
github.com/agext/levenshtein v1.2.3 // indirect | ||
github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect | ||
github.com/aws/aws-sdk-go v1.44.122 // indirect | ||
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect | ||
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect | ||
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect | ||
github.com/davecgh/go-spew v1.1.1 // indirect | ||
github.com/emicklei/go-restful/v3 v3.9.0 // indirect | ||
github.com/go-errors/errors v1.0.2-0.20180813162953-d98b870cc4e0 // indirect | ||
github.com/go-logr/logr v1.2.4 // indirect | ||
github.com/go-openapi/jsonpointer v0.19.6 // indirect | ||
github.com/go-openapi/jsonreference v0.20.2 // indirect | ||
github.com/go-openapi/swag v0.22.3 // indirect | ||
github.com/go-sql-driver/mysql v1.4.1 // indirect | ||
github.com/gogo/protobuf v1.3.2 // indirect | ||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||
github.com/golang/protobuf v1.5.3 // indirect | ||
github.com/google/gnostic-models v0.6.8 // indirect | ||
github.com/google/go-cmp v0.5.9 // indirect | ||
github.com/google/gofuzz v1.2.0 // indirect | ||
github.com/google/uuid v1.3.0 // indirect | ||
github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect | ||
github.com/googleapis/gax-go/v2 v2.7.1 // indirect | ||
github.com/gruntwork-io/go-commons v0.8.0 // indirect | ||
github.com/hashicorp/errwrap v1.0.0 // indirect | ||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | ||
github.com/hashicorp/go-getter v1.7.1 // indirect | ||
github.com/hashicorp/go-multierror v1.1.0 // indirect | ||
github.com/hashicorp/go-safetemp v1.0.0 // indirect | ||
github.com/hashicorp/go-version v1.6.0 // indirect | ||
github.com/hashicorp/hcl/v2 v2.9.1 // indirect | ||
github.com/hashicorp/terraform-json v0.13.0 // indirect | ||
github.com/imdario/mergo v0.3.11 // indirect | ||
github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a // indirect | ||
github.com/jmespath/go-jmespath v0.4.0 // indirect | ||
github.com/josharian/intern v1.0.0 // indirect | ||
github.com/json-iterator/go v1.1.12 // indirect | ||
github.com/klauspost/compress v1.15.11 // indirect | ||
github.com/mailru/easyjson v0.7.7 // indirect | ||
github.com/mattn/go-zglob v0.0.2-0.20190814121620-e3c945676326 // indirect | ||
github.com/mitchellh/go-homedir v1.1.0 // indirect | ||
github.com/mitchellh/go-testing-interface v1.14.1 // indirect | ||
github.com/mitchellh/go-wordwrap v1.0.1 // indirect | ||
github.com/moby/spdystream v0.2.0 // indirect | ||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||
github.com/modern-go/reflect2 v1.0.2 // indirect | ||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect | ||
github.com/pmezard/go-difflib v1.0.0 // indirect | ||
github.com/pquerna/otp v1.2.0 // indirect | ||
github.com/russross/blackfriday/v2 v2.1.0 // indirect | ||
github.com/spf13/pflag v1.0.5 // indirect | ||
github.com/tmccombs/hcl2json v0.3.3 // indirect | ||
github.com/ulikunitz/xz v0.5.10 // indirect | ||
github.com/urfave/cli v1.22.2 // indirect | ||
github.com/zclconf/go-cty v1.9.1 // indirect | ||
go.opencensus.io v0.24.0 // indirect | ||
golang.org/x/crypto v0.17.0 // indirect | ||
golang.org/x/net v0.17.0 // indirect | ||
golang.org/x/oauth2 v0.8.0 // indirect | ||
golang.org/x/sys v0.15.0 // indirect | ||
golang.org/x/term v0.15.0 // indirect | ||
golang.org/x/text v0.14.0 // indirect | ||
golang.org/x/time v0.3.0 // indirect | ||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect | ||
google.golang.org/api v0.114.0 // indirect | ||
google.golang.org/appengine v1.6.7 // indirect | ||
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect | ||
google.golang.org/grpc v1.56.3 // indirect | ||
google.golang.org/protobuf v1.33.0 // indirect | ||
gopkg.in/inf.v0 v0.9.1 // indirect | ||
gopkg.in/yaml.v2 v2.4.0 // indirect | ||
gopkg.in/yaml.v3 v3.0.1 // indirect | ||
k8s.io/api v0.28.4 // indirect | ||
k8s.io/apimachinery v0.28.4 // indirect | ||
k8s.io/client-go v0.28.4 // indirect | ||
k8s.io/klog/v2 v2.100.1 // indirect | ||
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect | ||
k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect | ||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect | ||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect | ||
sigs.k8s.io/yaml v1.3.0 // indirect | ||
) |
Oops, something went wrong.