Skip to content

Commit bf21a42

Browse files
author
sourabh
committed
adding more test cases
1 parent 782844d commit bf21a42

File tree

2 files changed

+196
-0
lines changed

2 files changed

+196
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
{
2+
"random_string": {
3+
"lower": true
4+
},
5+
"aws_sqs_queue": {
6+
"name": "SumoCWDeadLetterQueue-{RandomString}"
7+
},
8+
"aws_cloudwatch_log_group": {
9+
"name": "SumoCWLogGroup-{RandomString}",
10+
"retention_in_days": 7
11+
},
12+
"aws_cloudwatch_metric_alarm": {
13+
"actions_enabled": true,
14+
"alarm_actions": [
15+
"arn:aws:sns:{Region}:{AccountId}:SumoCWEmailSNSTopic-{RandomString}"
16+
],
17+
"alarm_description": "Notify via email if number of messages in DeadLetterQueue exceeds threshold",
18+
"alarm_name": "SumoCWSpilloverAlarm-{RandomString}",
19+
"comparison_operator": "GreaterThanThreshold",
20+
"dimensions": {
21+
"QueueName": "SumoCWDeadLetterQueue-{RandomString}"
22+
},
23+
"evaluation_periods": 1,
24+
"metric_name": "ApproximateNumberOfMessagesVisible",
25+
"namespace": "AWS/SQS",
26+
"period": 3600,
27+
"statistic": "Sum",
28+
"threshold": 100000
29+
},
30+
"aws_cw_lambda_function": {
31+
"dead_letter_config": [
32+
{
33+
"target_arn": "arn:aws:sqs:{Region}:{AccountId}:SumoCWDeadLetterQueue-{RandomString}"
34+
}
35+
],
36+
"environment": [
37+
{
38+
"variables": {
39+
"INCLUDE_LOG_INFO": "true",
40+
"LOG_FORMAT": "Others",
41+
"LOG_STREAM_PREFIX": "",
42+
"SUMO_ENDPOINT": "{URL}"
43+
}
44+
}
45+
],
46+
"function_name": "SumoCWLogsLambda-{RandomString}",
47+
"handler": "cloudwatchlogs_lambda.handler",
48+
"s3_bucket": "appdevzipfiles-{Region}",
49+
"s3_key": "cloudwatchlogs-with-dlq.zip"
50+
},
51+
"aws_iam_role": [
52+
{
53+
"name": "SumoCWLambdaExecutionRole-{RandomString}",
54+
"assume_role_policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
55+
}
56+
],
57+
"aws_serverlessapplicationrepository_cloudformation_stack": [
58+
{
59+
"auto_enable_logs_subscription": {
60+
"name": "Auto-Enable-Logs-Subscription-{RandomString}",
61+
"application_id": "arn:aws:serverlessrepo:us-east-1:956882708938:applications/sumologic-loggroup-connector",
62+
"capabilities": [
63+
"CAPABILITY_IAM",
64+
"CAPABILITY_RESOURCE_POLICY"
65+
],
66+
"parameters": {
67+
"DestinationArnValue": "arn:aws:lambda:{Region}:{AccountId}:function:SumoCWLogsLambda-{RandomString}",
68+
"LogGroupPattern": "lambda",
69+
"UseExistingLogs": "true"
70+
},
71+
"semantic_version": "1.0.5"
72+
}
73+
}
74+
],
75+
"aws_sns_topic": {
76+
"name": "SumoCWEmailSNSTopic-{RandomString}",
77+
"policy": "{\"Version\":\"2008-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"],\"Resource\":\"arn:aws:sns:{Region}:{AccountId}:SumoCWEmailSNSTopic-{RandomString}\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"{AccountId}\"}}}]}"
78+
},
79+
"sumologic_collector": {},
80+
"sumologic_source": {
81+
"category": "Labs/cloudwatch/logs",
82+
"content_type": "",
83+
"description": "This is an description.",
84+
"name": "Cloudwatch source",
85+
"fields": {
86+
"account": "MyValue"
87+
}
88+
}
89+
}

terratest/aws/cloudwatchlogsforwarder/cloudwatchlogsforwarder_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,110 @@ func TestWithDefaultValues(t *testing.T) {
6969
// Assert if the logs are sent to Sumo Logic.
7070
assertResource.CheckLogsForPastSixtyMinutes("_sourceid="+outputs["sumologic_source"].(map[string]interface{})["id"].(string), 5, 2*time.Minute)
7171
}
72+
73+
func TestWithExistingValues(t *testing.T) {
74+
t.Parallel()
75+
aws_region := "us-east-2"
76+
vars := map[string]interface{}{
77+
"create_collector": false,
78+
"source_details": map[string]interface{}{
79+
"source_name": "Cloudwatch source",
80+
"source_category": "Labs/cloudwatch/logs",
81+
"description": "This is an description.",
82+
"collector_id": COLLECTOR_ID,
83+
"fields": map[string]interface{}{
84+
"account": "MyValue",
85+
},
86+
},
87+
"auto_enable_logs_subscription": "Existing",
88+
}
89+
90+
options, count := SetUpTest(t, vars, aws_region)
91+
92+
// Assert count of Expected resources.
93+
test_structure.RunTestStage(t, "AssertCount", func() {
94+
common.AssertResourceCounts(t, count, 22, 0, 0)
95+
})
96+
97+
assertResource := common.GetAssertResource(t, options.EnvVars)
98+
outputs := common.FetchAllOutputs(t, options)
99+
replacementMap := map[string]interface{}{
100+
"AccountId": aws.GetAccountId(t),
101+
"Region": aws_region,
102+
"SumoAccountId": common.SumoAccountId,
103+
"Deployment": common.SumologicEnvironment,
104+
"OrgId": common.SumologicOrganizationId,
105+
"RandomString": outputs["random_string"].(map[string]interface{})["id"].(string),
106+
"URL": outputs["sumologic_source"].(map[string]interface{})["url"].(string),
107+
}
108+
// Assert if the outputs are actually created in AWS and Sumo Logic.
109+
// This also checks if your expectation are matched with the outputs, so provide an JSON with expected outputs.
110+
expectedOutputs := common.ReadJsonFile("TestWithExistingValues.json", replacementMap)
111+
test_structure.RunTestStage(t, "AssertOutputs", func() {
112+
common.AssertOutputsWithLookup(t, options, expectedOutputs, LOOK_UP_MAP)
113+
})
114+
115+
// Assert if the logs are sent to Sumo Logic.
116+
assertResource.CheckLogsForPastSixtyMinutes("_sourceid="+outputs["sumologic_source"].(map[string]interface{})["id"].(string), 5, 2*time.Minute)
117+
}
118+
119+
func TestUpdates(t *testing.T) {
120+
t.Parallel()
121+
aws_region := "us-west-2"
122+
vars := map[string]interface{}{
123+
"create_collector": true,
124+
"collector_details": map[string]interface{}{
125+
"collector_name": "Test Updates",
126+
"description": "This collector is created for testing elb terraform module.",
127+
"fields": map[string]interface{}{
128+
"MyCollector": "TestTerraform",
129+
},
130+
},
131+
"auto_enable_logs_subscription": "Existing",
132+
}
133+
134+
options, count := SetUpTest(t, vars, aws_region)
135+
136+
// Assert count of Expected resources.
137+
test_structure.RunTestStage(t, "AssertCount", func() {
138+
common.AssertResourceCounts(t, count, 23, 0, 0)
139+
})
140+
141+
vars = map[string]interface{}{
142+
"create_collector": true,
143+
"collector_details": map[string]interface{}{
144+
"collector_name": "Test Updates Again",
145+
"description": "This collector is created for testing elb terraform module.",
146+
"fields": map[string]interface{}{
147+
"MyCollector": "TestTerraform",
148+
},
149+
},
150+
"auto_enable_logs_subscription": "None",
151+
}
152+
153+
count = UpdateTerraform(t, vars, options)
154+
155+
test_structure.RunTestStage(t, "UpdateFirst", func() {
156+
common.AssertResourceCounts(t, count, 0, 1, 1)
157+
})
158+
159+
vars = map[string]interface{}{
160+
"create_collector": false,
161+
"auto_enable_logs_subscription": "None",
162+
"source_details": map[string]interface{}{
163+
"source_name": "Test Source For Logs Two",
164+
"source_category": "My/Test/cvategory",
165+
"collector_id": COLLECTOR_ID,
166+
"description": "This is jsyd",
167+
"fields": map[string]string{
168+
"TestCollector": "MyValue",
169+
},
170+
},
171+
}
172+
173+
count = UpdateTerraform(t, vars, options)
174+
175+
test_structure.RunTestStage(t, "UpdateFirst", func() {
176+
common.AssertResourceCounts(t, count, 1, 2, 2)
177+
})
178+
}

0 commit comments

Comments
 (0)