From f8ec06c2022ab9f00c12c7d200a57131d8d36fd2 Mon Sep 17 00:00:00 2001 From: Emmett Butler Date: Fri, 20 Jun 2025 12:28:01 -0700 Subject: [PATCH] add recipe for handling flaky tests --- docs/how_to_test.md | 33 ++++++++---------- .../rerun-workflow-from-failed.png | Bin 30577 -> 0 bytes 2 files changed, 15 insertions(+), 18 deletions(-) delete mode 100644 docs/how_to_test/rerun-workflow-from-failed.png diff --git a/docs/how_to_test.md b/docs/how_to_test.md index 23e86c84ee2..6c5ac80a5d4 100644 --- a/docs/how_to_test.md +++ b/docs/how_to_test.md @@ -4,25 +4,25 @@ The project leverages different types of test: -1. The most common ones are **unit tests**. +1. The most common ones are **unit tests**. They are intended to test a single isolated feature, and rely on [JUnit 5 framework](https://junit.org/junit5/docs/current/user-guide/) or [Spock 2 framework](https://spockframework.org/spock/docs/). JUnit framework is recommended for most unit tests for its simplicity and performance reasons. Spock framework provides an alternative for more complex test scenarios, or tests that requires Groovy Script to access data outside their scope limitation (eg private fields). -2. A variant of unit tests are **instrumented tests**. +2. A variant of unit tests are **instrumented tests**. Their purpose is similar to the unit tests but the tested code is instrumented by the java agent (`:dd-trace-java:java-agent`) while running. They extend the Spock specification `datadog.trace.agent.test.AgentTestRunner` which allows to test produced traces and metrics. -3. The third type of tests are **Muzzle checks**. +3. The third type of tests are **Muzzle checks**. Their goal is to check the [Muzzle directives](./how_instrumentations_work.md#muzzle), making sure instrumentations are safe to load against specific library versions. -3. The fourth type of tests are **integration tests**. +3. The fourth type of tests are **integration tests**. They test features that requires a more complex environment setup. In order to build such enviroments, integration tests use Testcontainers to setup the services needed to run the tests. -4. The fifth type of test are **smoke tests**. -They are dedicated to test the java agent (`:dd-java-agent`) behavior against demo applications to prevent any regression. All smoke tests are located into the `:dd-smoke-tests` module. +4. The fifth type of test are **smoke tests**. +They are dedicated to test the java agent (`:dd-java-agent`) behavior against demo applications to prevent any regression. All smoke tests are located into the `:dd-smoke-tests` module. -5. The last type of test are **system tests**. +5. The last type of test are **system tests**. They are intended to test behavior consistency between all the client libraries, and relies on [their on GitHub repository](https://github.com/DataDog/system-tests). > [!TIP] @@ -43,10 +43,12 @@ This mechanism exists to make sure either java agent state or static data are re If a test runs unreliably, or doen't have a fully deterministic behavior, this will lead into recurrent unexpected errors in continuous integration. In order to identify such tests and avoid the continuous integration to fail, they are marked as _flaky_ and must be annotated with the `@Flaky` annotation. -> [!TIP] -> In case your pull request checks failed due to some unexpected flaky tests, you can retry the continous integration pilepeline on CircleCI using the `Rerun workflow from failed` button: +If your pull request fails CI due to apparently unrelated problems, follow these steps: -![Rerun workflow from failed](how_to_test/rerun-workflow-from-failed.png) +1. check logs in gitlab. There could be some useful info, like clear evidence that test failed due to infrastructure problems +2. try to run the failed test locally. Usually in the gitlab logs there will be a gradle command that can be executed locally +3. simply restart the job couple of times, some of tests are flaky +4. ask for help in the dd-trace-java chat channel ## Running Tests @@ -74,12 +76,7 @@ To run tests on a different JVM than the one used for doing the build, you need The system tests are setup to run on continous integration as pull request check. If you would like to run them locally, you would have to grab [a local copy of the system tests](https://github.com/DataDog/system-tests), and run them from there. -You can make them use your development version of `dd-trace-java` by [dropping the built artifacts to the `/binaries` folder](https://github.com/DataDog/system-tests/blob/main/docs/execute/binaries.md#java-library) of your local copy of the system tests. - -If you would like to run another version of the system tests on continuous integration, or update them to the latest version, you would need to use [the update pinned system tests script](../.circleci/update_pinned_system_tests.sh) as your pull request won't use the latest `main` version from the system test repository, but a pinned version. - -> [!NOTE] -> The system tests version used for continous integration is defined using `default_system_tests_commit` in [CircleCI configuration](../.circleci/config.continue.yml.j2). +You can make them use your development version of `dd-trace-java` by [dropping the built artifacts to the `/binaries` folder](https://github.com/DataDog/system-tests/blob/main/docs/execute/binaries.md#java-library) of your local copy of the system tests. ### The APM test agent @@ -90,6 +87,6 @@ Trace Check results are returned within the `Get APM Test Agent Trace Check Resu Check [trace invariant checks](https://github.com/DataDog/dd-apm-test-agent#trace-invariant-checks) for more informations. The APM Test Agent also emits helpful logging, including logging received traces' headers, spans, errors encountered, -ands information on trace checks being performed. -Logs can be viewed in CircleCI within the Test-Agent container step for all instrumentation test suites, ie: `z_test_8_inst` job. +ands information on trace checks being performed. +Logs can be viewed in CI within the Test-Agent container step for all instrumentation test suites, ie: `z_test_8_inst` job. Read more about [the APM Test Agent](https://github.com/datadog/dd-apm-test-agent#readme). diff --git a/docs/how_to_test/rerun-workflow-from-failed.png b/docs/how_to_test/rerun-workflow-from-failed.png deleted file mode 100644 index 31013907d58762852d007f5adcacd83563102029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30577 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 KSc3|(Qkt<=d#S3vPb#;DcdsQ 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 NqM-S(T+TS?{{ar>Z4Lkc