<!--
title: ensure test cleanup
domain: cloud-infra
topic: Testing
language: Other
source: cloudflare/workerd
updated: 2025-08-14
url: https://awesomereviewers.com/reviewers/workerd-ensure-test-cleanup/
-->

Tests must properly clean up resources and handle conditional execution regardless of test outcome. This includes removing temporary files, resetting global state, and gracefully handling feature flag conditions.

For file-based tests, use RAII patterns or explicit cleanup in finally blocks to ensure resources are released even when tests fail:

```cpp
KJ_TEST("PerfettoSession basic functionality") {
  auto traceFile = getTempFileName("perfetto-test");
  
  // Use RAII or try-finally pattern
  KJ_DEFER(removeFile(traceFile.cStr()));
  
  {
    PerfettoSession session(traceFile, "workerd");
    // ... test operations
  }
  
  KJ_ASSERT(fileExists(traceFile.cStr()));
  // File automatically cleaned up by KJ_DEFER
}
```

For tests that depend on feature flags or autogates, check conditions early and skip gracefully rather than creating complex conditional logic:

```cpp
KJ_TEST("feature dependent test") {
  if (util::Autogate::isEnabled("feature-flag")) {
    KJ_LOG(INFO, "Skipping test due to autogate being enabled");
    return;
  }
  
  // ... rest of test
}
```

This prevents resource leaks, reduces flaky tests, and makes test behavior predictable across different environments and configurations.
