layer1: add namespace dispatch step 17

This commit is contained in:
Naeel
2026-04-26 10:22:35 +03:00
parent ae8275d0a7
commit b1e2e6462d
3 changed files with 139 additions and 12 deletions
+61 -12
View File
@@ -9,23 +9,29 @@ import (
)
type testNamespaceSubscriber struct {
name string
name string
addErr error
resyncErr error
addCalls int
resyncCalls int
}
func (s testNamespaceSubscriber) Name() string {
func (s *testNamespaceSubscriber) Name() string {
return s.name
}
func (s testNamespaceSubscriber) OnNamespaceAdd(ctx context.Context, record NamespaceRecord) error {
func (s *testNamespaceSubscriber) OnNamespaceAdd(ctx context.Context, record NamespaceRecord) error {
s.addCalls++
return s.addErr
}
func (s *testNamespaceSubscriber) OnNamespaceRemove(ctx context.Context, record NamespaceRecord) error {
return nil
}
func (s testNamespaceSubscriber) OnNamespaceRemove(ctx context.Context, record NamespaceRecord) error {
return nil
}
func (s testNamespaceSubscriber) OnNamespaceResync(ctx context.Context, record NamespaceRecord) error {
return nil
func (s *testNamespaceSubscriber) OnNamespaceResync(ctx context.Context, record NamespaceRecord) error {
s.resyncCalls++
return s.resyncErr
}
func TestNamespaceManagerSnapshotAndGet(t *testing.T) {
@@ -122,9 +128,9 @@ func TestNamespaceManagerSnapshotRecordsReturnsCopies(t *testing.T) {
func TestNamespaceManagerSubscribers(t *testing.T) {
manager := NewNamespaceManager()
manager.Subscribe(testNamespaceSubscriber{name: "router"})
manager.Subscribe(testNamespaceSubscriber{name: "buildermgr"})
manager.Subscribe(testNamespaceSubscriber{name: "router"})
manager.Subscribe(&testNamespaceSubscriber{name: "router"})
manager.Subscribe(&testNamespaceSubscriber{name: "buildermgr"})
manager.Subscribe(&testNamespaceSubscriber{name: "router"})
expected := []string{"buildermgr", "router"}
if !reflect.DeepEqual(expected, manager.SnapshotSubscribers()) {
@@ -216,3 +222,46 @@ func TestNewBootstrappedNamespaceManager(t *testing.T) {
t.Fatalf("expected env source, got %s", record.Source)
}
}
func TestNamespaceManagerDispatchAdd(t *testing.T) {
manager := NewNamespaceManager()
manager.Upsert(NamespaceEvent{Type: NamespaceEventAdd, Name: "tenant-a", Source: NamespaceSourceWatcher})
router := &testNamespaceSubscriber{name: "router"}
builder := &testNamespaceSubscriber{name: "buildermgr"}
manager.Subscribe(router)
manager.Subscribe(builder)
record, ok, err := manager.DispatchAdd(context.Background(), "tenant-a")
if !ok || err != nil {
t.Fatalf("expected dispatch add success, ok=%v err=%v", ok, err)
}
if router.addCalls != 1 || builder.addCalls != 1 {
t.Fatalf("expected both subscribers to receive add call")
}
if record.Phase != NamespacePhaseActive {
t.Fatalf("expected active phase after successful dispatch, got %s", record.Phase)
}
}
func TestNamespaceManagerDispatchResyncFailure(t *testing.T) {
manager := NewNamespaceManager()
manager.Upsert(NamespaceEvent{Type: NamespaceEventAdd, Name: "tenant-a", Source: NamespaceSourceWatcher})
router := &testNamespaceSubscriber{name: "router"}
builder := &testNamespaceSubscriber{name: "buildermgr", resyncErr: errors.New("resync failed")}
manager.Subscribe(router)
manager.Subscribe(builder)
record, ok, err := manager.DispatchResync(context.Background(), "tenant-a")
if !ok || err == nil {
t.Fatalf("expected dispatch resync failure, ok=%v err=%v", ok, err)
}
if builder.resyncCalls != 1 {
t.Fatalf("expected failing subscriber to receive resync call")
}
if record.Phase != NamespacePhaseFailed {
t.Fatalf("expected failed phase after dispatch error, got %s", record.Phase)
}
if record.RegisteredParts["buildermgr"].LastError != "resync failed" {
t.Fatalf("expected subscriber error to be stored")
}
}