TestLostPeerCleanupQueries tests that our SQL queries to clean up lost peers do what we expect, that is, clean up peers and associated tunnels that have been lost for over 24 hours.
(t *testing.T)
| 164 | // TestLostPeerCleanupQueries tests that our SQL queries to clean up lost peers do what we expect, |
| 165 | // that is, clean up peers and associated tunnels that have been lost for over 24 hours. |
| 166 | func TestLostPeerCleanupQueries(t *testing.T) { |
| 167 | t.Parallel() |
| 168 | |
| 169 | store, _, sqlDB := dbtestutil.NewDBWithSQLDB(t, dbtestutil.WithDumpOnFailure()) |
| 170 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) |
| 171 | defer cancel() |
| 172 | |
| 173 | coordID := uuid.New() |
| 174 | _, err := store.UpsertTailnetCoordinator(ctx, coordID) |
| 175 | require.NoError(t, err) |
| 176 | |
| 177 | peerID := uuid.New() |
| 178 | _, err = store.UpsertTailnetPeer(ctx, database.UpsertTailnetPeerParams{ |
| 179 | ID: peerID, |
| 180 | CoordinatorID: coordID, |
| 181 | Node: []byte("test"), |
| 182 | Status: database.TailnetStatusLost, |
| 183 | }) |
| 184 | require.NoError(t, err) |
| 185 | |
| 186 | otherID := uuid.New() |
| 187 | _, err = store.UpsertTailnetTunnel(ctx, database.UpsertTailnetTunnelParams{ |
| 188 | CoordinatorID: coordID, |
| 189 | SrcID: peerID, |
| 190 | DstID: otherID, |
| 191 | }) |
| 192 | require.NoError(t, err) |
| 193 | |
| 194 | peers, err := store.GetAllTailnetPeers(ctx) |
| 195 | require.NoError(t, err) |
| 196 | require.Len(t, peers, 1) |
| 197 | require.Equal(t, peerID, peers[0].ID) |
| 198 | |
| 199 | tunnels, err := store.GetAllTailnetTunnels(ctx) |
| 200 | require.NoError(t, err) |
| 201 | require.Len(t, tunnels, 1) |
| 202 | require.Equal(t, peerID, tunnels[0].SrcID) |
| 203 | require.Equal(t, otherID, tunnels[0].DstID) |
| 204 | |
| 205 | // this clean is a noop since the peer and tunnel are less than 24h old |
| 206 | err = store.CleanTailnetLostPeers(ctx) |
| 207 | require.NoError(t, err) |
| 208 | err = store.CleanTailnetTunnels(ctx) |
| 209 | require.NoError(t, err) |
| 210 | |
| 211 | peers, err = store.GetAllTailnetPeers(ctx) |
| 212 | require.NoError(t, err) |
| 213 | require.Len(t, peers, 1) |
| 214 | require.Equal(t, peerID, peers[0].ID) |
| 215 | |
| 216 | tunnels, err = store.GetAllTailnetTunnels(ctx) |
| 217 | require.NoError(t, err) |
| 218 | require.Len(t, tunnels, 1) |
| 219 | require.Equal(t, peerID, tunnels[0].SrcID) |
| 220 | require.Equal(t, otherID, tunnels[0].DstID) |
| 221 | |
| 222 | // set the age of the tunnel to >24h |
| 223 | sqlDB.Exec("UPDATE tailnet_tunnels SET updated_at = $1", time.Now().Add(-25*time.Hour)) |
nothing calls this directly
no test coverage detected