layer1: share watcher namespace manager bootstrap
This commit is contained in:
@@ -88,6 +88,18 @@ func NewBootstrappedNamespaceManager(resolver *NamespaceResolver, source Namespa
|
||||
return manager
|
||||
}
|
||||
|
||||
func NewWatcherNamespaceManager(ctx context.Context, namespaces []string, source NamespaceSource, observedAt time.Time, subscribers ...NamespaceSubscriber) (NamespaceManager, error) {
|
||||
manager := NewNamespaceManager()
|
||||
for _, subscriber := range subscribers {
|
||||
if subscriber == nil {
|
||||
continue
|
||||
}
|
||||
manager.Subscribe(subscriber)
|
||||
}
|
||||
_, err := manager.BootstrapAndDispatch(ctx, namespaces, source, observedAt)
|
||||
return manager, err
|
||||
}
|
||||
|
||||
func (m *inMemoryNamespaceManager) Subscribe(subscriber NamespaceSubscriber) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
|
||||
@@ -270,6 +270,21 @@ func TestNewBootstrappedNamespaceManager(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewWatcherNamespaceManager(t *testing.T) {
|
||||
router := &testNamespaceSubscriber{name: "router"}
|
||||
builder := &testNamespaceSubscriber{name: "buildermgr"}
|
||||
manager, err := NewWatcherNamespaceManager(context.Background(), []string{"tenant-b", "tenant-a"}, NamespaceSourceEnv, time.Now().UTC(), router, builder)
|
||||
if err != nil {
|
||||
t.Fatalf("expected watcher manager bootstrap success: %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual([]string{"tenant-a", "tenant-b"}, manager.Snapshot()) {
|
||||
t.Fatalf("expected watcher manager snapshot to match bootstrapped namespaces")
|
||||
}
|
||||
if router.addCalls != 2 || builder.addCalls != 2 {
|
||||
t.Fatalf("expected all subscribers to receive bootstrap dispatch calls")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNamespaceManagerDispatchAdd(t *testing.T) {
|
||||
manager := NewNamespaceManager()
|
||||
manager.Upsert(NamespaceEvent{Type: NamespaceEventAdd, Name: "tenant-a", Source: NamespaceSourceWatcher})
|
||||
|
||||
Reference in New Issue
Block a user