[client] Assert the sync response is dropped for the right reason

Start returns before the first sync response necessarily arrives, so the
disabled case could pass against a client that had simply not synced yet.
Wait for the engine to apply a sync, then require the persistence error
rather than any error, so a not-started engine no longer satisfies it.

Also document that PeerState is a read-only snapshot which shares its mutex
and route map with the recorder.
This commit is contained in:
mlsmaycon
2026-08-31 17:44:55 +02:00
parent 5abeda0df7
commit 6097296f77
2 changed files with 13 additions and 1 deletions
+5
View File
@@ -49,6 +49,11 @@ type PeerConnStatus = peer.ConnStatus
// PeerState is the status recorder's view of one remote peer, as carried in
// the Peers field of the value returned by Status and StatusSnapshot.
//
// It is a read-only snapshot. The scalar fields are copied under the
// recorder's lock and are safe to read, but the value still shares its mutex
// and route map with the recorder, so callers must not mutate it or call its
// route methods.
type PeerState = peer.State
// Client manages a netbird embedded client instance.
+8 -1
View File
@@ -233,9 +233,16 @@ func TestClientSyncResponsePersistence(t *testing.T) {
}
})
// Start returns before the first sync response necessarily arrives, so
// wait for the engine to apply one. Without this the assertion below
// could pass on a client that simply has not synced yet.
require.Eventually(t, func() bool {
return client.StatusSnapshot().LocalPeerState.IP != ""
}, 30*time.Second, 200*time.Millisecond, "the initial management sync should be applied")
if !tc.persisted {
_, err := client.GetLatestSyncResponse()
require.Error(t, err, "no sync response may be retained when persistence is disabled")
require.ErrorContains(t, err, "persistence is disabled", "the sync response must be dropped, not merely unavailable")
return
}