Skip to content

Commit a0c7a54

Browse files
committed
imapclient: wait for IDLE response in example
1 parent b4bb320 commit a0c7a54

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

imapclient/example_test.go

+22-7
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,28 @@ func ExampleClient_Idle() {
334334
if err != nil {
335335
log.Fatalf("IDLE command failed: %v", err)
336336
}
337-
338-
// Wait for 30s to receive updates from the server
339-
time.Sleep(30 * time.Second)
340-
341-
// Stop idling
342-
if err := idleCmd.Close(); err != nil {
343-
log.Fatalf("failed to stop idling: %v", err)
337+
defer idleCmd.Close()
338+
339+
done := make(chan error, 1)
340+
go func() {
341+
done <- idleCmd.Wait()
342+
}()
343+
344+
// Wait for 30s to receive updates from the server, then stop idling
345+
t := time.NewTimer(30 * time.Second)
346+
defer t.Stop()
347+
select {
348+
case <-t.C:
349+
if err := idleCmd.Close(); err != nil {
350+
log.Fatalf("failed to stop idling: %v", err)
351+
}
352+
if err := <-done; err != nil {
353+
log.Fatalf("IDLE command failed: %v", err)
354+
}
355+
case err := <-done:
356+
if err != nil {
357+
log.Fatalf("IDLE command failed: %v", err)
358+
}
344359
}
345360
}
346361

0 commit comments

Comments
 (0)