layer1: add namespace dispatch step 17
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user