Back to all reviewers

Avoid flaky test patterns

influxdata/influxdb
Based on 4 comments
Rust

Write reliable tests by avoiding common patterns that can lead to flaky behavior. Specifically: 1. Avoid arbitrary timeouts and sleeps in tests. Instead, use proper test infrastructure or wait for specific conditions.

Testing Rust

Reviewer Prompt

Write reliable tests by avoiding common patterns that can lead to flaky behavior. Specifically:

  1. Avoid arbitrary timeouts and sleeps in tests. Instead, use proper test infrastructure or wait for specific conditions.
  2. Don’t rely on snapshot testing for non-deterministic data like serialized maps.
  3. Use proper test abstractions rather than low-level timing controls.

Example of problematic code:

#[test]
async fn test_telemetry() {
    let store = TelemetryStore::new().await;
    tokio::time::sleep(Duration::from_secs(1)).await; // Flaky!
    assert!(store.duration > 0);
}

Better approach:

#[test]
async fn test_telemetry() {
    let store = TelemetryStore::new().await;
    // Use TestServer or similar infrastructure
    let server = TestServer::spawn().await;  // Waits for actual readiness
    assert!(store.is_ready());
    // Or implement explicit condition checking
    wait_for_condition(|| store.duration > 0, "store duration").await;
}

For serialization testing, prefer explicit equality checks over snapshot comparisons when dealing with non-deterministic data structures.

4
Comments Analyzed
Rust
Primary Language
Testing
Category

Source Discussions