115 lines
3.2 KiB
Go
115 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"time"
|
|
|
|
appconfig "caatsm/internal/infra/config"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
var _ = Describe("CLI overrides", func() {
|
|
var (
|
|
cfg *appconfig.Config
|
|
flagSet *flag.FlagSet
|
|
args []string
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
cfg = &appconfig.Config{
|
|
NATS: appconfig.NATSConfig{
|
|
URL: "nats://base:4222",
|
|
Stream: "BASE_STREAM",
|
|
Consumer: "base-consumer",
|
|
},
|
|
Subscription: appconfig.SubscriptionConfig{
|
|
Topic: "base.subject",
|
|
},
|
|
Publisher: appconfig.PublisherConfig{
|
|
Topic: "base.publisher",
|
|
},
|
|
Postgres: appconfig.PostgresConfig{
|
|
URL: "postgres://base",
|
|
},
|
|
Log: appconfig.LogConfig{
|
|
Level: "info",
|
|
},
|
|
Telemetry: appconfig.TelemetryConfig{
|
|
Enabled: false,
|
|
Endpoint: "",
|
|
Insecure: false,
|
|
},
|
|
}
|
|
|
|
flagSet = flag.NewFlagSet("test", flag.ContinueOnError)
|
|
flagSet.String("nats-url", "", "")
|
|
flagSet.String("subject", "", "")
|
|
flagSet.String("stream", "", "")
|
|
flagSet.String("consumer", "", "")
|
|
flagSet.String("publisher-topic", "", "")
|
|
flagSet.String("postgres-url", "", "")
|
|
flagSet.String("log-level", "", "")
|
|
flagSet.String("replay-from", "", "")
|
|
flagSet.Duration("ack-wait", 0, "")
|
|
flagSet.Bool("telemetry-enabled", false, "")
|
|
flagSet.String("telemetry-endpoint", "", "")
|
|
flagSet.Bool("telemetry-insecure", false, "")
|
|
|
|
args = []string{
|
|
"--nats-url", "nats://override:4222",
|
|
"--subject", "override.subject",
|
|
"--stream", "STREAM",
|
|
"--consumer", "CONSUMER",
|
|
"--publisher-topic", "pub.topic",
|
|
"--postgres-url", "postgres://override",
|
|
"--log-level", "debug",
|
|
"--replay-from", "seq:42",
|
|
"--ack-wait", "45s",
|
|
"--telemetry-enabled",
|
|
"--telemetry-endpoint", "http://otel:4318",
|
|
"--telemetry-insecure",
|
|
}
|
|
})
|
|
|
|
JustBeforeEach(func() {
|
|
err := flagSet.Parse(args)
|
|
Expect(err).NotTo(HaveOccurred())
|
|
|
|
ctx := cli.NewContext(cli.NewApp(), flagSet, nil)
|
|
applyCLIOverrides(cfg, ctx)
|
|
})
|
|
|
|
It("applies overrides for all critical flags", func() {
|
|
Expect(cfg.NATS.URL).To(Equal("nats://override:4222"))
|
|
Expect(cfg.Subscription.Topic).To(Equal("override.subject"))
|
|
Expect(cfg.NATS.Stream).To(Equal("STREAM"))
|
|
Expect(cfg.NATS.Consumer).To(Equal("CONSUMER"))
|
|
Expect(cfg.Publisher.Topic).To(Equal("pub.topic"))
|
|
Expect(cfg.Postgres.URL).To(Equal("postgres://override"))
|
|
Expect(cfg.Log.Level).To(Equal("debug"))
|
|
Expect(cfg.NATS.ConsumerRules.DeliverPolicy).To(Equal("sequence"))
|
|
Expect(cfg.NATS.ConsumerRules.StartSequence).To(Equal(uint64(42)))
|
|
Expect(cfg.NATS.ConsumerRules.AckWait).To(Equal(45 * time.Second))
|
|
Expect(cfg.Telemetry.Enabled).To(BeTrue())
|
|
Expect(cfg.Telemetry.Endpoint).To(Equal("http://otel:4318"))
|
|
Expect(cfg.Telemetry.Insecure).To(BeTrue())
|
|
})
|
|
|
|
Context("with time-based replay override", func() {
|
|
BeforeEach(func() {
|
|
args = []string{
|
|
"--replay-from", "time:2024-11-15T08:00:00Z",
|
|
}
|
|
})
|
|
|
|
It("configures deliver policy and start time", func() {
|
|
Expect(cfg.NATS.ConsumerRules.DeliverPolicy).To(Equal("time"))
|
|
Expect(cfg.NATS.ConsumerRules.StartTime).To(Equal("2024-11-15T08:00:00Z"))
|
|
Expect(cfg.NATS.ConsumerRules.StartSequence).To(Equal(uint64(0)))
|
|
})
|
|
})
|
|
})
|