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.
3613162bc0
Closes #105. References #155. mitogen/service.py: Refactor services to support individually exposed methods with different security policies for each method. - @mitogen.service.expose() to expose a method and set its policy - @mitogen.service.arg_spec() to validate input. - Require basic service message format to be a tuple of `(method, kwargs)`, where kwargs is always a dict. - Update DeduplicatingService to match the new scheme. ansible_mitogen/connection.py: - Rename 'method' to 'method_name' to disambiguate it from the service.call()'s method= argument. ansible_mitogen/planner.py: - Generate an ID for every job, sync or not, and fetch job results from JobResultService rather than via the initiating function call's return value. - Planner subclasses now get to select whether their Runner should run in a forked process. The base implementation requests this if the 'mitogen_isolation_mode=fork' task variable is present. ansible_mitogen/runner.py: Teach runners to deliver their result via JobResultService executing in their indirect parent mux process. ansible_mitogen/plugins/actions/mitogen_async_status.py: Split the implementation up into methods, and more compatibly emulate Ansible's existing output. ansible_mitogen/process.py: Mux processes now host JobResultService. ansible_mitogen/services.py: Update existing services to the new mitogen.service scheme, and implement JobResultService: * listen() method for synchronous jobs. planner.invoke() registers a Sender with the service prior to invoking the job, then sleeps waiting for the service to write the job result to the corresponding Receiver. * Non-blocking get() method for implementing mitogen_async_status action. * Child-accessible push() method for delivering task results. ansible_mitogen/target.py: New helpers for spawning a virginal subprocess on startup, from which asynchronous and mitogen_task_isolation=fork jobs are forked. Necessary to avoid a task inheriting potentially polluted/monkey-patched parent environment, since remaining jobs continue to run in the original child process. docs/ansible.rst: Add/merge/remove some behaviours/risks. tests/ansible/integration: New tests for forking/async. |
7 years ago | |
---|---|---|
.. | ||
ansible | 7 years ago | |
bench | 7 years ago | |
data | 7 years ago | |
soak | 7 years ago | |
README.md | 7 years ago | |
__init__.py | 7 years ago | |
build_docker_image.py | 7 years ago | |
call_error_test.py | 7 years ago | |
call_function_test.py | 7 years ago | |
channel_test.py | 7 years ago | |
fakessh_test.py | 7 years ago | |
first_stage_test.py | 7 years ago | |
fork_test.py | 7 years ago | |
id_allocation_test.py | 7 years ago | |
importer_test.py | 7 years ago | |
io_op_test.py | 7 years ago | |
latch_test.py | 7 years ago | |
local_test.py | 7 years ago | |
master_test.py | 7 years ago | |
module_finder_test.py | 7 years ago | |
nested_test.py | 7 years ago | |
parent_test.py | 7 years ago | |
receiver_test.py | 7 years ago | |
responder_test.py | 7 years ago | |
router_test.py | 7 years ago | |
select_test.py | 7 years ago | |
show_docker_hostname.py | 7 years ago | |
ssh_test.py | 7 years ago | |
testlib.py | 7 years ago | |
utils_test.py | 7 years ago |
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
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
- Get the code
git clone https://github.com/dw/mitogen.git
- Go into the working directory
cd mitogen
- Establish the docker image
./tests/build_docker_image.py
- Build the virtual environment
virtualenv ../venv
- Enable the virtual environment we just built
source ../venv/bin/activate
- Install Mitogen in pip editable mode
pip install -e .
- Run
test