iop/apps/edge/internal/node/registry_test.go
toki b4124f0bd6 feat: CLI setup, edge/node transport refactor, and infrastructure updates
- Add CLI core setup for edge and node services
- Refactor edge transport layer (server, integration tests)
- Refactor node transport layer (parser, session, heartbeat, client)
- Add main_test.go files for edge and node commands
- Add input package for edge service
- Add go.work and go.work.sum for workspace support
- Update configs, docs, and project rules
2026-05-20 16:37:42 +09:00

94 lines
2.5 KiB
Go

package node_test
import (
"testing"
toki "git.toki-labs.com/toki/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_ByDisplayLabel(t *testing.T) {
reg := edgenode.NewRegistry()
reg.Register(&edgenode.NodeEntry{NodeID: "node-001", Alias: "local-node"})
reg.Register(&edgenode.NodeEntry{NodeID: "node-002", Alias: "remote-node"})
if e, err := reg.Resolve("node0"); err != nil || e.NodeID != "node-001" {
t.Fatalf("Resolve(node0) = %+v, %v; want node-001", e, err)
}
if e, err := reg.Resolve("node1"); err != nil || e.NodeID != "node-002" {
t.Fatalf("Resolve(node1) = %+v, %v; want node-002", e, err)
}
}
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")
}
}