File: log_cache_test.go

package info (click to toggle)
docker.io 20.10.24%2Bdfsg1-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bookworm-proposed-updates
  • size: 60,824 kB
  • sloc: sh: 5,621; makefile: 593; ansic: 179; python: 162; asm: 7
file content (81 lines) | stat: -rw-r--r-- 1,500 bytes parent folder | download | duplicates (6)
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
package cache

import (
	"context"
	"testing"

	"time"

	"bytes"

	"github.com/docker/docker/daemon/logger"
	"gotest.tools/v3/assert"
	"gotest.tools/v3/assert/cmp"
)

type fakeLogger struct {
	messages chan logger.Message
	close    chan struct{}
}

func (l *fakeLogger) Log(msg *logger.Message) error {
	select {
	case l.messages <- *msg:
	case <-l.close:
	}
	logger.PutMessage(msg)
	return nil
}

func (l *fakeLogger) Name() string {
	return "fake"
}

func (l *fakeLogger) Close() error {
	close(l.close)
	return nil
}

func TestLog(t *testing.T) {
	cacher := &fakeLogger{make(chan logger.Message), make(chan struct{})}
	l := &loggerWithCache{
		l:     &fakeLogger{make(chan logger.Message, 100), make(chan struct{})},
		cache: cacher,
	}
	defer l.Close()

	var messages []logger.Message
	for i := 0; i < 100; i++ {
		messages = append(messages, logger.Message{
			Timestamp: time.Now(),
			Line:      append(bytes.Repeat([]byte("a"), 100), '\n'),
		})
	}

	ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
	defer cancel()

	go func() {
		for _, msg := range messages {
			select {
			case <-ctx.Done():
				return
			default:
			}

			m := logger.NewMessage()
			dumbCopyMessage(m, &msg)
			l.Log(m)
		}
	}()

	for _, m := range messages {
		var msg logger.Message
		select {
		case <-ctx.Done():
			t.Fatal("timed out waiting for messages... this is probably a test implementation error")
		case msg = <-cacher.messages:
			assert.Assert(t, cmp.DeepEqual(msg, m))
		}
	}
}