MCPcopy Create free account
hub / github.com/0xUnixIO/pulse / TestSnapshot_BasicCounts

Function TestSnapshot_BasicCounts

internal/nodehub/metrics_test.go:10–56  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

8)
9
10func TestSnapshot_BasicCounts(t *testing.T) {
11 hub := New(Options{PeerExtractor: mdPeerExtractor})
12 env := newTestEnv(t, hub)
13
14 // Offline call → ErrNodeOffline + 计数
15 if _, err := hub.Call(context.Background(), "ghost", "x", nil); !errors.Is(err, ErrNodeOffline) {
16 t.Fatalf("expected ErrNodeOffline, got %v", err)
17 }
18 snap := hub.Snapshot()
19 if snap.CallsTotal != 1 || snap.CallsErrTotal != 1 || snap.CallsOfflineTotal != 1 {
20 t.Fatalf("unexpected counters after offline call: %+v", snap)
21 }
22 if snap.OnlineCount != 0 || len(snap.OnlineNodeIDs) != 0 {
23 t.Fatalf("expected zero online: %+v", snap)
24 }
25
26 // 上线一个节点
27 cc := env.dial(t)
28 mock := startNodeMock(t, cc, "n1")
29 waitOnline(t, hub, "n1")
30
31 mock.handle("ping", func(string, []byte) (bool, []byte, string) { return true, []byte("{}"), "" })
32
33 if _, err := hub.Call(context.Background(), "n1", "ping", nil); err != nil {
34 t.Fatalf("call: %v", err)
35 }
36
37 snap = hub.Snapshot()
38 if snap.OnlineCount != 1 {
39 t.Fatalf("OnlineCount=%d, want 1", snap.OnlineCount)
40 }
41 if len(snap.OnlineNodeIDs) != 1 || snap.OnlineNodeIDs[0] != "n1" {
42 t.Fatalf("OnlineNodeIDs=%v", snap.OnlineNodeIDs)
43 }
44 if snap.CallsTotal != 2 {
45 t.Fatalf("CallsTotal=%d, want 2", snap.CallsTotal)
46 }
47 if snap.CallsErrTotal != 1 {
48 t.Fatalf("CallsErrTotal=%d, want 1", snap.CallsErrTotal)
49 }
50 if snap.CallLatencyAvgNs == 0 {
51 t.Fatalf("expected non-zero latency avg")
52 }
53 if ts, ok := snap.LastSeen["n1"]; !ok || ts == 0 {
54 t.Fatalf("LastSeen missing for n1: %+v", snap.LastSeen)
55 }
56}
57
58func TestSnapshot_PushUsageAck(t *testing.T) {
59 rp := &recordingPush{failOn: map[uint64]bool{2: true}}

Callers

nothing calls this directly

Calls 8

newTestEnvFunction · 0.85
startNodeMockFunction · 0.85
waitOnlineFunction · 0.85
SnapshotMethod · 0.80
dialMethod · 0.80
NewFunction · 0.70
CallMethod · 0.65
handleMethod · 0.45

Tested by

no test coverage detected