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)
| 503 | |
| 504 | // waitForMessagesWithCount retries GetMessages until it returns the expected number of messages or the timeout is reached. |
| 505 | func 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 |
| 545 | func getFreePort() (int, error) { |