9 "github.com/stretchr/testify/assert"
12 type ChanTask chan *Update
14 func (e ChanTask) Updates() <-chan *Update { return e }
16 func (e ChanTask) Throttled() bool { return true }
18 type UnthrottledChanTask chan *Update
20 func (e UnthrottledChanTask) Updates() <-chan *Update { return e }
22 func (e UnthrottledChanTask) Throttled() bool { return false }
24 func TestLoggerLogsTasks(t *testing.T) {
27 task := make(chan *Update)
29 task <- &Update{"first", time.Now(), false}
30 task <- &Update{"second", time.Now(), false}
36 l.widthFn = func() int { return 0 }
37 l.Enqueue(ChanTask(task))
40 assert.Equal(t, "first\rsecond\rsecond, done\n", buf.String())
43 func TestLoggerLogsMultipleTasksInOrder(t *testing.T) {
46 t1 := make(chan *Update)
48 t1 <- &Update{"first", time.Now(), false}
49 t1 <- &Update{"second", time.Now(), false}
52 t2 := make(chan *Update)
54 t2 <- &Update{"third", time.Now(), false}
55 t2 <- &Update{"fourth", time.Now(), false}
61 l.widthFn = func() int { return 0 }
62 l.Enqueue(ChanTask(t1), ChanTask(t2))
65 assert.Equal(t, strings.Join([]string{
75 func TestLoggerLogsMultipleTasksWithoutBlocking(t *testing.T) {
80 t1, t2 := make(chan *Update), make(chan *Update)
82 l.widthFn = func() int { return 0 }
83 l.Enqueue(ChanTask(t1))
85 t1 <- &Update{"first", time.Now(), false}
86 l.Enqueue(ChanTask(t2))
88 t2 <- &Update{"second", time.Now(), false}
93 assert.Equal(t, strings.Join([]string{
101 func TestLoggerThrottlesWrites(t *testing.T) {
104 t1 := make(chan *Update)
108 t1 <- &Update{"first", start, false} // t = 0 ms, throttle was open
109 t1 <- &Update{"forced", start.Add(10 * time.Millisecond), true} // t = 10+ε ms, throttle is closed
110 t1 <- &Update{"second", start.Add(10 * time.Millisecond), false} // t = 10+ε ms, throttle is closed
111 t1 <- &Update{"third", start.Add(26 * time.Millisecond), false} // t = 20+ε ms, throttle was open
112 close(t1) // t = 20+2ε ms, throttle is closed
116 l.widthFn = func() int { return 0 }
117 l.throttle = 15 * time.Millisecond
119 l.Enqueue(ChanTask(t1))
122 assert.Equal(t, strings.Join([]string{
127 }, ""), buf.String())
130 func TestLoggerThrottlesLastWrite(t *testing.T) {
133 t1 := make(chan *Update)
137 t1 <- &Update{"first", start, false} // t = 0 ms, throttle was open
138 t1 <- &Update{"second", start.Add(10 * time.Millisecond), false} // t = 10+ε ms, throttle is closed
139 close(t1) // t = 10+2ε ms, throttle is closed
143 l.widthFn = func() int { return 0 }
144 l.throttle = 15 * time.Millisecond
146 l.Enqueue(ChanTask(t1))
149 assert.Equal(t, strings.Join([]string{
152 }, ""), buf.String())
155 func TestLoggerLogsAllDurableUpdates(t *testing.T) {
159 l.widthFn = func() int { return 0 }
160 l.throttle = 15 * time.Minute
162 t1 := make(chan *Update)
164 t1 <- &Update{"first", time.Now(), false} // t = 0+ε ms, throttle is open
165 t1 <- &Update{"second", time.Now(), false} // t = 0+2ε ms, throttle is closed
166 close(t1) // t = 0+3ε ms, throttle is closed
169 l.Enqueue(UnthrottledChanTask(t1))
172 assert.Equal(t, strings.Join([]string{
176 }, ""), buf.String())
179 func TestLoggerHandlesSilentTasks(t *testing.T) {
182 task := make(chan *Update)
186 l.Enqueue(ChanTask(task))
189 assert.Equal(t, "", buf.String())