
gittech. site
for different kinds of informations and explorations.
Fray: A controlled concurrency testing framework for the JVM
Fray: General-Purpose Concurrency Testing
Fray is a concurrency testing tool for Java that can help you find and debug tricky race conditions that manifest as assertion violations, run-time exceptions, or deadlocks. It performs controlled concurrency testing using state-of-the-art techniques such as probabilistic concurrency testing or partial order sampling. Fray also provides deterministic replay capabilities for debugging specific thread interleavings. Fray is designed to be easy to use and can be integrated into existing testing frameworks.
Quick Start
JUnit 5
If you are using JUnit 5, you can use the @ConcurrencyTest
annotation to mark a test as a concurrency test. You
also need to add the @ExtendWith(FrayTestExtension.class)
annotation to the test class.
import org.pastalab.fray.junit.junit5.FrayTestExtension;
import org.pastalab.fray.junit.junit5.annotations.ConcurrencyTest;
@ExtendWith(FrayTestExtension.class)
public class SimpleTest {
@ConcurrencyTest
public void concurrencyTest() {
... // some multithreaded code
assert(...);
}
}
Other Testing Frameworks
Fray can be used with other testing frameworks as well. You may use the FrayInTestLauncher
import org.pastalab.fray.junit.plain.FrayInTestLauncher;
public void test() {
FrayInTestLauncher.INSTANCE.launchFrayTest(() -> {
... // some multithreaded code
assert(...);
});
}
Gradle
To use Fray with Gradle, add the following plugin to your build.gradle
file:
plugins {
id("org.pastalab.fray.gradle") version "0.2.6"
}
Maven
- First please add Fray plugin to your project
<plugin>
<groupId>org.pastalab.fray.maven</groupId>
<artifactId>fray-plugins-maven</artifactId>
<version>0.2.6</version>
<executions>
<execution>
<id>prepare-fray</id>
<goals>
<goal>prepare-fray</goal>
</goals>
</execution>
</executions>
</plugin>
- Next, please add the
fray-junit
dependency
<dependency>
<groupId>org.pastalab.fray</groupId>
<artifactId>fray-junit</artifactId>
<version>0.2.6</version>
<scope>test</scope>
</dependency>
Documentation
Contributing
Contributions to Fray are both welcomed and appreciated! Please see our contributing guide for more information on how to contribute to Fray.
Acknowledgements
This material is based upon work supported by the National Science Foundation under Grant No. 2120955. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.
The Fray project was also supported by an Amazon Research Award.