Run lithops test to run an extensive inspection, which simulates your lithops installation on a variety of tests.
- Get all available options by running
lithops test --help. - Get all available test functions and their parent group by running
lithops test -t help. - Run all test instances named
<test name>, vialithops test -t <test name>. Run a test from a specific group by prefixing the test name with group name, e.g. :lithops test -t <test group>.<test name>. Run multiple tests by separating them with a comma, e.g.lithops test -t <test name1>,<test name2>. - To get all available groups, run
lithops test -g help. - Run a single group of tests via
lithops test -g <group name>. Run multiple tests by separating them with a comma, e.g.lithops test -g <test group1>,<test group2>. - To stop the test procedure upon first encountering a failed test, add the -f flag, e.g.
lithops test -f. - To remove datasets, uploaded during the test procedure, use the -r flag,
lithops test -r. WARNING - do not use this flag on a github workflow, due to race condition issues. - Get a complete list of the available flags by running
lithops test --help. - A summarizing example:
lithops test -t test_map,storage.test_cloudobject -g call_async -f.
Alternatively, you may run the tests via python3 -m lithops.tests.tests_main, followed by aforementioned flags.
Locate the matching test group in lithops/tests (indicated by file name) and add your test function appropriately:
* Add your test function as a method inside the class inheriting from unittest.testcase.
- Use existing util functions from
lithops/tests/util_funcor add new ones to that package. - A test that's simultaneously testing any two of the following functions: {async, map, map_reduce} will be placed in the proper file by complying with the following hierarchy: map_reduce > map > async.
Before adding a test function that aims to test an untested feature:
- Create a new file in
lithops/testsusing the template file as your guide:- Create a new copy of the template file and name it "test_feature_name", thus automatically creating a new test group named "feature_name".
- Figure out which rows are necessary for your new test group, by following documentation beside the rows, then, proceed to un-comment said rows.
- Continue to add the function by adhering to the instructions in the clause above.
Whether you're adding a new function, or a new test group you'd be better off knowing the available resources at your disposal:
lithops/tests/util_funccontains many functions, divided into categories, that you may find helpful.lithops/testscontains a template_file called "test_template" which contains documentation regarding each common resource/import that may interest you.- Many examples utilizing said resources may be found across the "test_*" files of
lithops/tests. - For a variety of evaluation functions ("assert*") belonging to unittest, browse this [documentation page](https://docs.python.org/3/library/unittest.html).
- Access the functions in your chosen backend storage class via "STORAGE", e.g. STORAGE.put_object.
- Access your bucket via STORAGE_CONFIG['bucket'].
- Pass on "CONFIG" to your function executor instance, to allow your test function to work with users that provided a path to the config file via a flag, e.g. fexec = lithops.FunctionExecutor(config=CONFIG).