Files
zot/pkg/extensions/events/nats_sink_test.go
Andrei Aaron da426850e7 chore: update golangci-lint and fix all issues (#3575)
* chore: Update golangci-lint

Signed-off-by: Lars Francke <git@lars-francke.de>

* chore: fix all golangci-lint issues

- Remove deprecated `// +build` tags
- Fix godoclint, modernize, wsl_v5, govet, lll, gci, noctx issues
- Update linter configuration
- Modernize code to use Go 1.22+ features (for range N, slices.Contains, etc.)
- Update make check lint the privileged tests

Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com>

---------

Signed-off-by: Lars Francke <git@lars-francke.de>
Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com>
Co-authored-by: Lars Francke <git@lars-francke.de>
2025-11-22 23:36:48 +02:00

130 lines
3.0 KiB
Go

//go:build events
package events_test
import (
"testing"
"time"
cloudevents "github.com/cloudevents/sdk-go/v2"
. "github.com/smartystreets/goconvey/convey"
zerr "zotregistry.dev/zot/v2/errors"
eventsconf "zotregistry.dev/zot/v2/pkg/extensions/config/events"
"zotregistry.dev/zot/v2/pkg/extensions/events"
)
func TestNATSSink(t *testing.T) {
Convey("NewNATSSink returns error for invalid type", t, func() {
cfg := eventsconf.SinkConfig{
Type: "invalid",
Address: "nats://localhost",
}
sink, err := events.NewNATSSink(cfg)
So(sink, ShouldBeNil)
So(err, ShouldEqual, zerr.ErrInvalidEventSinkType)
})
Convey("NewNATSSink returns error for empty address", t, func() {
cfg := eventsconf.SinkConfig{
Type: eventsconf.NATS,
}
sink, err := events.NewNATSSink(cfg)
So(sink, ShouldBeNil)
So(err, ShouldEqual, zerr.ErrEventSinkAddressEmpty)
})
Convey("NewNATSSink with username/password credentials", t, func() {
natsServer, natsURL := setupTestNATSServer(t)
defer natsServer.Shutdown()
cfg := eventsconf.SinkConfig{
Type: eventsconf.NATS,
Address: natsURL,
Timeout: 2 * time.Second,
Credentials: &eventsconf.Credentials{
Username: "user",
Password: "pass",
},
}
sink, err := events.NewNATSSink(cfg)
So(err, ShouldBeNil)
So(sink, ShouldNotBeNil)
})
Convey("NewNATSSink with nonexistent credentials file", t, func() {
natsServer, natsURL := setupTestNATSServer(t)
defer natsServer.Shutdown()
credsFile := "nonexistent.creds"
cfg := eventsconf.SinkConfig{
Type: eventsconf.NATS,
Address: natsURL,
Timeout: 1 * time.Second,
Credentials: &eventsconf.Credentials{
File: &credsFile,
},
}
sink, err := events.NewNATSSink(cfg)
So(sink, ShouldBeNil)
So(err, ShouldNotBeNil)
})
Convey("NewNATSSink fails with invalid TLS config", t, func() {
natsServer, natsURL := setupTestNATSServer(t)
defer natsServer.Shutdown()
cfg := eventsconf.SinkConfig{
Type: eventsconf.NATS,
Address: natsURL,
TLSConfig: &eventsconf.TLSConfig{
CACertFile: "invalid",
CertFile: "invalid",
},
}
sink, err := events.NewNATSSink(cfg)
So(sink, ShouldBeNil)
So(err, ShouldNotBeNil)
})
Convey("Emit returns error for invalid event", t, func() {
natsServer, natsURL := setupTestNATSServer(t)
defer natsServer.Shutdown()
cfg := eventsconf.SinkConfig{
Type: eventsconf.NATS,
Address: natsURL,
Timeout: 1 * time.Second,
}
sink, err := events.NewNATSSink(cfg)
So(err, ShouldBeNil)
event := cloudevents.NewEvent() // invalid: no ID/type/source
err = sink.Emit(&event)
So(err, ShouldNotBeNil)
})
Convey("Close succeeds even without Emit", t, func() {
natsServer, natsURL := setupTestNATSServer(t)
defer natsServer.Shutdown()
cfg := eventsconf.SinkConfig{
Type: eventsconf.NATS,
Address: natsURL,
Timeout: 1 * time.Second,
}
sink, err := events.NewNATSSink(cfg)
So(err, ShouldBeNil)
err = sink.Close()
So(err, ShouldBeNil)
})
}