(t *testing.T)
| 8 | ) |
| 9 | |
| 10 | func 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 | |
| 58 | func TestSnapshot_PushUsageAck(t *testing.T) { |
| 59 | rp := &recordingPush{failOn: map[uint64]bool{2: true}} |
nothing calls this directly
no test coverage detected