Artifact 54268f56578ab86098fffb577be0a725b6bdc3b284fcc3fcc237034818596ed7:
- File
leaf/agent/peer_registry_test.go
— part of check-in
[eda7960b81]
at
2026-04-23 19:23:42
on branch trunk
— rename module to github.com/danmestas/EdgeSync
Fix the case-sensitive module path to match the actual GitHub repo URL (danmestas/EdgeSync). Remove tracked leaf/leaf binary and ignore .claude/skills/ scratchpad dirs. (user: [email protected], size: 3669) [annotate] [blame] [check-ins using] [more...]
package agent import ( "testing" libfossil "github.com/danmestas/libfossil" "github.com/danmestas/libfossil/simio" ) func TestPeerRegistryEnsureAndSeed(t *testing.T) { r, projCode, srvCode := openTestRepo(t) mt := &libfossil.MockTransport{} clock := simio.NewSimClock() a := NewFromParts(Config{ PeerID: "test-peer-1", ServeHTTPAddr: ":8080", SubjectPrefix: "fossil", Clock: clock, }, r, mt, projCode, srvCode) // Ensure schema if err := a.ensurePeerRegistry(); err != nil { t.Fatalf("ensurePeerRegistry: %v", err) } // Seed the registry if err := a.seedPeerRegistry(); err != nil { t.Fatalf("seedPeerRegistry: %v", err) } // Verify the row exists var peerID, version, platform, natsSubject, addr string var lastSync int64 err := r.DB().QueryRow( "SELECT peer_id, last_sync, version, platform, nats_subject, addr FROM peer_registry WHERE peer_id=?", "test-peer-1", ).Scan(&peerID, &lastSync, &version, &platform, &natsSubject, &addr) if err != nil { t.Fatalf("query peer_registry: %v", err) } if peerID != "test-peer-1" { t.Errorf("peer_id = %v, want test-peer-1", peerID) } if lastSync != clock.Now().Unix() { t.Errorf("last_sync = %v, want %v", lastSync, clock.Now().Unix()) } if version != "dev" { t.Errorf("version = %v, want dev", version) } if platform == "" { t.Error("platform should not be empty") } if natsSubject != "fossil" { t.Errorf("nats_subject = %v, want fossil", natsSubject) } if addr != ":8080" { t.Errorf("addr = %v, want :8080", addr) } } func TestPeerRegistryUpdateAfterSync(t *testing.T) { r, projCode, srvCode := openTestRepo(t) mt := &libfossil.MockTransport{} clock := simio.NewSimClock() a := NewFromParts(Config{ PeerID: "test-peer-2", Clock: clock, }, r, mt, projCode, srvCode) // Ensure and seed if err := a.ensurePeerRegistry(); err != nil { t.Fatalf("ensurePeerRegistry: %v", err) } if err := a.seedPeerRegistry(); err != nil { t.Fatalf("seedPeerRegistry: %v", err) } // Advance clock clock.Advance(60) // Update after sync if err := a.updatePeerRegistryAfterSync(); err != nil { t.Fatalf("updatePeerRegistryAfterSync: %v", err) } // Verify last_sync was updated var lastSync int64 err := r.DB().QueryRow( "SELECT last_sync FROM peer_registry WHERE peer_id=?", "test-peer-2", ).Scan(&lastSync) if err != nil { t.Fatalf("query: %v", err) } if lastSync != clock.Now().Unix() { t.Errorf("last_sync = %v, want %v (should be updated)", lastSync, clock.Now().Unix()) } } func TestPeerRegistryCapabilities(t *testing.T) { r, projCode, srvCode := openTestRepo(t) mt := &libfossil.MockTransport{} tests := []struct { name string config Config wantCaps string }{ { name: "http-only", config: Config{ServeHTTPAddr: ":8080"}, wantCaps: "serve-http,push,pull", }, { name: "nats-only", config: Config{ServeNATSEnabled: true}, wantCaps: "serve-nats,push,pull", }, { name: "both", config: Config{ServeHTTPAddr: ":8080", ServeNATSEnabled: true}, wantCaps: "serve-http,serve-nats,push,pull", }, { name: "none", config: Config{}, wantCaps: "push,pull", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { tt.config.PeerID = "test-peer-caps" tt.config.Clock = simio.NewSimClock() a := NewFromParts(tt.config, r, mt, projCode, srvCode) caps := a.capabilities() got := "" if len(caps) > 0 { got = caps[0] for i := 1; i < len(caps); i++ { got += "," + caps[i] } } if got != tt.wantCaps { t.Errorf("capabilities = %q, want %q", got, tt.wantCaps) } }) } }