100 lines
2.9 KiB
Go
100 lines
2.9 KiB
Go
package nats
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/nats-io/nats.go"
|
||
|
|
. "github.com/onsi/ginkgo/v2"
|
||
|
|
. "github.com/onsi/gomega"
|
||
|
|
"go.uber.org/zap"
|
||
|
|
"go.uber.org/zap/zaptest"
|
||
|
|
)
|
||
|
|
|
||
|
|
var _ = Describe("ConsumerManager", func() {
|
||
|
|
var (
|
||
|
|
js nats.JetStreamContext
|
||
|
|
streamName string
|
||
|
|
consumerName string
|
||
|
|
subject string
|
||
|
|
logger *zap.Logger
|
||
|
|
consumerMgr *ConsumerManager
|
||
|
|
)
|
||
|
|
|
||
|
|
BeforeEach(func() {
|
||
|
|
// Note: These tests would need a real NATS server for full functionality
|
||
|
|
// For now, we'll test the structure and error handling
|
||
|
|
js = nil // Would be a mock in real tests
|
||
|
|
streamName = "TEST_STREAM"
|
||
|
|
consumerName = "test-consumer"
|
||
|
|
subject = "test.subject"
|
||
|
|
logger = zaptest.NewLogger(GinkgoT())
|
||
|
|
consumerMgr = NewConsumerManager(js, streamName, consumerName, subject, logger)
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("NewConsumerManager", func() {
|
||
|
|
It("creates a consumer manager with correct fields", func() {
|
||
|
|
Expect(consumerMgr.js).To(BeNil())
|
||
|
|
Expect(consumerMgr.streamName).To(Equal(streamName))
|
||
|
|
Expect(consumerMgr.consumerName).To(Equal(consumerName))
|
||
|
|
Expect(consumerMgr.subject).To(Equal(subject))
|
||
|
|
Expect(consumerMgr.logger).To(Equal(logger))
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("CreatePullSubscription", func() {
|
||
|
|
It("returns error when JetStream context is nil", func() {
|
||
|
|
// This will panic because js is nil, so we skip this test for now
|
||
|
|
Skip("Requires mock JetStream context")
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("RecoverResources", func() {
|
||
|
|
It("returns error when JetStream context is nil", func() {
|
||
|
|
streamMgr := NewStreamManager(nil, streamName, []string{subject}, logger)
|
||
|
|
consumerConfig := &nats.ConsumerConfig{Durable: consumerName}
|
||
|
|
err := consumerMgr.RecoverResources(streamMgr, consumerConfig)
|
||
|
|
Expect(err).To(HaveOccurred())
|
||
|
|
Expect(err.Error()).To(ContainSubstring("jetstream context is nil"))
|
||
|
|
})
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
var _ = Describe("StreamManager", func() {
|
||
|
|
var (
|
||
|
|
js nats.JetStreamContext
|
||
|
|
streamName string
|
||
|
|
subjects []string
|
||
|
|
logger *zap.Logger
|
||
|
|
streamMgr *StreamManager
|
||
|
|
)
|
||
|
|
|
||
|
|
BeforeEach(func() {
|
||
|
|
js = nil // Would be a mock in real tests
|
||
|
|
streamName = "TEST_STREAM"
|
||
|
|
subjects = []string{"test.subject"}
|
||
|
|
logger = zaptest.NewLogger(GinkgoT())
|
||
|
|
streamMgr = NewStreamManager(js, streamName, subjects, logger)
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("NewStreamManager", func() {
|
||
|
|
It("creates a stream manager with correct fields", func() {
|
||
|
|
Expect(streamMgr.js).To(BeNil())
|
||
|
|
Expect(streamMgr.streamName).To(Equal(streamName))
|
||
|
|
Expect(streamMgr.subjects).To(Equal(subjects))
|
||
|
|
Expect(streamMgr.logger).To(Equal(logger))
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("EnsureStream", func() {
|
||
|
|
It("returns error when JetStream context is nil", func() {
|
||
|
|
// This will panic because js is nil, so we skip this test for now
|
||
|
|
Skip("Requires mock JetStream context")
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
Describe("validateStreamConfig", func() {
|
||
|
|
It("handles nil stream info gracefully", func() {
|
||
|
|
streamMgr.validateStreamConfig(nil)
|
||
|
|
// Should not panic
|
||
|
|
})
|
||
|
|
})
|
||
|
|
})
|