Commit Graph

143 Commits

Author SHA1 Message Date
David Wilson faaac43a78 Disable SSH variables test on vanilla Ansible. 2018-05-12 00:51:50 +01:00
David Wilson 68d6e6bf34 ansible: tests for all SSH variables.
Closes #184.
2018-05-12 00:51:50 +01:00
David Wilson 2ad0d0521d ansible: reload /etc/resolv.conf for each task.
The OpenShift installer modifies /etc/resolv.conf then tests the new
resolver configuration, however, there was no mechanism to reload
resolv.conf in our reuseable interpreter.

https://github.com/openshift/openshift-ansible/blob/release-3.9/roles/openshift_web_console/tasks/install.yml#L137

This inserts an explicit call to res_init() for every new style
invocation, with an approximate cost of ~1usec on Linux since glibc
verifies resolv.conf has changed before reloading it.

There is little to be done for users of the thread-safe resolver APIs,
their state is hidden from us. If bugs like that manifest, whack-a-mole
style 'del sys.modules[thatmod]' patches may suffice.
2018-05-07 23:14:27 +01:00
David Wilson 60781ecab6 tests: fix test for vanilla Ansible. 2018-05-06 09:03:14 +01:00
David Wilson eb56a8f98d tests: add debug 2018-05-06 08:51:13 +01:00
David Wilson 267f787d20 issue #217: tests: import (unused) module_utils tests. 2018-05-05 04:00:21 +01:00
David Wilson ee741da2b3 tests: reenable remaining Ansible tests. 2018-05-04 23:51:01 +01:00
David Wilson be5c03c152 tests: many test fixes. Travis broken for >1 week. 2018-05-04 20:28:05 +01:00
David Wilson b20174729d issue #199: fix readonly_homedir test. 2018-05-04 17:43:06 +01:00
David Wilson 6109de51a0 tests: Ansible SSH timeout test
Also change Docker image to new 'mitogen' organization.
2018-05-03 18:19:40 +01:00
David Wilson b7fe0e09f4 tests: su integration test. 2018-05-02 06:28:10 +01:00
David Wilson 3203846708 issue #239: ansible: ignore remote_tmp in new style runner. 2018-05-01 14:06:09 +01:00
David Wilson 962ba862e9 tests: use test-targets group, not all group 2018-04-22 19:40:58 +01:00
David Wilson 8c3b1fcf15 ansible: disable script interpreter processing for new-style
Re: #199
2018-04-21 20:59:36 +01:00
David Wilson 2f02b5c0b1 ansible: prevent Unicode strings leaking into sys.argv
The module name comes from YAML via Jinja2.. it's always Unicode. Mixing
it into a temporary directory name produces a Unicode tempdir name,
which ends up in sys.argv via TemporaryArgv.
2018-04-21 20:26:53 +01:00
David Wilson dc4433ace6 issue #202: ansible: forget all dependent contexts on Stream disconnect
This is a partial fix, there are still at least 2 cases needing covered:

- In-progress connections must have CallError or similar sent to any
  waiters
- Once connection delegation exists, it is possible for other worker
  processes to be active (and in any step in the process), trying to
  communicate with a context that we know can no longer be communicated
  with. The solution to that isn't clear yet.

Additionally ensure root has /bin/bash shell in both Docker images.
2018-04-21 19:04:19 +01:00
David Wilson e7831a801f issue #195: handle non-ASCII scripts in runner.py. 2018-04-20 20:47:07 +01:00
David Wilson 85e1f5f515 ansible: remove JobResultService, more compatible async jobs; closes #191.
And by "compatible" I mean "terrible". This does not implement async job
timeouts, but I'm not going to bother, upstream async implementation is
so buggy and inconsistent it resists even having its behaviour captured
in tests.
2018-04-20 17:02:48 +01:00
David Wilson 6ad18b6719 issue #191: move async tests to their own category 2018-04-19 22:12:18 +01:00
David Wilson ce260933d9 tests: consistent play naming everywhere 2018-04-18 15:43:54 +01:00
David Wilson 0046a3de0b tests: insert debug print for travis :( 2018-04-17 16:05:56 +01:00
David Wilson ef47347cdf tests: raft of fixes for vanilla Ansible 2018-04-17 14:58:33 +00:00
David Wilson 2c3d2db4ec tests: fix output checks for Linux 2018-04-17 14:03:05 +00:00
David Wilson ed915b6e63 tests: magic mitogen_shutdown_all action
LRU tests break when run as part of the whole suite rather than
individually, because LRU stuff is already happening for earlier tests.
2018-04-17 12:42:53 +01:00
David Wilson ba8022424b tests: more work to standardize user accounts. 2018-04-16 18:35:13 +01:00
David Wilson 63e2ec6406 tests: expanduser lookup runs locally 2018-04-16 15:55:41 +01:00
David Wilson 472610805f tests: fix remote_tmp test on 2.5.x. 2018-04-16 15:48:20 +01:00
David Wilson 9f94fb78c8 issue #159: make LRU size configurable. 2018-04-13 15:16:54 +01:00
David Wilson 6394226722 issue #159: verify no more than 20 tasks exist on the remote 2018-04-12 12:37:31 +01:00
David Wilson 633cd888a0 issue #182: test for previous commit. 2018-04-12 12:24:00 +01:00
David Wilson 0c803141a7 tests: fix filename. 2018-04-10 01:10:26 +01:00
David Wilson 98ee3e177a ansible: tests for sudo behaviour; closes #143. 2018-04-09 15:04:40 +01:00
David Wilson 3613162bc0 ansible: enable forking when requested and for async jobs.
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.
2018-04-09 00:03:09 +01:00
David Wilson b9d4ec57b3 issue #164: some more ActionMixin tests. 2018-04-05 19:36:08 +01:00
David Wilson db894478f8 issue #164: make become_flags work without FOO=2 env var. 2018-04-05 17:42:43 +01:00
David Wilson d068a36c1e issue #164: more dir layout contortions.
all.yml slurps in tests from each file/subdir in the CWD.
2018-04-05 17:32:56 +01:00
David Wilson 680dc1bf68 issue #164: basic connection loader tests. 2018-04-05 17:27:42 +01:00
David Wilson 6aeb4e9f05 issue #164: precisely emulate Ansible's stdio behaviour.
* Use identical logic to select when stdout/stderr are merged, so
  'stdout', 'stdout_lines', 'stderr', 'stderr_lines' contain the same
  output before/after the extension.

* When stdout/stderr are merged, synthesize carriage returns just like
  the TTY layer.

* Mimic the SSH connection multiplexing message on stderr. Not really
  for user code, but so compare_output_test.sh needs fewer fixups.
2018-04-05 01:16:34 +01:00
David Wilson c5ca2e87ea issue #164: stop tests on first failure 2018-04-05 00:11:29 +01:00
David Wilson 26cc0f2724 issue #164: fix remote_tmp handling on <2.5 2018-04-04 20:19:46 +01:00
David Wilson 3ebe600389 issue #164: convert "examples" into actual tests
- Add new Travis mode, "ansible_tests.sh" that runs
  integrations/all.yml. Slowly build this up over time to cover more of
  the existing junk.

- Add basic assertions on the output of the existing runner__* files.

- Wire up 2.4.3/2.5.0 jobs in Travis.
2018-04-04 20:01:23 +01:00
David Wilson ae75a0ca8c issue #164: rearrange playbooks a little more 2018-04-04 16:11:19 +01:00
David Wilson 49aa8834b0 issue #164: split "examples" out into regression/integration tests. 2018-04-04 15:59:29 +01:00