(t *testing.T)
| 567 | } |
| 568 | |
| 569 | func TestNodeUpdater_fillPeerDiagnostics(t *testing.T) { |
| 570 | t.Parallel() |
| 571 | ctx := testutil.Context(t, testutil.WaitShort) |
| 572 | logger := testutil.Logger(t) |
| 573 | id := tailcfg.NodeID(1) |
| 574 | nodeKey := key.NewNode().Public() |
| 575 | discoKey := key.NewDisco().Public() |
| 576 | uut := newNodeUpdater( |
| 577 | logger, |
| 578 | func(n *Node) {}, |
| 579 | id, nodeKey, discoKey, |
| 580 | ) |
| 581 | defer uut.close() |
| 582 | |
| 583 | // at start of day, filling diagnostics will not have derp and sentNode is false |
| 584 | d := PeerDiagnostics{} |
| 585 | uut.fillPeerDiagnostics(&d) |
| 586 | require.Equal(t, 0, d.PreferredDERP) |
| 587 | require.False(t, d.SentNode) |
| 588 | |
| 589 | dl := map[string]float64{"1": 0.025} |
| 590 | uut.setNetInfo(&tailcfg.NetInfo{ |
| 591 | PreferredDERP: 1, |
| 592 | DERPLatency: dl, |
| 593 | }) |
| 594 | |
| 595 | // after node callback, we should get the derp and SentNode is true. |
| 596 | // Use eventually since, there is a race between the callback completing |
| 597 | // and the test checking |
| 598 | require.Eventually(t, func() bool { |
| 599 | d := PeerDiagnostics{} |
| 600 | uut.fillPeerDiagnostics(&d) |
| 601 | // preferred DERP should be set right away, even if the callback is not |
| 602 | // complete. |
| 603 | if !assert.Equal(t, 1, d.PreferredDERP) { |
| 604 | return false |
| 605 | } |
| 606 | return d.SentNode |
| 607 | }, testutil.WaitShort, testutil.IntervalFast) |
| 608 | |
| 609 | done := make(chan struct{}) |
| 610 | go func() { |
| 611 | defer close(done) |
| 612 | uut.close() |
| 613 | }() |
| 614 | _ = testutil.TryReceive(ctx, t, done) |
| 615 | } |
| 616 | |
| 617 | func TestNodeUpdater_fillPeerDiagnostics_noCallback(t *testing.T) { |
| 618 | t.Parallel() |
nothing calls this directly
no test coverage detected