Jinx and Load and Stress Testing Tools
Stress testing attempts to push the boundaries of inputs and system resources for an application in order to find its breaking point. Stress tests may consume a significant amount of system memory in order to ascertain how the application performs in circumstances where available memory is limited. It may flood a machine with unrelated network traffic to determine if the application is still responsive. It may attempt to inflict a denial of service attach on the system to find out whether or not the application can still serve requests to its clients. Ultimately, the goal of stress testing is to exhaustively exercise the inputs and surrounding environment of an application to determine if it can survive when faced with severely limited computational resources.
Similarly, load testing attempts to push the boundaries of the application itself. Load tests may flood an application with an extraordinary number of requests to determine whether or not it can scale to handle those requests. The success or failure of the application to handle these requests is recorded and any failures are logged as bugs.
While the application is being exercised by stress and load tests, Jinx can simulate numerous different timings of thread interleavings in an effort to uncover concurrency errors. Therefore, Jinx actually amplifies the effects of stress testing. If Jinx encounters a particular thread timing that will result in a concurrency error, it makes it happen on the machine and pinpoints the cause.
Stress and load tests are directed at an application executable. Enabling Jinx to run under this application executable is easy. If the name of the application is “application_name”, then a command of “jinx run application_name” will activate Jinx and run the program.