A load testsuite for Argus based on Grinder
This load test suite provides two tests:
-
Authorize test
Each run execute three authorize request: the first expects Permit as response value, the second one expects Deny, the last expects Not Applicable.
-
Concurrent test
Every thread of each process, execute the same request in every run. Before send the request, threads wait on a barrier, with the purpose of verify the correct user mapping.
For configuring load test, edit the file test.properties. Basically you need to specify:
- user certificate path (public and private key);
- one or more PEPD endpoints;
- a resource id
- a permit range, a deny range and a not applicable range
- an action id
- which test you want run
Values specified in the properties file must be coherent with the policies loaded in the Argus deployment. An example for load some policy is provided within this testsuite in bin/setup_argus.sh shell script.
For run the load testsuite, on the client host must be installed:
- Java Virtual Machine
- The Grinder
- Argus Java API
First, install dependencies:
# yum install java-1.8.0-openjdk argus-pep-api-java argus-pep-common
Before run the test, create a proxy certificate. For example:
$ voms-proxy-init --voms test.vo --cert user_cert/test0.cert.pem --key user_cert/test0.key.pem
Export an environment variable with the proxy location:
$ export X509_USER_PROXY=/tmp/x509up_u`id -u`
Then execute the load test, running the shell script:
$ ./run.sh
This testsuite provides a Docker image for run the load tests. All the needed files are located in docker folder. First, build the new image:
$ ./build-image.sh
This shell script creates a new docker image, named italiangrid/argus-load-testsuite in the local image repository. Then run the container:
$ docker run italiangrid/argus-load-testsuite:latest
The last command launch a container that run load-testsuite with default setup. For customize the execution, provide to Docker the properties file with the -v option and the proper environment variables with -e option. For example:
$ docker run -v ~/test.properties:/tmp/test.properties -e REPO_BRANCH="feature/ISSUE-1" -e PROCESS=1 -e THREADS=1 -e RUNS=1 -e TEST_PROP_FILE=/tmp/test.properties italiangrid/argus-load-testsuite:latest
When customize the properties file, pay attention to grinder.script option. Remember that load-testsuite is located in /home/tester/load-testsuite, so the use of absolute path is recommended.
Variable | Default | Meaning |
---|---|---|
REPO_BRANCH | master | Git branch to checkout |
PROCESS | 10 | Number of process to run |
THREADS | 10 | Number of thread for each process |
RUNS | 100 | How many times iterate the test |
TEST_PROP_FILE | argus/pepd/test.properties | Test properties file |
USE_CONSOLE | false | Use Grinder console for manage load test |
CONSOLE_HOST | localhost | Hostname where Grinder console is running |
PROXY_VO | test.vo | VO used for generate proxy certificate |
USER_CERT | /home/tester/.globus/usercert.pem | User public key path |
USER_KEY | /home/tester/.globus/userkey.pem | User private key path |