Skip to content

RedisLabsModules/RLTest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

license PyPI version CI Version Codecov Known Vulnerabilities

RLTest

Redis Labs Test Framework, allow running tests on redis and modules on a variety of environments.

Supported Environment: oss, oss-cluster, enterprise, enterprise-cluster

The framework allow you to write a test without environment specification and then run the test on all supported environment.

Install

$ pip install git+https://github.com/RedisLabsModules/RLTest.git@master 

Usage:

$ RLTest --help usage: RLTest [-h] [--version] [--module MODULE] [--module-args MODULE_ARGS] [--env {oss,oss-cluster,enterprise,enterprise-cluster,existing-env,cluster_existing-env}] [--existing-env-addr EXISTING_ENV_ADDR] [--shards_ports SHARDS_PORTS] [--cluster_address CLUSTER_ADDRESS] [--oss_password OSS_PASSWORD] [--cluster_credentials CLUSTER_CREDENTIALS] [--cluster_node_timeout CLUSTER_NODE_TIMEOUT] [--internal_password INTERNAL_PASSWORD] [--oss-redis-path OSS_REDIS_PATH] [--enterprise-redis-path ENTERPRISE_REDIS_PATH] [--stop-on-failure] [-x] [--verbose] [--debug] [-t TEST] [--env-only] [--clear-logs] [--log-dir LOG_DIR] [--use-slaves] [--shards-count SHARDS_COUNT] [--download-enterprise-binaries] [--proxy-binary-path PROXY_BINARY_PATH] [--enterprise-lib-path ENTERPRISE_LIB_PATH] [-r] [--use-aof] [--use-rdb-preamble] [--debug-print] [-V] [--vg-suppressions VG_SUPPRESSIONS] [--vg-options VG_OPTIONS] [--vg-no-leakcheck] [--vg-verbose] [--vg-no-fail-on-errors] [-i] [--debugger DEBUGGER] [-s] [--check-exitcode] [--unix] [--randomize-ports] [--collect-only] [--tls] [--tls-cert-file TLS_CERT_FILE] [--tls-key-file TLS_KEY_FILE] [--tls-ca-cert-file TLS_CA_CERT_FILE] Test Framework for redis and redis module optional arguments: -h, --help show this help message and exit --version Print RLTest version and exit (default: False) --module MODULE path to the module file. You can use `--module` more than once but it imples that you explicitly specify `--module-args` as well. Notice that on enterprise the file should be a zip file packed with [RAMP](https://github.com/RedisLabs/RAMP). (default: None) --module-args MODULE_ARGS arguments to give to the module on loading (default: None) --env {oss,oss-cluster,enterprise,enterprise-cluster,existing-env,cluster_existing-env}, -e {oss,oss-cluster,enterprise,enterprise-cluster,existing-env,cluster_existing-env} env on which to run the test (default: oss) --existing-env-addr EXISTING_ENV_ADDR Address of existing env, relevent only when running with existing-env, cluster_existing-env (default: localhost:6379) --shards_ports SHARDS_PORTS list of ports, the shards are listening to, relevent only when running with cluster_existing-env (default: None) --cluster_address CLUSTER_ADDRESS enterprise cluster ip, relevent only when running with cluster_existing-env (default: None) --oss_password OSS_PASSWORD set redis password, relevant for oss and oss-cluster environment (default: None) --cluster_credentials CLUSTER_CREDENTIALS enterprise cluster cluster_credentials "username:password", relevent only when running with cluster_existing-env (default: None) --cluster_node_timeout CLUSTER_NODE_TIMEOUT cluster node timeout in milliseconds --internal_password INTERNAL_PASSWORD Give an ability to execute commands on shards directly, relevent only when running with cluster_existing-env (default: ) --oss-redis-path OSS_REDIS_PATH path to the oss redis binary (default: redis-server) --enterprise-redis-path ENTERPRISE_REDIS_PATH path to the enterprise redis binary (default: ~/.RLTest/opt/redislabs/bin/redis-server) --redis-config-file REDIS_CONFIG_FILE path to the redis configuration file (default: None) --stop-on-failure stop running on failure (default: False) -x, --exit-on-failure Stop test execution and exit on first assertion failure (default: False) --verbose, -v print more information about the test (default: 0) --debug stop before each test allow gdb attachment (default: False) -t TEST, --test TEST Specify test to run, in the form of "file:test" (default: None) --env-only start the env but do not run any tests (default: False) --clear-logs deleting the log direcotry before the execution (default: False) --log-dir LOG_DIR directory to write logs to (default: ./logs) --use-slaves run env with slaves enabled (default: False) --shards-count SHARDS_COUNT Number shards in bdb (default: 1) --download-enterprise-binaries run env with slaves enabled (default: False) --proxy-binary-path PROXY_BINARY_PATH dmc proxy binary path (default: ~/.RLTest/opt/redislabs/bin/dmcproxy) --enterprise-lib-path ENTERPRISE_LIB_PATH path of needed libraries to run enterprise binaries (default: ~/.RLTest/opt/redislabs/lib/) -r, --env-reuse reuse exists env, this feature is based on best efforts, if the env can not be reused then it will be taken down. (default: False) --use-aof use aof instead of rdb (default: False) --use-rdb-preamble use rdb preamble when rewriting aof file (default: True) --debug-print print debug messages (default: False) -V, --vg, --use-valgrind running redis under valgrind (assuming valgrind is install on the machine) (default: False) --vg-suppressions VG_SUPPRESSIONS path valgrind suppressions file (default: None) --vg-options VG_OPTIONS valgrind [options] (default: None) --vg-no-leakcheck Don't perform a leak check (default: False) --vg-verbose Don't log valgrind output. Output to screen directly (default: False) --vg-no-fail-on-errors Dont Fail test when valgrind reported any errors in the run.By default on RLTest the return value from Valgrind will be used to fail the tests.Use this option when you wish to dry-run valgrind but not fail the test on valgrind reported errors. (default: False) -i, --interactive-debugger runs the redis on a debuger (gdb/lldb) interactivly.debugger interactive mode is only possible on a single process and so unsupported on cluste or with slaves.it is also not possible to use valgrind on interactive mode.interactive mode direcly applies: --no-output-catch and --stop-on-failure.it is also implies that only one test will be run (if --env- only was not specify), an error will be raise otherwise. (default: False) --debugger DEBUGGER Run specified command line as the debugger (default: None) -s, --no-output-catch all output will be written to the stdout, no log files. (default: False) --check-exitcode Check redis process exit code (default: False) --unix Use Unix domain sockets instead of TCP (default: False) --randomize-ports Randomize Redis listening port assignment rather than using default port (default: False) --collect-only Collect the tests and exit (default: False) --tls Enable TLS Support and disable the non-TLS port completely. TLS connections will be available at the default non-TLS ports. (default: False) --tls-cert-file TLS_CERT_FILE /path/to/redis.crt (default: None) --tls-key-file TLS_KEY_FILE /path/to/redis.key (default: None) --tls-ca-cert-file TLS_CA_CERT_FILE /path/to/ca.crt (default: None) --dualTLS Initialize both TLS and non-TLS ports for all shards. The non-TLS ports will be the TLS ports + 1500. Only effective when TLS is active (see `useTLS`). 

Sample usages

Multiple modules

RLTest --module modules/module1.so --module-args '' --module modules/module2.so --module-args '' 

Configuration File

By default, the framework search for configuration file on the current directory. The configuration file name is: config.txt. It is possible to specify different configuration file on command line using the '@' prefix, for example:

RLTest @myConfig.txt # search for myConfig.txt configuration file 

The configuration file format is the same as the command line argument, i.e : '--< param_name > < param_val >'.

It is also possible to comment a specific lines in the configuration file using '#'.

Example:

-vv --clear-logs #--debug 

Test Example

from RLTest import Env import time class testExample(): '''  run all tests on a single env without taking  env down between tests  ''' def __init__(self): self.env = Env() def testExample(self): con = self.env.getConnection() con.set('x', 1) self.env.assertEqual(con.get('x'), '1') def testExample1(self): con = self.env.getConnection() con.set('x', 1) self.env.assertEqual(con.get('x'), '1') self.env.assertFalse(True) # check failure def testExample2(self): con = self.env.getConnection() con.set('x', 1) self.env.assertEqual(con.get('x'), '1') # run each test on different env def test_example(): env = Env() con = env.getConnection() con.set('x', 1) env.assertEqual(con.get('x'), '1') def test_example_2(): env = Env() env.assertOk(env.cmd('set', 'x', '1')) env.expect('get', 'x').equal('1') env.expect('lpush', 'list', '1', '2', '3').equal(3) env.expect('lrange', 'list', '0', '-1').debugPrint().contains('1') env.debugPrint('this is some debug printing') def test_example_3(): env = Env(useSlaves=True, env='oss') con = env.getConnection() con.set('x', 1) con2 = env.getSlaveConnection() time.sleep(0.1) env.assertEqual(con2.get('x'), '1')

About

Redis Labs Test Framework

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 18