-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcloudwatchlogger_test.go
139 lines (110 loc) · 2.93 KB
/
cloudwatchlogger_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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package cloudwatchlogger
import (
"encoding/json"
"fmt"
"strings"
"testing"
"time"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
)
var (
group = "test_group"
stream = "test_stream"
sess = session.New(nil)
)
func TestLogger(t *testing.T) {
logger, err := NewLogger(sess, group, stream, time.Second)
if err != nil {
t.Error(err)
}
defer func() {
// manually delete group when done
_, err = logger.Service.DeleteLogGroup(&cloudwatchlogs.DeleteLogGroupInput{
LogGroupName: &group,
})
if err != nil {
t.Error(err)
}
}()
var testData = map[string]int64{
"ts": time.Now().UTC().UnixNano(),
"so": 1,
"many": 2,
"interfaces": 3,
}
if err := logger.WriteJSON(testData); err != nil {
t.Error(err)
}
if err := logger.Close(); err != nil {
t.Error(err)
}
// wait for the log entry to become avail
fmt.Println("waiting 5 sec for log entry to propagate")
time.Sleep(5 * time.Second)
resp, err := logger.Service.GetLogEvents(&cloudwatchlogs.GetLogEventsInput{
// // A point in time expressed as the number of milliseconds since Jan 1, 1970
// // 00:00:00 UTC.
// StartTime *int64 `locationName:"startTime" type:"long"`
// // A point in time expressed as the number of milliseconds since Jan 1, 1970
// // 00:00:00 UTC.
// EndTime *int64 `locationName:"endTime" type:"long"`
LogGroupName: &group,
LogStreamName: &stream,
})
if err != nil {
t.Error(err)
}
if len(resp.Events) != 1 {
t.Errorf("Expected 1 event, got %d", len(resp.Events))
}
event := resp.Events[0]
if event.Timestamp == nil {
t.Error("Expected non-nil Timestamp")
}
if event.Message == nil {
t.Error("Expected non-nil Message")
}
var respData map[string]int64
if err := json.NewDecoder(strings.NewReader(*event.Message)).Decode(&respData); err != nil {
t.Error(err)
}
for key, val := range testData {
if v := respData[key]; v != val {
t.Errorf("Expected %v: %v, got %v", key, val, v)
}
}
}
func BenchmarkLoggerWrite(b *testing.B) {
// set flush time at 1m and don't close, just exit test func
// should allow for write only benchmarks, without filling test log
logger, err := NewLogger(sess, group, stream, time.Minute)
if err != nil {
b.Error(err)
}
msg := []byte(fmt.Sprintf("%s: 'this is my log entry'\n", time.Now()))
b.SetBytes(int64(len(msg)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
logger.Write(msg)
}
}
func BenchmarkLoggerWriteJSON(b *testing.B) {
// set flush time at 1m and don't close, just exit test func
// should allow for write only benchmarks, without filling test log
logger, err := NewLogger(sess, group, stream, time.Minute)
if err != nil {
b.Error(err)
}
type TestEntry struct {
Ts time.Time
Entry string
}
msg := &TestEntry{time.Now(), "this is my entry"}
data, _ := json.Marshal(msg)
b.SetBytes(int64(len(data)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
logger.WriteJSON(msg)
}
}