Files
zot/pkg/extensions/extension_sync_test.go
T
Vishwas Rajashekar 38f0e498ab feat(sync): address review comments
Signed-off-by: Vishwas Rajashekar <dev@vrajashkr.com>
2026-05-22 17:40:27 +05:30

166 lines
4.5 KiB
Go

//go:build sync
package extensions_test
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
"zotregistry.dev/zot/v2/pkg/api/config"
"zotregistry.dev/zot/v2/pkg/extensions"
extconf "zotregistry.dev/zot/v2/pkg/extensions/config"
syncconf "zotregistry.dev/zot/v2/pkg/extensions/config/sync"
"zotregistry.dev/zot/v2/pkg/extensions/monitoring"
"zotregistry.dev/zot/v2/pkg/log"
"zotregistry.dev/zot/v2/pkg/scheduler"
"zotregistry.dev/zot/v2/pkg/storage"
"zotregistry.dev/zot/v2/pkg/test/mocks"
)
func TestEnableSyncExtension_StreamManager(t *testing.T) {
Convey("EnableSyncExtension stream manager setup", t, func() {
logger := log.NewTestLogger()
cfg := config.New()
cfg.Storage.RootDirectory = t.TempDir()
metaDB := mocks.MetaDBMock{}
storeController := storage.StoreController{}
metrics := monitoring.NewMetricsServer(false, logger)
t.Cleanup(metrics.Stop)
sch := scheduler.NewScheduler(cfg, metrics, logger)
Convey("stream manager is nil when Stream is not set on any registry", func() {
cfg.Extensions = &extconf.ExtensionConfig{
Sync: &syncconf.Config{
Registries: []syncconf.RegistryConfig{
{
URLs: []string{"http://localhost:5000"},
OnDemand: true,
},
},
},
}
onDemand, err := extensions.EnableSyncExtension(cfg, metaDB, storeController, sch, logger)
So(err, ShouldBeNil)
So(onDemand, ShouldNotBeNil)
So(onDemand.StreamManager(), ShouldBeNil)
})
Convey("stream manager is nil when streaming is explicitly disabled on all registries", func() {
streamDisabled := false
cfg.Extensions = &extconf.ExtensionConfig{
Sync: &syncconf.Config{
Registries: []syncconf.RegistryConfig{
{
URLs: []string{"http://localhost:5000"},
OnDemand: true,
Stream: &streamDisabled,
},
},
},
}
onDemand, err := extensions.EnableSyncExtension(cfg, metaDB, storeController, sch, logger)
So(err, ShouldBeNil)
So(onDemand, ShouldNotBeNil)
So(onDemand.StreamManager(), ShouldBeNil)
})
Convey("stream manager is set when a registry has streaming enabled", func() {
streamEnabled := true
cfg.Extensions = &extconf.ExtensionConfig{
Sync: &syncconf.Config{
Registries: []syncconf.RegistryConfig{
{
URLs: []string{"http://localhost:5000"},
OnDemand: true,
Stream: &streamEnabled,
},
},
},
}
onDemand, err := extensions.EnableSyncExtension(cfg, metaDB, storeController, sch, logger)
So(err, ShouldBeNil)
So(onDemand, ShouldNotBeNil)
So(onDemand.StreamManager(), ShouldNotBeNil)
})
Convey("stream manager is set when only one of multiple registries has streaming enabled", func() {
streamEnabled := true
streamDisabled := false
cfg.Extensions = &extconf.ExtensionConfig{
Sync: &syncconf.Config{
Registries: []syncconf.RegistryConfig{
{
URLs: []string{"http://localhost:5000"},
OnDemand: true,
Stream: &streamDisabled,
},
{
URLs: []string{"http://localhost:5001"},
OnDemand: true,
Stream: &streamEnabled,
},
},
},
}
onDemand, err := extensions.EnableSyncExtension(cfg, metaDB, storeController, sch, logger)
So(err, ShouldBeNil)
So(onDemand, ShouldNotBeNil)
So(onDemand.StreamManager(), ShouldNotBeNil)
})
Convey("stream manager is set with mix of polling and on-demand with streaming enabled", func() {
streamEnabled := true
cfg.Extensions = &extconf.ExtensionConfig{
Sync: &syncconf.Config{
Registries: []syncconf.RegistryConfig{
{
URLs: []string{"http://localhost:5000"},
PollInterval: 60,
},
{
URLs: []string{"http://localhost:5001"},
OnDemand: true,
Stream: &streamEnabled,
},
},
},
}
onDemand, err := extensions.EnableSyncExtension(cfg, metaDB, storeController, sch, logger)
So(err, ShouldBeNil)
So(onDemand, ShouldNotBeNil)
So(onDemand.StreamManager(), ShouldNotBeNil)
})
Convey("returns nil onDemand when sync is disabled", func() {
syncDisabled := false
cfg.Extensions = &extconf.ExtensionConfig{
Sync: &syncconf.Config{
Enable: &syncDisabled,
Registries: []syncconf.RegistryConfig{
{
URLs: []string{"http://localhost:5000"},
OnDemand: true,
},
},
},
}
onDemand, err := extensions.EnableSyncExtension(cfg, metaDB, storeController, sch, logger)
So(err, ShouldBeNil)
So(onDemand, ShouldBeNil)
})
})
}