Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit162abf9

Browse files
committed
add a test for TestReportDisabledIfNeeded
1 parent325314b commit162abf9

File tree

2 files changed

+77
-5
lines changed

2 files changed

+77
-5
lines changed

‎coderd/telemetry/telemetry.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,11 @@ func checkIDPOrgSync(ctx context.Context, db database.Store, values *codersdk.De
347347
func (r*remoteReporter)ReportDisabledIfNeeded()error {
348348
db:=r.options.Database
349349
lastTelemetryUpdate,telemetryUpdateErr:=db.GetTelemetryItem(r.ctx,string(TelemetryItemKeyLastTelemetryUpdate))
350-
iftelemetryUpdateErr!=nil {
350+
iftelemetryUpdateErr!=nil&&!errors.Is(telemetryUpdateErr,sql.ErrNoRows){
351351
r.options.Logger.Debug(r.ctx,"get last telemetry update at",slog.Error(telemetryUpdateErr))
352352
}
353353
telemetryDisabled,telemetryDisabledErr:=db.GetTelemetryItem(r.ctx,string(TelemetryItemKeyTelemetryDisabled))
354-
iftelemetryDisabledErr!=nil {
354+
iftelemetryDisabledErr!=nil&&!errors.Is(telemetryDisabledErr,sql.ErrNoRows){
355355
r.options.Logger.Debug(r.ctx,"get telemetry disabled",slog.Error(telemetryDisabledErr))
356356
}
357357
shouldReportDisabledTelemetry:=

‎coderd/telemetry/telemetry_test.go‎

Lines changed: 75 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,31 +361,103 @@ func TestTelemetryItem(t *testing.T) {
361361
require.Equal(t,item.Value,"new_value")
362362
}
363363

364-
funccollectSnapshot(t*testing.T,db database.Store,addOptionsFnfunc(opts telemetry.Options) telemetry.Options) (*telemetry.Deployment,*telemetry.Snapshot) {
364+
funcTestReportDisabledIfNeeded(t*testing.T) {
365+
t.Parallel()
366+
db,_:=dbtestutil.NewDB(t)
367+
ctx:=testutil.Context(t,testutil.WaitMedium)
368+
serverURL,_,snapshotChan:=setupTelemetryServer(t)
369+
370+
options:= telemetry.Options{
371+
Database:db,
372+
Logger:testutil.Logger(t),
373+
URL:serverURL,
374+
DeploymentID:uuid.NewString(),
375+
}
376+
377+
reporter,err:=telemetry.New(options)
378+
require.NoError(t,err)
379+
t.Cleanup(reporter.Close)
380+
381+
// No telemetry updated item, so no report should be sent
382+
require.NoError(t,reporter.ReportDisabledIfNeeded())
383+
require.Empty(t,snapshotChan)
384+
385+
// Telemetry disabled item not present, and a telemetry update item present
386+
// Report should be sent
387+
_=dbgen.TelemetryItem(t,db, database.TelemetryItem{
388+
Key:string(telemetry.TelemetryItemKeyLastTelemetryUpdate),
389+
Value:time.Now().Format(time.RFC3339),
390+
})
391+
require.NoError(t,reporter.ReportDisabledIfNeeded())
392+
select {
393+
casesnapshot:=<-snapshotChan:
394+
require.Len(t,snapshot.TelemetryItems,1)
395+
require.Equal(t,snapshot.TelemetryItems[0].Key,string(telemetry.TelemetryItemKeyTelemetryDisabled))
396+
case<-time.After(testutil.WaitShort/2):
397+
t.Fatal("timeout waiting for snapshot")
398+
}
399+
400+
// Telemetry disabled item present, and a telemetry update item present
401+
// with an updated at time equal to or after the telemetry disabled item
402+
// Report should not be sent
403+
require.NoError(t,reporter.ReportDisabledIfNeeded())
404+
require.Empty(t,snapshotChan)
405+
406+
// Telemetry disabled item present, and a telemetry update item present
407+
// with an updated at time before the telemetry disabled item
408+
// Report should be sent
409+
// Wait a bit to ensure UpdatedAt is bigger when we upsert the telemetry disabled item
410+
time.Sleep(100*time.Millisecond)
411+
require.NoError(t,db.UpsertTelemetryItem(ctx, database.UpsertTelemetryItemParams{
412+
Key:string(telemetry.TelemetryItemKeyTelemetryDisabled),
413+
Value:time.Now().Format(time.RFC3339),
414+
}))
415+
require.NoError(t,reporter.ReportDisabledIfNeeded())
416+
select {
417+
casesnapshot:=<-snapshotChan:
418+
require.Len(t,snapshot.TelemetryItems,1)
419+
require.Equal(t,snapshot.TelemetryItems[0].Key,string(telemetry.TelemetryItemKeyTelemetryDisabled))
420+
case<-time.After(testutil.WaitShort/2):
421+
t.Fatal("timeout waiting for snapshot")
422+
}
423+
}
424+
425+
funcsetupTelemetryServer(t*testing.T) (*url.URL,chan*telemetry.Deployment,chan*telemetry.Snapshot) {
365426
t.Helper()
366427
deployment:=make(chan*telemetry.Deployment,64)
367428
snapshot:=make(chan*telemetry.Snapshot,64)
368429
r:=chi.NewRouter()
369430
r.Post("/deployment",func(w http.ResponseWriter,r*http.Request) {
370431
require.Equal(t,buildinfo.Version(),r.Header.Get(telemetry.VersionHeader))
371-
w.WriteHeader(http.StatusAccepted)
372432
dd:=&telemetry.Deployment{}
373433
err:=json.NewDecoder(r.Body).Decode(dd)
374434
require.NoError(t,err)
375435
deployment<-dd
436+
// Ensure the header is sent only after deployment is sent
437+
w.WriteHeader(http.StatusAccepted)
376438
})
377439
r.Post("/snapshot",func(w http.ResponseWriter,r*http.Request) {
378440
require.Equal(t,buildinfo.Version(),r.Header.Get(telemetry.VersionHeader))
379-
w.WriteHeader(http.StatusAccepted)
380441
ss:=&telemetry.Snapshot{}
381442
err:=json.NewDecoder(r.Body).Decode(ss)
382443
require.NoError(t,err)
383444
snapshot<-ss
445+
// Ensure the header is sent only after snapshot is sent
446+
w.WriteHeader(http.StatusAccepted)
384447
})
385448
server:=httptest.NewServer(r)
386449
t.Cleanup(server.Close)
387450
serverURL,err:=url.Parse(server.URL)
388451
require.NoError(t,err)
452+
453+
returnserverURL,deployment,snapshot
454+
}
455+
456+
funccollectSnapshot(t*testing.T,db database.Store,addOptionsFnfunc(opts telemetry.Options) telemetry.Options) (*telemetry.Deployment,*telemetry.Snapshot) {
457+
t.Helper()
458+
459+
serverURL,deployment,snapshot:=setupTelemetryServer(t)
460+
389461
options:= telemetry.Options{
390462
Database:db,
391463
Logger:testutil.Logger(t),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp