@@ -11,6 +11,7 @@ import (
11
11
"time"
12
12
13
13
"github.com/google/uuid"
14
+ "github.com/stretchr/testify/assert"
14
15
"github.com/stretchr/testify/require"
15
16
"go.uber.org/mock/gomock"
16
17
"golang.org/x/xerrors"
@@ -33,9 +34,9 @@ import (
33
34
// make update-golden-files
34
35
var UpdateGoldenFiles = flag .Bool ("update" , false , "update .golden files" )
35
36
36
- // TestHeartbeat_Cleanup is internal so that we can overwrite the cleanup period and not wait an hour for the timed
37
+ // TestHeartbeats_Cleanup is internal so that we can overwrite the cleanup period and not wait an hour for the timed
37
38
// cleanup.
38
- func TestHeartbeat_Cleanup (t * testing.T ) {
39
+ func TestHeartbeats_Cleanup (t * testing.T ) {
39
40
t .Parallel ()
40
41
41
42
ctrl := gomock .NewController (t )
@@ -78,6 +79,43 @@ func TestHeartbeat_Cleanup(t *testing.T) {
78
79
close (waitForCleanup )
79
80
}
80
81
82
+ func TestHeartbeats_LostCoordinator_MarkLost (t * testing.T ) {
83
+ t .Parallel ()
84
+
85
+ ctrl := gomock .NewController (t )
86
+ mStore := dbmock .NewMockStore (ctrl )
87
+
88
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitShort )
89
+ defer cancel ()
90
+ logger := slogtest .Make (t , nil ).Leveled (slog .LevelDebug )
91
+
92
+ coordID := uuid .New ()
93
+
94
+ uut := & heartbeats {
95
+ ctx : ctx ,
96
+ logger : logger ,
97
+ store : mStore ,
98
+ cleanupPeriod : time .Millisecond ,
99
+ coordinators : map [uuid.UUID ]time.Time {
100
+ coordID : time .Now (),
101
+ },
102
+ }
103
+
104
+ mpngs := []mapping {{
105
+ peer : uuid .New (),
106
+ coordinator : uuid .New (),
107
+ updatedAt : time .Now (),
108
+ node : & proto.Node {},
109
+ kind : proto .CoordinateResponse_PeerUpdate_NODE ,
110
+ }}
111
+
112
+ // Filter should still return the mapping without a coordinator, but marked
113
+ // as LOST.
114
+ got := uut .filter (mpngs )
115
+ require .Len (t , got , 1 )
116
+ assert .Equal (t , proto .CoordinateResponse_PeerUpdate_LOST , got [0 ].kind )
117
+ }
118
+
81
119
// TestLostPeerCleanupQueries tests that our SQL queries to clean up lost peers do what we expect,
82
120
// that is, clean up peers and associated tunnels that have been lost for over 24 hours.
83
121
func TestLostPeerCleanupQueries (t * testing.T ) {
0 commit comments