You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitogen/tests
Alex Willmer 83c5ab1900 mitogen: Send first stage parameters as argv (796 bytes -> 822)
Benefit: The base64 lump is now static for a given Mitogen version, and the
variable parts are more visible. This will make debugging, auditting, and
allow-listing a bit easier.
Potential benefit: generate the base64 once, at build time or startup. Rather
than once per connection.
Cost: Bootstrap command is 26 bytes longer.

```
➜  mitogen git:(boot-cmd--argv) ✗ ./preamble_size.py
SSH command size: 822
Preamble (mitogen.core + econtext) size: 18230 (17.80KiB)

                        Original           Minimized           Compressed
mitogen.core         152237 148.7KiB  68453 66.8KiB 45.0%  18130 17.7KiB 11.9%
mitogen.parent        98746  96.4KiB  51215 50.0KiB 51.9%  12922 12.6KiB 13.1%
mitogen.fork           8445   8.2KiB   4139  4.0KiB 49.0%   1652  1.6KiB 19.6%
mitogen.ssh           10847  10.6KiB   6913  6.8KiB 63.7%   2102  2.1KiB 19.4%
mitogen.sudo          12089  11.8KiB   5924  5.8KiB 49.0%   2249  2.2KiB 18.6%
mitogen.select        12325  12.0KiB   2929  2.9KiB 23.8%    964  0.9KiB  7.8%
mitogen.service       41581  40.6KiB  22398 21.9KiB 53.9%   5847  5.7KiB 14.1%
mitogen.fakessh       15753  15.4KiB   8135  7.9KiB 51.6%   2672  2.6KiB 17.0%
mitogen.master        52891  51.7KiB  27586 26.9KiB 52.2%   7129  7.0KiB 13.5%
```
3 months ago
..
ansible Python 3.14 support 4 months ago
bench Python 3.14 support 4 months ago
data tests: Count bytes written in stdio_test.StdIOTest 5 months ago
image_prep ci: Set global max failed logins on macOS 4 months ago
soak
README.md ci: Reduce number of Jobs by parameterizing Mitogen Docker SSH tests 1 year ago
__init__.py
blocking_test.py mitogen: Fix BlockingIOError & EAGAIN in subprocess stdio 6 months ago
broker_test.py
buildah_test.py
call_error_test.py
call_function_test.py
channel_test.py
connection_test.py
constraints.txt
context_test.py Cleanup unused and missing imports 3 months ago
create_child_test.py mitogen: Fix BlockingIOError & EAGAIN in subprocess stdio 6 months ago
doas_test.py
docker_test.py
error_test.py
fakessh_test.py ci: Reduce number of Jobs by parameterizing Mitogen Docker SSH tests 1 year ago
file_service_test.py
first_stage_test.py mitogen: Send first stage parameters as argv (796 bytes -> 822) 3 months ago
fork_test.py
id_allocation_test.py
importer_test.py
imports_test.py mitogen: Refactor scan_code_imports() as mitogen.imports.codeobj_imports() 5 months ago
io_op_test.py
iter_split_test.py
jail_test.py
kubectl_test.py
latch_test.py
local_test.py
log_handler_test.py tests: Add a test case that verifies behavior when the log record factory is modified 3 months ago
lxc_test.py
lxd_test.py
message_test.py
minify_test.py
mitogen_protocol_test.py
module_finder_test.py
nested_test.py
os_fork_test.py
parent_test.py
pipe_test.py mitogen: Fix BlockingIOError & EAGAIN in subprocess stdio 6 months ago
podman_test.py
policy_function_test.py
poller_test.py Cleanup unused and missing imports 3 months ago
polyfill_functions_test.py
push_file_service_test.py
reaper_test.py
receiver_test.py
requirements-tox.txt
requirements.txt tests: Bump dependency versions 4 months ago
responder_test.py
router_test.py
select_test.py
service_test.py
setns_test.py
signals_test.py
socketpair_test.py mitogen: Fix BlockingIOError & EAGAIN in subprocess stdio 6 months ago
ssh_test.py ci: Reduce number of Jobs by parameterizing Mitogen Docker SSH tests 1 year ago
stdio_test.py tests: Check stdio is blocking in sudo contexts 5 months ago
su_test.py ci: Reduce number of Jobs by parameterizing Mitogen Docker SSH tests 1 year ago
sudo_test.py
testlib.py tests: Add a test case that verifies behavior when the log record factory is modified 3 months ago
timer_test.py
two_three_compat_test.py CI: Upgrade Github jobs from Ubuntu 20.04 to 22.04 & 24.04 9 months ago
types_test.py
unix_test.py
utils_test.py

README.md

Warning

This directory is full of disorganized crap, including random hacks I checked in that I'd like to turn into tests. The effort to write tests only really started in September 2017. Pull requests in this area are very welcome!

Running The Tests

Build Status

Your computer should have an Internet connection, and the docker command line tool should be able to connect to a working Docker daemon (localhost or elsewhere for OS X etc.) that can run new images.

The IP address of the Docker daemon must allow exposing ports from running containers, e.g. it should not be firewalled or port forwarded.

If in doubt, just install Docker on a Linux box in the default configuration and run the tests there.

Steps To Prepare Development Environment

  1. Get the code git clone https://github.com/dw/mitogen.git
  2. Go into the working directory cd mitogen
  3. Establish the docker image ./tests/build_docker_image.py
  4. Build the virtual environment virtualenv ../venv
  5. Enable the virtual environment we just built source ../venv/bin/activate
  6. Install Mitogen in pip editable mode pip install -e .
  7. Run test

Selecting target distributions

Linux container images for testing are available at

The images used are determined by two environment variables

  • MITOGEN_TEST_DISTRO_SPECS
  • MITOGEN_TEST_IMAGE_TEMPLATE

Defaults for these can be found in .ci/ci_lib.py & tests/testlib.py

User Accounts

A set of standard user account names are used by in the Docker container and also by Ansible's osx_setup.yml.

root In the Docker image only, the password is "rootpassword".

mitogen__has_sudo The login password is "has_sudo_password" and the account is capable of sudoing to root, by supplying the account password to sudo.

mitogen__has_sudo_pubkey The login password is "has_sudo_pubkey_password". Additionally tests/data/docker/mitogen__has_sudo_pubkey.key SSH key may be used to log in. It can sudo the same as mitogen__has_sudo.

mitogen__has_sudo_nopw The login password is "has_sudo_nopw_password". It can sudo to root without supplying a password. It has explicit sudoers rules forcing it to require a password for other accounts.

mitogen__pw_required The login password is "pw_required_password". When "sudo -u" is used to target this account, its password must be entered rather than the login user's password.

mitogen__require_tty The login password is "require_tty_password". When "sudo -u" is used to target this account, the parent session requires a TTY.

mitogen__require_tty_pw_required The login password is "require_tty_pw_required_password". When "sudo -u" is used to target this account, the parent session requires a TTY and the account password must be entered.

mitogen__user1 .. mitogen__user5 These accounts do not have passwords set. They exist to test the Ansible interpreter recycling logic.

mitogen__sudo1 .. mitogen__sudo4 May passwordless sudo to any account.

mitogen__webapp A plain old account with no sudo access, used as the target for fakessh tests.

Ansible Integration Test Environment

The integration tests expect to be run against a either one of the Docker images, or a similar target with the same set of UNIX accounts and sudo rules.

The login account should be able to sudo to root witout a password.