Docker Test Harness for Minetest Mods 🔗
Overview 🔗
This mod provides an automated testing framework for Minetest mods by simulating player behavior on a Minetest server. It allows developers to create, register, and run tests to ensure the correct behavior of their mods in various scenarios.
Features 🔗
- Test Registration: Easily register custom tests for your mod.
- Player Behavior Simulation: Simulate player actions for automatic testing.
- Modular Structure: Each test is associated with a specific mod and can be customized.
- Area and Node Manipulation: Test areas can be defined, and node checks can be performed.
- Test Context and State Management: Manage and track the progress of tests across multiple mods.
Prerequisite 🔗
The tests are run using Docker or Podman. Therefore you'll need to have either one of them installed.
It also uses bash, jq and the gnu version of mktemp (found in the coreutils package for Alpine).
For automated testing, the mod is testing itself, so this repository shows an example of configuration
for the Gitlab CI. The main point being to have runners able to run docker pipelines and do docker in docker.
Usage 🔗
This mod's goal is to provide a test framework for implementing tests for minetest mods.
-
Declare
test_harnessas an optional dependencies for your mod -
Copy the
.utilfolder in your project -
Copy the
.util/.mod_env.json.tmplto.mod_env.jsonat the root of your folder. -
Adapt its content. Do not remove the test_harness dependency definition.
-
The list of mods to test can be set in the
additional_modskey. This list will be added tocurrent_mod, if you add some mods, the list must start with a comma. -
Customize the minetest server configuration by adding configuration values in the
minetest_add_confvalue. This must be a single string, with line returns if necessary. -
You can add some file to the server's container with the
additional_filesvalue. This is an array of object having the"path"and"content"keys. If the content is injsonthen it is directly added as is in the resulting file. -
If necessary, customize the
.util/Dockerfileif the previous means are not sufficients. -
In your source files (in the
init.luafor example) add the following lines (or equivalent)if minetest.settings:get_bool("test_harness_run_tests", false) then dofile(minetest.get_modpath("my_mod").. "/test/init.lua") end
-
In your test file(s), get an instance of the method allowing the registration of your tests:
local register_test = test_harness.get_test_registrator("my_mod", my_mod.version_string)
-
Register the test by calling
register_test -
Run the test by lauching the
run_tests.shscript. For example with Podman$ .util/run_tests.sh --podman -c 1
See the available options with
.util/run_tests.sh --help
Sources 🔗
- The base pf the code comes from the WorldEdit mod project : https://github.com/Uberi/Minetest-WorldEdit.
- The client's Dockerfile has been adapted from
Miney-pi(https://github.com/miney-py/minetest-client-docker) - The color management code comes from
lua-chroma: https://github.com/ldrumm/lua-chroma
License 🔗
Licensed under the AGPL (Affero General Public License).
Funding 🔗
This mod is published with funding from the NLNet Foundation.