navidrome/server/events/diode_test.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

52 lines
1.2 KiB
Go
Raw Normal View History

2021-02-04 21:42:08 +01:00
package events
import (
"context"
"code.cloudfoundry.org/go-diodes"
2022-07-26 22:47:16 +02:00
. "github.com/onsi/ginkgo/v2"
2021-02-04 21:42:08 +01:00
. "github.com/onsi/gomega"
)
var _ = Describe("diode", func() {
var diode *diode
var ctx context.Context
var ctxCancel context.CancelFunc
var missed int
BeforeEach(func() {
missed = 0
ctx, ctxCancel = context.WithCancel(context.Background())
diode = newDiode(ctx, 2, diodes.AlertFunc(func(m int) { missed = m }))
})
It("enqueues the data correctly", func() {
diode.put(message{data: "1"})
diode.put(message{data: "2"})
Expect(diode.next()).To(Equal(&message{data: "1"}))
Expect(diode.next()).To(Equal(&message{data: "2"}))
2021-02-04 21:42:08 +01:00
Expect(missed).To(BeZero())
})
It("drops messages when diode is full", func() {
diode.put(message{data: "1"})
diode.put(message{data: "2"})
diode.put(message{data: "3"})
2021-02-04 21:42:08 +01:00
next, ok := diode.tryNext()
Expect(ok).To(BeTrue())
Expect(next).To(Equal(&message{data: "3"}))
2021-02-04 21:42:08 +01:00
_, ok = diode.tryNext()
Expect(ok).To(BeFalse())
Expect(missed).To(Equal(2))
})
It("returns nil when diode is empty and the context is canceled", func() {
diode.put(message{data: "1"})
2021-02-04 21:42:08 +01:00
ctxCancel()
Expect(diode.next()).To(Equal(&message{data: "1"}))
2021-02-04 21:42:08 +01:00
Expect(diode.next()).To(BeNil())
})
})