mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
awslogs: Add unit test to ensure log line order
Signed-off-by: Samuel Karp <skarp@amazon.com>
This commit is contained in:
parent
4a94a6513b
commit
5ba6cab0a9
1 changed files with 59 additions and 0 deletions
|
@ -4,6 +4,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -625,3 +626,61 @@ func TestCollectBatchMaxTotalBytes(t *testing.T) {
|
|||
t.Errorf("Expected message to be %s but was %s", "B", message[len(message)-1:])
|
||||
}
|
||||
}
|
||||
|
||||
func TestCollectBatchWithDuplicateTimestamps(t *testing.T) {
|
||||
mockClient := newMockClient()
|
||||
stream := &logStream{
|
||||
client: mockClient,
|
||||
logGroupName: groupName,
|
||||
logStreamName: streamName,
|
||||
sequenceToken: aws.String(sequenceToken),
|
||||
messages: make(chan *logger.Message),
|
||||
}
|
||||
mockClient.putLogEventsResult <- &putLogEventsResult{
|
||||
successResult: &cloudwatchlogs.PutLogEventsOutput{
|
||||
NextSequenceToken: aws.String(nextSequenceToken),
|
||||
},
|
||||
}
|
||||
ticks := make(chan time.Time)
|
||||
newTicker = func(_ time.Duration) *time.Ticker {
|
||||
return &time.Ticker{
|
||||
C: ticks,
|
||||
}
|
||||
}
|
||||
|
||||
go stream.collectBatch()
|
||||
|
||||
times := maximumLogEventsPerPut
|
||||
expectedEvents := []*cloudwatchlogs.InputLogEvent{}
|
||||
timestamp := time.Now()
|
||||
for i := 0; i < times; i++ {
|
||||
line := fmt.Sprintf("%d", i)
|
||||
if i%2 == 0 {
|
||||
timestamp.Add(1 * time.Nanosecond)
|
||||
}
|
||||
stream.Log(&logger.Message{
|
||||
Line: []byte(line),
|
||||
Timestamp: timestamp,
|
||||
})
|
||||
expectedEvents = append(expectedEvents, &cloudwatchlogs.InputLogEvent{
|
||||
Message: aws.String(line),
|
||||
Timestamp: aws.Int64(timestamp.UnixNano() / int64(time.Millisecond)),
|
||||
})
|
||||
}
|
||||
|
||||
ticks <- time.Time{}
|
||||
stream.Close()
|
||||
|
||||
argument := <-mockClient.putLogEventsArgument
|
||||
if argument == nil {
|
||||
t.Fatal("Expected non-nil PutLogEventsInput")
|
||||
}
|
||||
if len(argument.LogEvents) != times {
|
||||
t.Errorf("Expected LogEvents to contain %d elements, but contains %d", times, len(argument.LogEvents))
|
||||
}
|
||||
for i := 0; i < times; i++ {
|
||||
if !reflect.DeepEqual(*argument.LogEvents[i], *expectedEvents[i]) {
|
||||
t.Errorf("Expected event to be %v but was %v", *expectedEvents[i], *argument.LogEvents[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue