MCPcopy Index your code
hub / github.com/coder/agentapi / waitForMessagesWithCount

Function waitForMessagesWithCount

e2e/echo_test.go:505–542  ·  view source on GitHub ↗

waitForMessagesWithCount retries GetMessages until it returns the expected number of messages or the timeout is reached.

(ctx context.Context, t testing.TB, apiClient *agentapisdk.Client, expectedCount int, timeout time.Duration, msg string)

Source from the content-addressed store, hash-verified

503
504// waitForMessagesWithCount retries GetMessages until it returns the expected number of messages or the timeout is reached.
505func waitForMessagesWithCount(ctx context.Context, t testing.TB, apiClient *agentapisdk.Client, expectedCount int, timeout time.Duration, msg string) (*agentapisdk.GetMessagesResponse, error) {
506 t.Helper()
507 waitCtx, cancel := context.WithTimeout(ctx, timeout)
508 defer cancel()
509
510 ticker := time.NewTicker(100 * time.Millisecond)
511 defer ticker.Stop()
512
513 start := time.Now()
514 var lastErr error
515 var lastCount int
516
517 for {
518 select {
519 case <-waitCtx.Done():
520 if lastErr != nil {
521 return nil, fmt.Errorf("%s: failed to get %d messages after %v (last error: %w, last count: %d)",
522 msg, expectedCount, time.Since(start).Round(100*time.Millisecond), lastErr, lastCount)
523 }
524 return nil, fmt.Errorf("%s: timeout waiting for %d messages after %v (last count: %d)",
525 msg, expectedCount, time.Since(start).Round(100*time.Millisecond), lastCount)
526 case <-ticker.C:
527 resp, err := apiClient.GetMessages(ctx)
528 if err != nil {
529 lastErr = err
530 t.Logf("%s: GetMessages failed (will retry): %v", msg, err)
531 continue
532 }
533 lastCount = len(resp.Messages)
534 if lastCount == expectedCount {
535 elapsed := time.Since(start)
536 t.Logf("%s: got expected %d messages (elapsed: %s)", msg, expectedCount, elapsed.Round(100*time.Millisecond))
537 return resp, nil
538 }
539 t.Logf("%s: got %d messages, expecting %d (will retry)", msg, lastCount, expectedCount)
540 }
541 }
542}
543
544// getFreePort returns a free TCP port
545func getFreePort() (int, error) {

Callers 1

TestE2EFunction · 0.85

Calls 1

StopMethod · 0.45

Tested by

no test coverage detected