package node_test import ( "testing" toki "git.toki-labs.com/toki/common-proto-socket/go" edgenode "iop/apps/edge/internal/node" ) func TestRegistry_RegisterAndCount(t *testing.T) { reg := edgenode.NewRegistry() entry := &edgenode.NodeEntry{ NodeID: "node-001", Alias: "local-node", Client: &toki.TcpClient{}, } reg.Register(entry) if reg.Count() != 1 { t.Fatalf("expected 1 node, got %d", reg.Count()) } } func TestRegistry_Resolve_ByAliasOrID(t *testing.T) { reg := edgenode.NewRegistry() entry := &edgenode.NodeEntry{ NodeID: "node-001", Alias: "local-node", } reg.Register(entry) // Resolve by ID if e, err := reg.Resolve("node-001"); err != nil || e.NodeID != "node-001" { t.Errorf("failed to resolve by ID: %v", err) } // Resolve by Alias if e, err := reg.Resolve("local-node"); err != nil || e.NodeID != "node-001" { t.Errorf("failed to resolve by Alias: %v", err) } // Resolve non-existent if _, err := reg.Resolve("unknown"); err == nil { t.Error("expected error for unknown node") } } func TestRegistry_Resolve_ImplicitSingleNodeOnly(t *testing.T) { reg := edgenode.NewRegistry() // Empty if _, err := reg.Resolve(""); err == nil { t.Error("expected error on empty registry") } // Single node reg.Register(&edgenode.NodeEntry{NodeID: "node-1"}) if e, err := reg.Resolve(""); err != nil || e.NodeID != "node-1" { t.Errorf("failed implicit resolve for single node: %v", err) } // Multiple nodes reg.Register(&edgenode.NodeEntry{NodeID: "node-2"}) if _, err := reg.Resolve(""); err == nil { t.Error("expected error for implicit resolve with multiple nodes") } } func TestRegistry_UnregisterRemovesAlias(t *testing.T) { reg := edgenode.NewRegistry() reg.Register(&edgenode.NodeEntry{NodeID: "node-1", Alias: "alias-1"}) reg.Unregister("node-1") if reg.Count() != 0 { t.Fatalf("expected 0 nodes, got %d", reg.Count()) } if _, err := reg.Resolve("alias-1"); err == nil { t.Error("alias should be removed after unregister") } }