-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain_test.go
120 lines (98 loc) · 3.61 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package main_test
import (
"encoding/json"
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
"github.com/aws/aws-sdk-go/service/cloudwatchlogs/cloudwatchlogsiface"
"github.com/aws/aws-sdk-go/service/dynamodb/expression"
"github.com/flow-lab/dlog"
"github.com/flow-lab/log-group-subscriber"
"github.com/stretchr/testify/assert"
"io/ioutil"
"testing"
)
const requestId = "1-581cf771-a006649127e371903a2de979"
func TestProcessEvent(t *testing.T) {
cwl := &mockCloudWatchLogsClient{}
functionArn := "arn:aws:lambda:eu-west-1:111111111111:function:DatadogLogs"
result, err := main.ProcessEvent(functionArn, cwl, dlog.NewRequestLogger(requestId, "test"))
assert.Nil(t, err)
assert.Len(t, result, 2)
}
func TestGetLogGroups(t *testing.T) {
cwl := &mockCloudWatchLogsClient{}
logGroups, err := main.GetLogGroups(cwl)
check(t, err)
assert.NotNil(t, logGroups)
assert.Equal(t, 3, len(logGroups))
}
func TestDescribeSubscriptionFilters(t *testing.T) {
cwl := &mockCloudWatchLogsClient{}
filterNamePrefix := "test"
subscriptionFilters, err := main.DescribeSubscriptionFilters(&filterNamePrefix, cwl)
check(t, err)
assert.Equal(t, 1, len(subscriptionFilters.SubscriptionFilters))
}
func TestPutSubscriptionFilter(t *testing.T) {
cwl := &mockCloudWatchLogsClient{}
var logGroups []main.LogGroup
test := "test"
logGroup := main.LogGroup{
LogGroupName: &test,
FunctionArn: &test,
}
logGroups = append(logGroups, logGroup)
result, err := main.PutSubscriptionFilter(logGroups, cwl, dlog.NewRequestLogger(requestId, "test"))
assert.Nil(t, err)
assert.Len(t, result, 1)
}
func check(t *testing.T, err error) {
if err != nil {
t.Errorf("could not open test file. details: %v", err)
panic(err)
}
}
// Define a mock struct to be used in your unit tests of myFunc.
type mockCloudWatchLogsClient struct {
cloudwatchlogsiface.CloudWatchLogsAPI
}
func (m *mockCloudWatchLogsClient) DescribeLogGroups(input *cloudwatchlogs.DescribeLogGroupsInput) (*cloudwatchlogs.DescribeLogGroupsOutput, error) {
var inputJson = readFile("testdata/describeLogGroups-output.json")
var describeLogGroupsOutput cloudwatchlogs.DescribeLogGroupsOutput
err := json.Unmarshal(inputJson, &describeLogGroupsOutput)
if err != nil {
panic(err)
}
return &describeLogGroupsOutput, nil
}
func (m *mockCloudWatchLogsClient) DescribeLogGroupsPages(input *cloudwatchlogs.DescribeLogGroupsInput, f func(*cloudwatchlogs.DescribeLogGroupsOutput, bool) bool) error {
var inputJson = readFile("testdata/describeLogGroups-output.json")
var describeLogGroupsOutput cloudwatchlogs.DescribeLogGroupsOutput
err := json.Unmarshal(inputJson, &describeLogGroupsOutput)
if err != nil {
panic(err)
}
f(&describeLogGroupsOutput, true)
return nil
}
func (m *mockCloudWatchLogsClient) DescribeSubscriptionFilters(*cloudwatchlogs.DescribeSubscriptionFiltersInput) (*cloudwatchlogs.DescribeSubscriptionFiltersOutput, error) {
var inputJson = readFile("testdata/describeSubscriptionFilters-output.json")
var describeSubscriptionFiltersOutput cloudwatchlogs.DescribeSubscriptionFiltersOutput
err := json.Unmarshal(inputJson, &describeSubscriptionFiltersOutput)
if err != nil {
panic(err)
}
return &describeSubscriptionFiltersOutput, nil
}
func (m *mockCloudWatchLogsClient) PutSubscriptionFilter(input *cloudwatchlogs.PutSubscriptionFilterInput) (*cloudwatchlogs.PutSubscriptionFilterOutput, error) {
if *input.LogGroupName == "/aws/lambda/DatadogLogs" {
return nil, expression.InvalidParameterError{}
}
return &cloudwatchlogs.PutSubscriptionFilterOutput{}, nil
}
func readFile(path string) []byte {
f, err := ioutil.ReadFile(path)
if err != nil {
panic(err)
}
return f
}