(t *testing.T)
| 1154 | } |
| 1155 | |
| 1156 | func TestController_TelemetrySuccess(t *testing.T) { |
| 1157 | t.Parallel() |
| 1158 | ctx := testutil.Context(t, testutil.WaitShort) |
| 1159 | logger := testutil.Logger(t) |
| 1160 | agentID := uuid.UUID{0x55} |
| 1161 | clientID := uuid.UUID{0x66} |
| 1162 | fCoord := tailnettest.NewFakeCoordinator() |
| 1163 | var coord tailnet.Coordinator = fCoord |
| 1164 | coordPtr := atomic.Pointer[tailnet.Coordinator]{} |
| 1165 | coordPtr.Store(&coord) |
| 1166 | derpMapCh := make(chan *tailcfg.DERPMap) |
| 1167 | defer close(derpMapCh) |
| 1168 | eventCh := make(chan []*proto.TelemetryEvent, 1) |
| 1169 | svc, err := tailnet.NewClientService(tailnet.ClientServiceOptions{ |
| 1170 | Logger: logger, |
| 1171 | CoordPtr: &coordPtr, |
| 1172 | DERPMapUpdateFrequency: time.Millisecond, |
| 1173 | DERPMapFn: func() *tailcfg.DERPMap { return <-derpMapCh }, |
| 1174 | NetworkTelemetryHandler: func(batch []*proto.TelemetryEvent) { |
| 1175 | select { |
| 1176 | case <-ctx.Done(): |
| 1177 | t.Error("timeout sending telemetry event") |
| 1178 | case eventCh <- batch: |
| 1179 | t.Log("sent telemetry batch") |
| 1180 | } |
| 1181 | }, |
| 1182 | ResumeTokenProvider: tailnet.NewInsecureTestResumeTokenProvider(), |
| 1183 | }) |
| 1184 | require.NoError(t, err) |
| 1185 | |
| 1186 | dialer := &pipeDialer{ |
| 1187 | ctx: ctx, |
| 1188 | logger: logger, |
| 1189 | t: t, |
| 1190 | svc: svc, |
| 1191 | streamID: tailnet.StreamID{ |
| 1192 | Name: "client", |
| 1193 | ID: clientID, |
| 1194 | Auth: tailnet.ClientCoordinateeAuth{AgentID: agentID}, |
| 1195 | }, |
| 1196 | } |
| 1197 | |
| 1198 | uut := tailnet.NewController(logger, dialer) |
| 1199 | uut.CoordCtrl = tailnet.NewAgentCoordinationController(logger, &fakeTailnetConn{}) |
| 1200 | tel := tailnet.NewBasicTelemetryController(logger) |
| 1201 | uut.TelemetryCtrl = tel |
| 1202 | uut.Run(ctx) |
| 1203 | // Coordinate calls happen _after_ telemetry is connected up, so we use this |
| 1204 | // to ensure telemetry is connected before sending our event |
| 1205 | cc := testutil.TryReceive(ctx, t, fCoord.CoordinateCalls) |
| 1206 | defer close(cc.Resps) |
| 1207 | |
| 1208 | tel.SendTelemetryEvent(&proto.TelemetryEvent{ |
| 1209 | Id: []byte("test event"), |
| 1210 | }) |
| 1211 | |
| 1212 | testEvents := testutil.TryReceive(ctx, t, eventCh) |
| 1213 |
nothing calls this directly
no test coverage detected