package aws import ( "fmt" "reflect" "testing" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/cloudtrail" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" ) func TestDiffCloudtrailTags(t *testing.T) { cases := []struct { Old, New map[string]interface{} Create, Remove map[string]string }{ // Basic add/remove { Old: map[string]interface{}{ "foo": "bar", }, New: map[string]interface{}{ "bar": "baz", }, Create: map[string]string{ "bar": "baz", }, Remove: map[string]string{ "foo": "bar", }, }, // Modify { Old: map[string]interface{}{ "foo": "bar", }, New: map[string]interface{}{ "foo": "baz", }, Create: map[string]string{ "foo": "baz", }, Remove: map[string]string{ "foo": "bar", }, }, } for i, tc := range cases { c, r := diffTagsCloudtrail(tagsFromMapCloudtrail(tc.Old), tagsFromMapCloudtrail(tc.New)) cm := tagsToMapCloudtrail(c) rm := tagsToMapCloudtrail(r) if !reflect.DeepEqual(cm, tc.Create) { t.Fatalf("%d: bad create: %#v", i, cm) } if !reflect.DeepEqual(rm, tc.Remove) { t.Fatalf("%d: bad remove: %#v", i, rm) } } } func TestIgnoringTagsCloudtrail(t *testing.T) { var ignoredTags []*cloudtrail.Tag ignoredTags = append(ignoredTags, &cloudtrail.Tag{ Key: aws.String("aws:cloudformation:logical-id"), Value: aws.String("foo"), }) ignoredTags = append(ignoredTags, &cloudtrail.Tag{ Key: aws.String("aws:foo:bar"), Value: aws.String("baz"), }) for _, tag := range ignoredTags { if !tagIgnoredCloudtrail(tag) { t.Fatalf("Tag %v with value %v not ignored, but should be!", *tag.Key, *tag.Value) } } } // testAccCheckCloudTrailCheckTags can be used to check the tags on a trail func testAccCheckCloudTrailCheckTags(tags *[]*cloudtrail.Tag, expectedTags map[string]string) resource.TestCheckFunc { return func(s *terraform.State) error { if !reflect.DeepEqual(expectedTags, tagsToMapCloudtrail(*tags)) { return fmt.Errorf("Tags mismatch.\nExpected: %#v\nGiven: %#v", expectedTags, tagsToMapCloudtrail(*tags)) } return nil } }