From 2a5e917e9b072535a48a58b69a318925eec85e08 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 13 Apr 2021 07:00:22 +0100 Subject: [PATCH] Name things once https://www.youtube.com/watch?v=1__lNTlj1_w --- .pre-commit-config.yaml | 2 +- .pylint-spelling-words | 16 +--- changelog/50.breaking.rst | 1 + .../{factories/base.rst => bases.rst} | 5 +- docs/ref/saltfactories/cli/call.rst | 9 +++ docs/ref/saltfactories/cli/cloud.rst | 9 +++ .../saltfactories/{factories => }/cli/cp.rst | 6 +- .../saltfactories/{factories => }/cli/key.rst | 6 +- .../saltfactories/{factories => }/cli/run.rst | 6 +- .../{factories => }/cli/salt.rst | 6 +- .../saltfactories/{factories => }/cli/spm.rst | 6 +- .../saltfactories/{factories => }/cli/ssh.rst | 6 +- .../{factories/cli => }/client.rst | 6 +- docs/ref/saltfactories/daemons/api.rst | 8 ++ docs/ref/saltfactories/daemons/container.rst | 9 +++ docs/ref/saltfactories/daemons/master.rst | 9 +++ docs/ref/saltfactories/daemons/minion.rst | 9 +++ docs/ref/saltfactories/daemons/proxy.rst | 9 +++ .../{factories => }/daemons/sshd.rst | 5 +- docs/ref/saltfactories/factories/cli/call.rst | 5 -- .../ref/saltfactories/factories/cli/cloud.rst | 5 -- .../saltfactories/factories/daemons/api.rst | 5 -- .../factories/daemons/container.rst | 5 -- .../factories/daemons/master.rst | 5 -- .../factories/daemons/minion.rst | 5 -- .../saltfactories/factories/daemons/proxy.rst | 5 -- docs/ref/saltfactories/factories/index.rst | 39 --------- docs/ref/saltfactories/factories/manager.rst | 5 -- docs/ref/saltfactories/index.rst | 37 ++++++++- docs/ref/saltfactories/manager.rst | 9 +++ setup.cfg | 4 +- src/saltfactories/{cli.py => __main__.py} | 0 .../{factories/base.py => bases.py} | 65 +++++++-------- .../{factories => }/cli/__init__.py | 1 - src/saltfactories/{factories => }/cli/call.py | 7 +- .../{factories => }/cli/cloud.py | 9 +-- src/saltfactories/{factories => }/cli/cp.py | 7 +- src/saltfactories/{factories => }/cli/key.py | 7 +- src/saltfactories/{factories => }/cli/run.py | 7 +- src/saltfactories/{factories => }/cli/salt.py | 7 +- src/saltfactories/{factories => }/cli/spm.py | 7 +- src/saltfactories/{factories => }/cli/ssh.py | 7 +- .../{factories/cli => }/client.py | 6 +- .../{factories => }/daemons/__init__.py | 0 .../{factories => }/daemons/api.py | 7 +- .../{factories => }/daemons/container.py | 79 +++++++++++++----- .../{factories => }/daemons/master.py | 38 +++++---- .../{factories => }/daemons/minion.py | 11 +-- .../{factories => }/daemons/proxy.py | 17 ++-- .../{factories => }/daemons/sshd.py | 7 +- .../{factories => }/daemons/syndic.py | 7 +- src/saltfactories/factories/__init__.py | 0 src/saltfactories/{factories => }/manager.py | 80 +++++++++---------- src/saltfactories/plugin.py | 74 ----------------- src/saltfactories/plugins/__init__.py | 72 +++++++++++++++++ src/saltfactories/plugins/factories.py | 2 +- .../factories/base/test_daemon_factory.py | 20 ++--- .../factories/base/test_process_factory.py | 16 ++-- .../base/test_salt_daemon_factory.py | 4 +- tests/functional/test_cli.py | 21 ++++- .../container/test_container_factory.py | 4 +- .../factories/base/test_salt_cli_factory.py | 62 +++++--------- .../base/test_salt_daemon_factory.py | 14 ++-- tests/unit/factories/cli/test_salt.py | 8 +- tests/unit/factories/daemons/test_api.py | 6 +- .../unit/factories/daemons/test_container.py | 10 +-- 66 files changed, 492 insertions(+), 459 deletions(-) create mode 100644 changelog/50.breaking.rst rename docs/ref/saltfactories/{factories/base.rst => bases.rst} (55%) create mode 100644 docs/ref/saltfactories/cli/call.rst create mode 100644 docs/ref/saltfactories/cli/cloud.rst rename docs/ref/saltfactories/{factories => }/cli/cp.rst (51%) rename docs/ref/saltfactories/{factories => }/cli/key.rst (50%) rename docs/ref/saltfactories/{factories => }/cli/run.rst (50%) rename docs/ref/saltfactories/{factories => }/cli/salt.rst (54%) rename docs/ref/saltfactories/{factories => }/cli/spm.rst (55%) rename docs/ref/saltfactories/{factories => }/cli/ssh.rst (50%) rename docs/ref/saltfactories/{factories/cli => }/client.rst (50%) create mode 100644 docs/ref/saltfactories/daemons/api.rst create mode 100644 docs/ref/saltfactories/daemons/container.rst create mode 100644 docs/ref/saltfactories/daemons/master.rst create mode 100644 docs/ref/saltfactories/daemons/minion.rst create mode 100644 docs/ref/saltfactories/daemons/proxy.rst rename docs/ref/saltfactories/{factories => }/daemons/sshd.rst (53%) delete mode 100644 docs/ref/saltfactories/factories/cli/call.rst delete mode 100644 docs/ref/saltfactories/factories/cli/cloud.rst delete mode 100644 docs/ref/saltfactories/factories/daemons/api.rst delete mode 100644 docs/ref/saltfactories/factories/daemons/container.rst delete mode 100644 docs/ref/saltfactories/factories/daemons/master.rst delete mode 100644 docs/ref/saltfactories/factories/daemons/minion.rst delete mode 100644 docs/ref/saltfactories/factories/daemons/proxy.rst delete mode 100644 docs/ref/saltfactories/factories/index.rst delete mode 100644 docs/ref/saltfactories/factories/manager.rst create mode 100644 docs/ref/saltfactories/manager.rst rename src/saltfactories/{cli.py => __main__.py} (100%) rename src/saltfactories/{factories/base.py => bases.py} (96%) rename src/saltfactories/{factories => }/cli/__init__.py (88%) rename src/saltfactories/{factories => }/cli/call.py (75%) rename src/saltfactories/{factories => }/cli/cloud.py (94%) rename src/saltfactories/{factories => }/cli/cp.py (75%) rename src/saltfactories/{factories => }/cli/key.py (88%) rename src/saltfactories/{factories => }/cli/run.py (77%) rename src/saltfactories/{factories => }/cli/salt.py (86%) rename src/saltfactories/{factories => }/cli/spm.py (62%) rename src/saltfactories/{factories => }/cli/ssh.py (85%) rename src/saltfactories/{factories/cli => }/client.py (97%) rename src/saltfactories/{factories => }/daemons/__init__.py (100%) rename src/saltfactories/{factories => }/daemons/api.py (89%) rename src/saltfactories/{factories => }/daemons/container.py (85%) rename src/saltfactories/{factories => }/daemons/master.py (94%) rename src/saltfactories/{factories => }/daemons/minion.py (96%) rename src/saltfactories/{factories => }/daemons/proxy.py (95%) rename src/saltfactories/{factories => }/daemons/sshd.py (97%) rename src/saltfactories/{factories => }/daemons/syndic.py (96%) delete mode 100644 src/saltfactories/factories/__init__.py rename src/saltfactories/{factories => }/manager.py (89%) delete mode 100644 src/saltfactories/plugin.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 28f8247d..f4354a83 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -43,7 +43,7 @@ repos: - id: unimport name: Remove unused imports args: [--remove] - exclude: ^(docs/.*\.py|src/saltfactories/factories/(cli|daemons)/__init__\.py)$ + exclude: ^(docs/.*\.py|src/saltfactories/(cli|daemons)/__init__\.py)$ - repo: https://github.com/asottile/reorder_python_imports rev: v2.4.0 diff --git a/.pylint-spelling-words b/.pylint-spelling-words index 4995d265..fefecc92 100644 --- a/.pylint-spelling-words +++ b/.pylint-spelling-words @@ -31,8 +31,7 @@ containerfactory cp css cwd -daemonfactory -daemonfactoryimpl +daemonimpl darwin datatypes datetime @@ -101,7 +100,6 @@ png popen pragma prepend -processfactory processresult proxied psutil @@ -119,19 +117,14 @@ ret returncode rst rtype -saltapifactory -saltcloudfactory +saltapi +saltcloud saltenv saltfactories -saltfactory saltmaster -saltmasterfactory saltminion -saltminionfactory saltproxyminion -saltproxyminionfactory saltsyndic -saltsyndicfactory shellresult sigterm sitecustomise @@ -149,8 +142,7 @@ stdout str subprocess subprocesses -subprocessfactorybase -subprocessfactoryimpl +subprocessimpl sunos syndic sys diff --git a/changelog/50.breaking.rst b/changelog/50.breaking.rst new file mode 100644 index 00000000..d31334ee --- /dev/null +++ b/changelog/50.breaking.rst @@ -0,0 +1 @@ +`Name things once `_. diff --git a/docs/ref/saltfactories/factories/base.rst b/docs/ref/saltfactories/bases.rst similarity index 55% rename from docs/ref/saltfactories/factories/base.rst rename to docs/ref/saltfactories/bases.rst index 8c401167..255831ef 100644 --- a/docs/ref/saltfactories/factories/base.rst +++ b/docs/ref/saltfactories/bases.rst @@ -1,4 +1,7 @@ -.. automodule:: saltfactories.factories.base +Base Classes +============ + +.. automodule:: saltfactories.bases :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/cli/call.rst b/docs/ref/saltfactories/cli/call.rst new file mode 100644 index 00000000..8399a60c --- /dev/null +++ b/docs/ref/saltfactories/cli/call.rst @@ -0,0 +1,9 @@ +============= +``salt-call`` +============= + +.. automodule:: saltfactories.cli.call + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/docs/ref/saltfactories/cli/cloud.rst b/docs/ref/saltfactories/cli/cloud.rst new file mode 100644 index 00000000..7ac6a43f --- /dev/null +++ b/docs/ref/saltfactories/cli/cloud.rst @@ -0,0 +1,9 @@ +============== +``salt-cloud`` +============== + +.. automodule:: saltfactories.cli.cloud + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/cli/cp.rst b/docs/ref/saltfactories/cli/cp.rst similarity index 51% rename from docs/ref/saltfactories/factories/cli/cp.rst rename to docs/ref/saltfactories/cli/cp.rst index 83fffc7f..c9fbfc99 100644 --- a/docs/ref/saltfactories/factories/cli/cp.rst +++ b/docs/ref/saltfactories/cli/cp.rst @@ -1,4 +1,8 @@ -.. automodule:: saltfactories.factories.cli.cp +=========== +``salt-cp`` +=========== + +.. automodule:: saltfactories.cli.cp :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/factories/cli/key.rst b/docs/ref/saltfactories/cli/key.rst similarity index 50% rename from docs/ref/saltfactories/factories/cli/key.rst rename to docs/ref/saltfactories/cli/key.rst index 77fa3d7f..36afc5fd 100644 --- a/docs/ref/saltfactories/factories/cli/key.rst +++ b/docs/ref/saltfactories/cli/key.rst @@ -1,4 +1,8 @@ -.. automodule:: saltfactories.factories.cli.key +============ +``salt-key`` +============ + +.. automodule:: saltfactories.cli.key :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/factories/cli/run.rst b/docs/ref/saltfactories/cli/run.rst similarity index 50% rename from docs/ref/saltfactories/factories/cli/run.rst rename to docs/ref/saltfactories/cli/run.rst index ab4e0c8a..237d2001 100644 --- a/docs/ref/saltfactories/factories/cli/run.rst +++ b/docs/ref/saltfactories/cli/run.rst @@ -1,4 +1,8 @@ -.. automodule:: saltfactories.factories.cli.run +============ +``salt-run`` +============ + +.. automodule:: saltfactories.cli.run :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/factories/cli/salt.rst b/docs/ref/saltfactories/cli/salt.rst similarity index 54% rename from docs/ref/saltfactories/factories/cli/salt.rst rename to docs/ref/saltfactories/cli/salt.rst index 96f08282..456bdfc2 100644 --- a/docs/ref/saltfactories/factories/cli/salt.rst +++ b/docs/ref/saltfactories/cli/salt.rst @@ -1,4 +1,8 @@ -.. automodule:: saltfactories.factories.cli.salt +======== +``salt`` +======== + +.. automodule:: saltfactories.cli.salt :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/factories/cli/spm.rst b/docs/ref/saltfactories/cli/spm.rst similarity index 55% rename from docs/ref/saltfactories/factories/cli/spm.rst rename to docs/ref/saltfactories/cli/spm.rst index 94fabda0..0784f078 100644 --- a/docs/ref/saltfactories/factories/cli/spm.rst +++ b/docs/ref/saltfactories/cli/spm.rst @@ -1,4 +1,8 @@ -.. automodule:: saltfactories.factories.cli.spm +======= +``spm`` +======= + +.. automodule:: saltfactories.cli.spm :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/factories/cli/ssh.rst b/docs/ref/saltfactories/cli/ssh.rst similarity index 50% rename from docs/ref/saltfactories/factories/cli/ssh.rst rename to docs/ref/saltfactories/cli/ssh.rst index 1e9833d7..4a6d3ab4 100644 --- a/docs/ref/saltfactories/factories/cli/ssh.rst +++ b/docs/ref/saltfactories/cli/ssh.rst @@ -1,4 +1,8 @@ -.. automodule:: saltfactories.factories.cli.ssh +============ +``salt-ssh`` +============ + +.. automodule:: saltfactories.cli.ssh :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/factories/cli/client.rst b/docs/ref/saltfactories/client.rst similarity index 50% rename from docs/ref/saltfactories/factories/cli/client.rst rename to docs/ref/saltfactories/client.rst index e13723a3..4b82ef9f 100644 --- a/docs/ref/saltfactories/factories/cli/client.rst +++ b/docs/ref/saltfactories/client.rst @@ -1,4 +1,8 @@ -.. automodule:: saltfactories.factories.cli.client +============ +Local Client +============ + +.. automodule:: saltfactories.client :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/daemons/api.rst b/docs/ref/saltfactories/daemons/api.rst new file mode 100644 index 00000000..6aae675a --- /dev/null +++ b/docs/ref/saltfactories/daemons/api.rst @@ -0,0 +1,8 @@ +============ +``salt-api`` +============ +.. automodule:: saltfactories.daemons.api + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/docs/ref/saltfactories/daemons/container.rst b/docs/ref/saltfactories/daemons/container.rst new file mode 100644 index 00000000..a9b91aa2 --- /dev/null +++ b/docs/ref/saltfactories/daemons/container.rst @@ -0,0 +1,9 @@ +========== +Containers +========== + +.. automodule:: saltfactories.daemons.container + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/docs/ref/saltfactories/daemons/master.rst b/docs/ref/saltfactories/daemons/master.rst new file mode 100644 index 00000000..0d7ccac4 --- /dev/null +++ b/docs/ref/saltfactories/daemons/master.rst @@ -0,0 +1,9 @@ +=============== +``salt-master`` +=============== + +.. automodule:: saltfactories.daemons.master + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/docs/ref/saltfactories/daemons/minion.rst b/docs/ref/saltfactories/daemons/minion.rst new file mode 100644 index 00000000..2dc105bd --- /dev/null +++ b/docs/ref/saltfactories/daemons/minion.rst @@ -0,0 +1,9 @@ +=============== +``salt-minion`` +=============== + +.. automodule:: saltfactories.daemons.minion + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/docs/ref/saltfactories/daemons/proxy.rst b/docs/ref/saltfactories/daemons/proxy.rst new file mode 100644 index 00000000..5e643cf4 --- /dev/null +++ b/docs/ref/saltfactories/daemons/proxy.rst @@ -0,0 +1,9 @@ +============== +``salt-proxy`` +============== + +.. automodule:: saltfactories.daemons.proxy + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/daemons/sshd.rst b/docs/ref/saltfactories/daemons/sshd.rst similarity index 53% rename from docs/ref/saltfactories/factories/daemons/sshd.rst rename to docs/ref/saltfactories/daemons/sshd.rst index 8e03d17e..a2a1482b 100644 --- a/docs/ref/saltfactories/factories/daemons/sshd.rst +++ b/docs/ref/saltfactories/daemons/sshd.rst @@ -1,4 +1,7 @@ -.. automodule:: saltfactories.factories.daemons.sshd +======== +``sshd`` +======== +.. automodule:: saltfactories.daemons.sshd :members: :show-inheritance: :inherited-members: diff --git a/docs/ref/saltfactories/factories/cli/call.rst b/docs/ref/saltfactories/factories/cli/call.rst deleted file mode 100644 index 1aa53bfe..00000000 --- a/docs/ref/saltfactories/factories/cli/call.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.cli.call - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/cli/cloud.rst b/docs/ref/saltfactories/factories/cli/cloud.rst deleted file mode 100644 index 117084c8..00000000 --- a/docs/ref/saltfactories/factories/cli/cloud.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.cli.cloud - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/daemons/api.rst b/docs/ref/saltfactories/factories/daemons/api.rst deleted file mode 100644 index d96875e6..00000000 --- a/docs/ref/saltfactories/factories/daemons/api.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.daemons.api - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/daemons/container.rst b/docs/ref/saltfactories/factories/daemons/container.rst deleted file mode 100644 index c5965c18..00000000 --- a/docs/ref/saltfactories/factories/daemons/container.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.daemons.container - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/daemons/master.rst b/docs/ref/saltfactories/factories/daemons/master.rst deleted file mode 100644 index 959c9de6..00000000 --- a/docs/ref/saltfactories/factories/daemons/master.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.daemons.master - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/daemons/minion.rst b/docs/ref/saltfactories/factories/daemons/minion.rst deleted file mode 100644 index dd2b0c6c..00000000 --- a/docs/ref/saltfactories/factories/daemons/minion.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.daemons.minion - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/daemons/proxy.rst b/docs/ref/saltfactories/factories/daemons/proxy.rst deleted file mode 100644 index a45ef5d7..00000000 --- a/docs/ref/saltfactories/factories/daemons/proxy.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.daemons.proxy - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/factories/index.rst b/docs/ref/saltfactories/factories/index.rst deleted file mode 100644 index 4106c8f0..00000000 --- a/docs/ref/saltfactories/factories/index.rst +++ /dev/null @@ -1,39 +0,0 @@ -========= -Factories -========= - - -Base Classes -============ -.. toctree:: - - base - manager - -Daemons -======= - -.. toctree:: - - daemons/master - daemons/minion - daemons/proxy - daemons/api - daemons/sshd - daemons/container - - -CLI -=== - -.. toctree:: - - cli/key - cli/salt - cli/call - cli/run - cli/cp - cli/cloud - cli/spm - cli/ssh - cli/client diff --git a/docs/ref/saltfactories/factories/manager.rst b/docs/ref/saltfactories/factories/manager.rst deleted file mode 100644 index bfb6c631..00000000 --- a/docs/ref/saltfactories/factories/manager.rst +++ /dev/null @@ -1,5 +0,0 @@ -.. automodule:: saltfactories.factories.manager - :members: - :show-inheritance: - :inherited-members: - :no-undoc-members: diff --git a/docs/ref/saltfactories/index.rst b/docs/ref/saltfactories/index.rst index c3bf660e..85888d56 100644 --- a/docs/ref/saltfactories/index.rst +++ b/docs/ref/saltfactories/index.rst @@ -7,6 +7,41 @@ Salt Factories Package cli plugins/index - factories/index utils/index exceptions + +Factories +========= + +.. toctree:: + + bases + manager + +Daemons +------- + +.. toctree:: + + daemons/master + daemons/minion + daemons/proxy + daemons/api + daemons/sshd + daemons/container + + +CLI +--- + +.. toctree:: + + cli/key + cli/salt + cli/call + cli/run + cli/cp + cli/cloud + cli/spm + cli/ssh + client diff --git a/docs/ref/saltfactories/manager.rst b/docs/ref/saltfactories/manager.rst new file mode 100644 index 00000000..5befd6c3 --- /dev/null +++ b/docs/ref/saltfactories/manager.rst @@ -0,0 +1,9 @@ +====================== +Salt Factories Manager +====================== + +.. automodule:: saltfactories.manager + :members: + :show-inheritance: + :inherited-members: + :no-undoc-members: diff --git a/setup.cfg b/setup.cfg index 94154f65..4452ac5e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -57,9 +57,9 @@ extras_require = [options.entry_points] console_scripts = - salt-factories = saltfactories.cli:main + salt-factories = saltfactories.__main__:main pytest11= - salt-factories = saltfactories.plugin + salt-factories = saltfactories.plugins salt-factories-factories = saltfactories.plugins.factories salt-factories-markers = saltfactories.plugins.markers salt-factories-sysinfo = saltfactories.plugins.sysinfo diff --git a/src/saltfactories/cli.py b/src/saltfactories/__main__.py similarity index 100% rename from src/saltfactories/cli.py rename to src/saltfactories/__main__.py diff --git a/src/saltfactories/factories/base.py b/src/saltfactories/bases.py similarity index 96% rename from src/saltfactories/factories/base.py rename to src/saltfactories/bases.py index 3bec3e5c..ce3e265f 100644 --- a/src/saltfactories/factories/base.py +++ b/src/saltfactories/bases.py @@ -3,9 +3,6 @@ PYTEST_DONT_REWRITE -saltfactories.factories.base -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Factories base classes """ import atexit @@ -77,12 +74,12 @@ def get_display_name(self): @attr.s(kw_only=True) -class SubprocessFactoryImpl: +class SubprocessImpl: """ Subprocess interaction implementation - :keyword ~saltfactories.factories.base.Factory factory: - The factory instance, either :py:class:`~saltfactories.factories.base.Factory` or + :keyword ~saltfactories.bases.Factory factory: + The factory instance, either :py:class:`~saltfactories.bases.Factory` or a sub-class of it. """ @@ -268,7 +265,7 @@ def run(self, *args, **kwargs): @attr.s(kw_only=True) -class SubprocessFactoryBase(Factory): +class Subprocess(Factory): """ Base CLI script/binary class @@ -285,7 +282,7 @@ class SubprocessFactoryBase(Factory): When code coverage is enabled, one will want `slow_stop` set to `True` so that coverage data can be written down to disk. - Please look at :py:class:`~saltfactories.factories.base.Factory` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.Factory` for the additional supported keyword arguments documentation. """ @@ -301,7 +298,7 @@ def _set_impl_default(self): return impl_class(factory=self) def _get_impl_class(self): - return SubprocessFactoryImpl + return SubprocessImpl def __attrs_post_init__(self): super().__attrs_post_init__() @@ -371,14 +368,14 @@ def pid(self): @attr.s(kw_only=True) -class ProcessFactory(SubprocessFactoryBase): +class Process(Subprocess): """ Base process factory :keyword int default_timeout: The maximum amount of seconds that a script should run - Please look at :py:class:`~saltfactories.factories.base.SubprocessFactoryBase` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.Subprocess` for the additional supported keyword arguments documentation. """ @@ -452,11 +449,11 @@ class StartDaemonCallArguments: @attr.s(kw_only=True) -class DaemonFactoryImpl(SubprocessFactoryImpl): +class DaemonImpl(SubprocessImpl): """ Daemon subprocess interaction implementation - Please look at :py:class:`~saltfactories.factories.base.SubprocessFactoryImpl` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.SubprocessImpl` for the additional supported keyword arguments documentation. """ @@ -610,11 +607,11 @@ def get_start_arguments(self): @attr.s(kw_only=True) -class DaemonFactory(SubprocessFactoryBase): +class Daemon(Subprocess): """ Base daemon factory - Please look at :py:class:`~saltfactories.factories.base.SubprocessFactoryBase` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.Subprocess` for the additional supported keyword arguments documentation. """ @@ -626,7 +623,7 @@ class DaemonFactory(SubprocessFactoryBase): listen_ports = attr.ib(init=False, repr=False, hash=False, default=attr.Factory(list)) def _get_impl_class(self): - return DaemonFactoryImpl + return DaemonImpl def __attrs_post_init__(self): super().__attrs_post_init__() @@ -846,7 +843,7 @@ def __exit__(self, *_): @attr.s(kw_only=True) -class SaltFactory: +class Salt: """ Base factory for salt cli's and daemon's @@ -889,11 +886,11 @@ def get_display_name(self): @attr.s(kw_only=True) -class SaltCliFactoryImpl(SubprocessFactoryImpl): +class SaltCliImpl(SubprocessImpl): """ - Subprocess interaction implementation + Salt CLI's subprocess interaction implementation - Please look at :py:class:`~saltfactories.factories.base.SubprocessFactoryImpl` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.SubprocessImpl` for the additional supported keyword arguments documentation. """ @@ -912,15 +909,15 @@ def build_cmdline(self, *args, minion_tgt=None, **kwargs): # pylint: disable=ar @attr.s(kw_only=True) -class SaltCliFactory(SaltFactory, ProcessFactory): +class SaltCli(Salt, Process): """ Base factory for salt cli's :param bool hard_crash: Pass ``--hard-crash`` to Salt's CLI's - Please look at :py:class:`~saltfactories.factories.base.SaltFactory` and - :py:class:`~saltfactories.factories.base.ProcessFactory` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.Salt` and + :py:class:`~saltfactories.bases.Process` for the additional supported keyword arguments documentation. """ @@ -937,11 +934,11 @@ class SaltCliFactory(SaltFactory, ProcessFactory): __merge_json_output__ = attr.ib(repr=False, init=False, default=True) def _get_impl_class(self): - return SaltCliFactoryImpl + return SaltCliImpl def __attrs_post_init__(self): - ProcessFactory.__attrs_post_init__(self) - SaltFactory.__attrs_post_init__(self) + Process.__attrs_post_init__(self) + Salt.__attrs_post_init__(self) def get_script_args(self): """ @@ -1125,11 +1122,11 @@ def process_output(self, stdout, stderr, cmdline=None): @attr.s(kw_only=True) -class SystemdSaltDaemonFactoryImpl(DaemonFactoryImpl): +class SystemdSaltDaemonImpl(DaemonImpl): """ Daemon systemd interaction implementation - Please look at :py:class:`~saltfactories.factories.base.DaemonFactoryImpl` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.DaemonImpl` for the additional supported keyword arguments documentation. """ @@ -1256,12 +1253,12 @@ def pid(self): @attr.s(kw_only=True) -class SaltDaemonFactory(SaltFactory, DaemonFactory): +class SaltDaemon(Salt, Daemon): """ Base factory for salt daemon's - Please look at :py:class:`~saltfactories.factories.base.SaltFactory` and - :py:class:`~saltfactories.factories.base.DaemonFactory` for the additional supported keyword + Please look at :py:class:`~saltfactories.bases.Salt` and + :py:class:`~saltfactories.bases.Daemon` for the additional supported keyword arguments documentation. """ @@ -1270,8 +1267,8 @@ class SaltDaemonFactory(SaltFactory, DaemonFactory): started_at = attr.ib(repr=False, default=None) def __attrs_post_init__(self): - DaemonFactory.__attrs_post_init__(self) - SaltFactory.__attrs_post_init__(self) + Daemon.__attrs_post_init__(self) + Salt.__attrs_post_init__(self) if self.system_install is True and self.extra_cli_arguments_after_first_start_failure: raise pytest.UsageError( @@ -1289,7 +1286,7 @@ def __attrs_post_init__(self): def _get_impl_class(self): if self.system_install: - return SystemdSaltDaemonFactoryImpl + return SystemdSaltDaemonImpl return super()._get_impl_class() @classmethod diff --git a/src/saltfactories/factories/cli/__init__.py b/src/saltfactories/cli/__init__.py similarity index 88% rename from src/saltfactories/factories/cli/__init__.py rename to src/saltfactories/cli/__init__.py index 32bb773a..27cc4a57 100644 --- a/src/saltfactories/factories/cli/__init__.py +++ b/src/saltfactories/cli/__init__.py @@ -3,7 +3,6 @@ === """ from . import call -from . import client from . import cloud from . import cp from . import key diff --git a/src/saltfactories/factories/cli/call.py b/src/saltfactories/cli/call.py similarity index 75% rename from src/saltfactories/factories/cli/call.py rename to src/saltfactories/cli/call.py index 0dbf3de6..6d6f94ac 100644 --- a/src/saltfactories/factories/cli/call.py +++ b/src/saltfactories/cli/call.py @@ -1,16 +1,13 @@ """ -saltfactories.factories.cli.call -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``salt-call`` CLI factory """ import attr -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli @attr.s(kw_only=True, slots=True) -class SaltCallCliFactory(SaltCliFactory): +class SaltCall(SaltCli): """ salt-call CLI factory """ diff --git a/src/saltfactories/factories/cli/cloud.py b/src/saltfactories/cli/cloud.py similarity index 94% rename from src/saltfactories/factories/cli/cloud.py rename to src/saltfactories/cli/cloud.py index e58f1a3d..b6ffdb49 100644 --- a/src/saltfactories/factories/cli/cloud.py +++ b/src/saltfactories/cli/cloud.py @@ -3,10 +3,7 @@ PYTEST_DONT_REWRITE -saltfactories.factories.daemons.master -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Salt Master Factory +``salt-cloud`` CLI factory """ import logging import pathlib @@ -19,14 +16,14 @@ import salt.utils.files import salt.utils.yaml -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli from saltfactories.utils import running_username log = logging.getLogger(__name__) @attr.s(kw_only=True, slots=True) -class SaltCloudFactory(SaltCliFactory): +class SaltCloud(SaltCli): @staticmethod def default_config(root_dir, master_id, config_defaults=None, config_overrides=None): if config_defaults is None: diff --git a/src/saltfactories/factories/cli/cp.py b/src/saltfactories/cli/cp.py similarity index 75% rename from src/saltfactories/factories/cli/cp.py rename to src/saltfactories/cli/cp.py index 3b4e86a6..271140dc 100644 --- a/src/saltfactories/factories/cli/cp.py +++ b/src/saltfactories/cli/cp.py @@ -1,16 +1,13 @@ """ -saltfactories.factories.cli.cp -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``salt-cp`` CLI factory """ import attr -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli @attr.s(kw_only=True, slots=True) -class SaltCpCliFactory(SaltCliFactory): +class SaltCp(SaltCli): """ salt-cp CLI factory """ diff --git a/src/saltfactories/factories/cli/key.py b/src/saltfactories/cli/key.py similarity index 88% rename from src/saltfactories/factories/cli/key.py rename to src/saltfactories/cli/key.py index 46cc3b57..68524e4c 100644 --- a/src/saltfactories/factories/cli/key.py +++ b/src/saltfactories/cli/key.py @@ -3,9 +3,6 @@ PYTEST_DONT_REWRITE -saltfactories.factories.cli.key -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``salt-key`` CLI factory """ import re @@ -13,7 +10,7 @@ import attr from salt.utils.parsers import SaltKeyOptionParser -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli try: SALT_KEY_LOG_LEVEL_SUPPORTED = SaltKeyOptionParser._skip_console_logging_config_ is False @@ -23,7 +20,7 @@ @attr.s(kw_only=True, slots=True) -class SaltKeyCliFactory(SaltCliFactory): +class SaltKey(SaltCli): """ salt-key CLI factory """ diff --git a/src/saltfactories/factories/cli/run.py b/src/saltfactories/cli/run.py similarity index 77% rename from src/saltfactories/factories/cli/run.py rename to src/saltfactories/cli/run.py index 77ca09b6..3cefc24d 100644 --- a/src/saltfactories/factories/cli/run.py +++ b/src/saltfactories/cli/run.py @@ -1,16 +1,13 @@ """ -saltfactories.factories.cli.run -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``salt-run`` CLI factory """ import attr -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli @attr.s(kw_only=True, slots=True) -class SaltRunCliFactory(SaltCliFactory): +class SaltRun(SaltCli): """ salt-run CLI factory """ diff --git a/src/saltfactories/factories/cli/salt.py b/src/saltfactories/cli/salt.py similarity index 86% rename from src/saltfactories/factories/cli/salt.py rename to src/saltfactories/cli/salt.py index 454c53a1..d00555fd 100644 --- a/src/saltfactories/factories/cli/salt.py +++ b/src/saltfactories/cli/salt.py @@ -1,17 +1,14 @@ """ -saltfactories.factories.cli.salt -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``salt`` CLI factory """ import attr import pytest -from saltfactories.factories.base import SaltCliFactory as _SaltCliFactory +from saltfactories.bases import SaltCli @attr.s(kw_only=True, slots=True) -class SaltCliFactory(_SaltCliFactory): +class Salt(SaltCli): """ salt CLI factory """ diff --git a/src/saltfactories/factories/cli/spm.py b/src/saltfactories/cli/spm.py similarity index 62% rename from src/saltfactories/factories/cli/spm.py rename to src/saltfactories/cli/spm.py index 2d161216..6e283a3a 100644 --- a/src/saltfactories/factories/cli/spm.py +++ b/src/saltfactories/cli/spm.py @@ -1,16 +1,13 @@ """ -saltfactories.factories.cli.spm -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ``spm`` CLI factory """ import attr -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli @attr.s(kw_only=True, slots=True) -class SpmCliFactory(SaltCliFactory): +class Spm(SaltCli): """ ``spm`` CLI factory """ diff --git a/src/saltfactories/factories/cli/ssh.py b/src/saltfactories/cli/ssh.py similarity index 85% rename from src/saltfactories/factories/cli/ssh.py rename to src/saltfactories/cli/ssh.py index f35f933b..59232a6f 100644 --- a/src/saltfactories/factories/cli/ssh.py +++ b/src/saltfactories/cli/ssh.py @@ -1,16 +1,13 @@ """ -saltfactories.factories.cli.ssh -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - salt-ssh CLI factory """ import attr -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli @attr.s(kw_only=True, slots=True) -class SaltSshCliFactory(SaltCliFactory): +class SaltSsh(SaltCli): """ salt CLI factory """ diff --git a/src/saltfactories/factories/cli/client.py b/src/saltfactories/client.py similarity index 97% rename from src/saltfactories/factories/cli/client.py rename to src/saltfactories/client.py index 07ab7391..435c5f1b 100644 --- a/src/saltfactories/factories/cli/client.py +++ b/src/saltfactories/client.py @@ -2,10 +2,6 @@ .. PYTEST_DONT_REWRITE - -saltfactories.factories.cli.client -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Salt Client in-process implementation """ import logging @@ -20,7 +16,7 @@ @attr.s(kw_only=True, slots=True) -class SaltClientFactory: +class LocalClient: """ Wrapper class around Salt's local client """ diff --git a/src/saltfactories/factories/daemons/__init__.py b/src/saltfactories/daemons/__init__.py similarity index 100% rename from src/saltfactories/factories/daemons/__init__.py rename to src/saltfactories/daemons/__init__.py diff --git a/src/saltfactories/factories/daemons/api.py b/src/saltfactories/daemons/api.py similarity index 89% rename from src/saltfactories/factories/daemons/api.py rename to src/saltfactories/daemons/api.py index ad82d7af..b53ea70e 100644 --- a/src/saltfactories/factories/daemons/api.py +++ b/src/saltfactories/daemons/api.py @@ -3,19 +3,16 @@ PYTEST_DONT_REWRITE -saltfactories.factories.daemons.api -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Salt API Factory """ import attr import pytest -from saltfactories.factories.base import SaltDaemonFactory +from saltfactories.bases import SaltDaemon @attr.s(kw_only=True, slots=True) -class SaltApiFactory(SaltDaemonFactory): +class SaltApi(SaltDaemon): def __attrs_post_init__(self): if "rest_cherrypy" in self.config: self.check_ports = [self.config["rest_cherrypy"]["port"]] diff --git a/src/saltfactories/factories/daemons/container.py b/src/saltfactories/daemons/container.py similarity index 85% rename from src/saltfactories/factories/daemons/container.py rename to src/saltfactories/daemons/container.py index e0d79a10..6e6d2875 100644 --- a/src/saltfactories/factories/daemons/container.py +++ b/src/saltfactories/daemons/container.py @@ -3,9 +3,6 @@ PYTEST_DONT_REWRITE -saltfactories.factories.daemons.container -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Container based factories """ import atexit @@ -14,11 +11,10 @@ import attr +from saltfactories import bases from saltfactories import CODE_ROOT_DIR +from saltfactories.daemons import minion from saltfactories.exceptions import FactoryNotStarted -from saltfactories.factories.base import Factory -from saltfactories.factories.base import SaltDaemonFactory -from saltfactories.factories.daemons.minion import SaltMinionFactory from saltfactories.utils import format_callback_to_string from saltfactories.utils import ports from saltfactories.utils import random_string @@ -62,7 +58,7 @@ class PyWinTypesError(Exception): @attr.s(kw_only=True) -class ContainerFactory(Factory): +class Container(bases.Factory): image = attr.ib() name = attr.ib(default=None) check_ports = attr.ib(default=None) @@ -104,7 +100,7 @@ def start(self, *command, max_start_attempts=None, start_timeout=None): if self.is_running(): log.warning("%s is already running.", self) return True - connectable = ContainerFactory.client_connectable(self.docker_client) + connectable = Container.client_connectable(self.docker_client) if connectable is not True: self.terminate() raise RuntimeError(connectable) @@ -367,14 +363,14 @@ def __exit__(self, *_): @attr.s(kw_only=True) -class SaltDaemonContainerFactory(SaltDaemonFactory, ContainerFactory): +class SaltDaemon(bases.SaltDaemon, Container): def __attrs_post_init__(self): self.daemon_started = self.daemon_starting = False if self.python_executable is None: # Default to whatever is the default python in the container self.python_executable = "python" - SaltDaemonFactory.__attrs_post_init__(self) - ContainerFactory.__attrs_post_init__(self) + bases.SaltDaemon.__attrs_post_init__(self) + Container.__attrs_post_init__(self) # There are some volumes which NEED to exist on the container so # that configs are in the right place and also our custom salt # plugins along with the custom scripts to start the daemons. @@ -398,12 +394,10 @@ def build_cmdline(self, *args): def start(self, *extra_cli_arguments, max_start_attempts=None, start_timeout=None): # Start the container - ContainerFactory.start( - self, max_start_attempts=max_start_attempts, start_timeout=start_timeout - ) + Container.start(self, max_start_attempts=max_start_attempts, start_timeout=start_timeout) self.daemon_starting = True # Now that the container is up, let's start the daemon - self.daemon_started = SaltDaemonFactory.start( + self.daemon_started = bases.SaltDaemon.start( self, *extra_cli_arguments, max_start_attempts=max_start_attempts, @@ -413,18 +407,59 @@ def start(self, *extra_cli_arguments, max_start_attempts=None, start_timeout=Non def terminate(self): self.daemon_started = self.daemon_starting = False - ret = SaltDaemonFactory.terminate(self) - ContainerFactory.terminate(self) + ret = bases.SaltDaemon.terminate(self) + Container.terminate(self) return ret def is_running(self): - running = ContainerFactory.is_running(self) + running = Container.is_running(self) if running is False: return running if self.daemon_starting or self.daemon_started: - return SaltDaemonFactory.is_running(self) + return bases.SaltDaemon.is_running(self) return running + def get_check_ports(self): + """ + Return a list of ports to check against to ensure the daemon is running + """ + return Container.get_check_ports(self) + bases.SaltDaemon.get_check_ports(self) + + def register_before_container_start_callback(self, callback, *args, **kwargs): + Container.register_before_start_callback(self, callback, *args, **kwargs) + + def register_before_container_terminate_callback(self, callback, *args, **kwargs): + Container.register_before_terminate_callback(self, callback, *args, **kwargs) + + def register_after_container_start_callback(self, callback, *args, **kwargs): + Container.register_after_start_callback(self, callback, *args, **kwargs) + + def register_after_container_terminate_callback(self, callback, *args, **kwargs): + Container.register_after_terminate_callback(self, callback, *args, **kwargs) + + def register_before_start_callback(self, callback, *args, **kwargs): + bases.SaltDaemon.register_before_start_callback(self, callback, *args, **kwargs) + + def register_before_terminate_callback(self, callback, *args, **kwargs): + bases.SaltDaemon.register_before_terminate_callback(self, callback, *args, **kwargs) + + def register_after_start_callback(self, callback, *args, **kwargs): + bases.SaltDaemon.register_after_start_callback(self, callback, *args, **kwargs) + + def register_after_terminate_callback(self, callback, *args, **kwargs): + bases.SaltDaemon.register_after_terminate_callback(self, callback, *args, **kwargs) + + def started(self, *extra_cli_arguments, max_start_attempts=None, start_timeout=None): + """ + Start the daemon and return it's instance so it can be used as a context manager + """ + return bases.SaltDaemon.started( + self, + *extra_cli_arguments, + max_start_attempts=max_start_attempts, + start_timeout=start_timeout + ) + def get_check_events(self): """ Return a list of tuples in the form of `(master_id, event_tag)` check against to ensure the daemon is running @@ -433,7 +468,7 @@ def get_check_events(self): @attr.s(kw_only=True, slots=True) -class SaltMinionContainerFactory(SaltDaemonContainerFactory, SaltMinionFactory): +class SaltMinion(SaltDaemon, minion.SaltMinion): """ Salt minion daemon implementation running in a docker container """ @@ -442,7 +477,7 @@ def get_check_events(self): """ Return a list of tuples in the form of `(master_id, event_tag)` check against to ensure the daemon is running """ - return SaltMinionFactory.get_check_events(self) + return minion.SaltMinion.get_check_events(self) def run_start_checks(self, started_at, timeout_at): - return SaltMinionFactory.run_start_checks(self, started_at, timeout_at) + return minion.SaltMinion.run_start_checks(self, started_at, timeout_at) diff --git a/src/saltfactories/factories/daemons/master.py b/src/saltfactories/daemons/master.py similarity index 94% rename from src/saltfactories/factories/daemons/master.py rename to src/saltfactories/daemons/master.py index 08766258..836d832a 100644 --- a/src/saltfactories/factories/daemons/master.py +++ b/src/saltfactories/daemons/master.py @@ -3,9 +3,6 @@ PYTEST_DONT_REWRITE -saltfactories.factories.daemons.master -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Salt Master Factory """ import copy @@ -17,8 +14,9 @@ import salt.config import salt.utils.dictupdate -from saltfactories.factories import cli -from saltfactories.factories.base import SaltDaemonFactory +from saltfactories import cli +from saltfactories import client +from saltfactories.bases import SaltDaemon from saltfactories.utils import cli_scripts from saltfactories.utils import ports from saltfactories.utils import running_username @@ -27,7 +25,7 @@ @attr.s(kw_only=True, slots=True) -class SaltMasterFactory(SaltDaemonFactory): +class SaltMaster(SaltDaemon): on_auth_event_callback = attr.ib(repr=False, default=None) state_tree = attr.ib(init=False, hash=False, repr=False) @@ -282,7 +280,7 @@ def get_salt_master_daemon(self, master_id, **kwargs): """ This method will configure a master under a master-of-masters. - Please see the documentation in :py:class:`~saltfactories.factories.manager.FactoriesManager.get_salt_master_daemon` + Please see the documentation in :py:class:`~saltfactories.manager.FactoriesManager.get_salt_master_daemon` """ return self.factories_manager.get_salt_master_daemon( master_id, master_of_masters=self, **kwargs @@ -290,25 +288,25 @@ def get_salt_master_daemon(self, master_id, **kwargs): def get_salt_minion_daemon(self, minion_id, **kwargs): """ - Please see the documentation in :py:class:`~saltfactories.factories.manager.FactoriesManager.configure_salt_minion` + Please see the documentation in :py:class:`~saltfactories.manager.FactoriesManager.configure_salt_minion` """ return self.factories_manager.get_salt_minion_daemon(minion_id, master=self, **kwargs) def get_salt_proxy_minion_daemon(self, minion_id, **kwargs): """ - Please see the documentation in :py:class:`~saltfactories.factories.manager.FactoriesManager.get_salt_proxy_minion_daemon` + Please see the documentation in :py:class:`~saltfactories.manager.FactoriesManager.get_salt_proxy_minion_daemon` """ return self.factories_manager.get_salt_proxy_minion_daemon(minion_id, master=self, **kwargs) def get_salt_api_daemon(self, **kwargs): """ - Please see the documentation in :py:class:`~saltfactories.factories.manager.FactoriesManager.get_salt_api_daemon` + Please see the documentation in :py:class:`~saltfactories.manager.FactoriesManager.get_salt_api_daemon` """ return self.factories_manager.get_salt_api_daemon(self, **kwargs) def get_salt_syndic_daemon(self, syndic_id, **kwargs): """ - Please see the documentation in :py:class:`~saltfactories.factories.manager.FactoriesManager.get_salt_syndic_daemon` + Please see the documentation in :py:class:`~saltfactories.manager.FactoriesManager.get_salt_syndic_daemon` """ return self.factories_manager.get_salt_syndic_daemon( syndic_id, master_of_masters=self, **kwargs @@ -318,7 +316,7 @@ def get_salt_cloud_cli( self, config_defaults=None, config_overrides=None, - factory_class=cli.cloud.SaltCloudFactory, + factory_class=cli.cloud.SaltCloud, **factory_class_kwargs ): """ @@ -331,7 +329,7 @@ def get_salt_cloud_cli( A dictionary of configuration overrides to use when configuring the minion Returns: - :py:class:`~saltfactories.factories.cli.cloud.SaltCloudFactory`: + :py:class:`~saltfactories.cli.cloud.SaltCloud`: The salt-cloud CLI script process class instance """ @@ -364,7 +362,7 @@ def get_salt_cloud_cli( **factory_class_kwargs ) - def get_salt_cli(self, factory_class=cli.salt.SaltCliFactory, **factory_class_kwargs): + def get_salt_cli(self, factory_class=cli.salt.Salt, **factory_class_kwargs): """ Return a `salt` CLI process for this master instance """ @@ -385,7 +383,7 @@ def get_salt_cli(self, factory_class=cli.salt.SaltCliFactory, **factory_class_kw **factory_class_kwargs ) - def get_salt_cp_cli(self, factory_class=cli.cp.SaltCpCliFactory, **factory_class_kwargs): + def get_salt_cp_cli(self, factory_class=cli.cp.SaltCp, **factory_class_kwargs): """ Return a `salt-cp` CLI process for this master instance """ @@ -406,7 +404,7 @@ def get_salt_cp_cli(self, factory_class=cli.cp.SaltCpCliFactory, **factory_class **factory_class_kwargs ) - def get_salt_key_cli(self, factory_class=cli.key.SaltKeyCliFactory, **factory_class_kwargs): + def get_salt_key_cli(self, factory_class=cli.key.SaltKey, **factory_class_kwargs): """ Return a `salt-key` CLI process for this master instance """ @@ -427,7 +425,7 @@ def get_salt_key_cli(self, factory_class=cli.key.SaltKeyCliFactory, **factory_cl **factory_class_kwargs ) - def get_salt_run_cli(self, factory_class=cli.run.SaltRunCliFactory, **factory_class_kwargs): + def get_salt_run_cli(self, factory_class=cli.run.SaltRun, **factory_class_kwargs): """ Return a `salt-run` CLI process for this master instance """ @@ -448,7 +446,7 @@ def get_salt_run_cli(self, factory_class=cli.run.SaltRunCliFactory, **factory_cl **factory_class_kwargs ) - def get_salt_spm_cli(self, factory_class=cli.spm.SpmCliFactory, **factory_class_kwargs): + def get_salt_spm_cli(self, factory_class=cli.spm.Spm, **factory_class_kwargs): """ Return a `spm` CLI process for this master instance """ @@ -471,7 +469,7 @@ def get_salt_spm_cli(self, factory_class=cli.spm.SpmCliFactory, **factory_class_ def get_salt_ssh_cli( self, - factory_class=cli.ssh.SaltSshCliFactory, + factory_class=cli.ssh.SaltSsh, roster_file=None, target_host=None, client_key=None, @@ -515,7 +513,7 @@ def get_salt_ssh_cli( def get_salt_client( self, functions_known_to_return_none=None, - factory_class=cli.client.SaltClientFactory, + factory_class=client.LocalClient, ): """ Return a local salt client object diff --git a/src/saltfactories/factories/daemons/minion.py b/src/saltfactories/daemons/minion.py similarity index 96% rename from src/saltfactories/factories/daemons/minion.py rename to src/saltfactories/daemons/minion.py index 290567d4..a75e4da9 100644 --- a/src/saltfactories/factories/daemons/minion.py +++ b/src/saltfactories/daemons/minion.py @@ -3,9 +3,6 @@ PYTEST_DONT_REWRITE -saltfactories.factories.daemons.minion -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Salt Minion Factory """ import copy @@ -18,8 +15,8 @@ import salt.config import salt.utils.dictupdate -from saltfactories.factories import cli -from saltfactories.factories.base import SaltDaemonFactory +from saltfactories import cli +from saltfactories.bases import SaltDaemon from saltfactories.utils import cli_scripts from saltfactories.utils import ports from saltfactories.utils.tempfiles import SaltPillarTree @@ -29,7 +26,7 @@ @attr.s(kw_only=True, slots=True) -class SaltMinionFactory(SaltDaemonFactory): +class SaltMinion(SaltDaemon): state_tree = attr.ib(init=False, hash=False, repr=False) pillar_tree = attr.ib(init=False, hash=False, repr=False) @@ -236,7 +233,7 @@ def get_check_events(self): role=self.config["__role"], id=self.id ) - def get_salt_call_cli(self, factory_class=cli.call.SaltCallCliFactory, **factory_class_kwargs): + def get_salt_call_cli(self, factory_class=cli.call.SaltCall, **factory_class_kwargs): """ Return a `salt-call` CLI process for this minion instance """ diff --git a/src/saltfactories/factories/daemons/proxy.py b/src/saltfactories/daemons/proxy.py similarity index 95% rename from src/saltfactories/factories/daemons/proxy.py rename to src/saltfactories/daemons/proxy.py index 0769b32f..52c3f85a 100644 --- a/src/saltfactories/factories/daemons/proxy.py +++ b/src/saltfactories/daemons/proxy.py @@ -3,9 +3,6 @@ PYTEST_DONT_REWRITE -saltfactories.factories.daemons.proxy -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Salt Proxy Minion Factory """ import copy @@ -18,9 +15,9 @@ import salt.config import salt.utils.dictupdate -from saltfactories.factories import cli -from saltfactories.factories.base import SaltDaemonFactory -from saltfactories.factories.base import SystemdSaltDaemonFactoryImpl +from saltfactories import cli +from saltfactories.bases import SaltDaemon +from saltfactories.bases import SystemdSaltDaemonImpl from saltfactories.utils import cli_scripts from saltfactories.utils import ports from saltfactories.utils.tempfiles import SaltPillarTree @@ -29,7 +26,7 @@ log = logging.getLogger(__name__) -class SystemdSaltProxyFactoryImpl(SystemdSaltDaemonFactoryImpl): +class SystemdSaltProxyImpl(SystemdSaltDaemonImpl): def get_service_name(self): if self._service_name is None: self._service_name = "{}@{}".format(super().get_service_name(), self.factory.id) @@ -37,7 +34,7 @@ def get_service_name(self): @attr.s(kw_only=True, slots=True) -class SaltProxyMinionFactory(SaltDaemonFactory): +class SaltProxyMinion(SaltDaemon): include_proxyid_cli_flag = attr.ib(default=True, repr=False) @@ -46,7 +43,7 @@ class SaltProxyMinionFactory(SaltDaemonFactory): def _get_impl_class(self): if self.system_install: - return SystemdSaltProxyFactoryImpl + return SystemdSaltProxyImpl return super()._get_impl_class() @state_tree.default @@ -256,7 +253,7 @@ def get_check_events(self): role=self.config["__role"], id=self.id ) - def get_salt_call_cli(self, factory_class=cli.call.SaltCallCliFactory, **factory_class_kwargs): + def get_salt_call_cli(self, factory_class=cli.call.SaltCall, **factory_class_kwargs): """ Return a `salt-call` CLI process for this minion instance """ diff --git a/src/saltfactories/factories/daemons/sshd.py b/src/saltfactories/daemons/sshd.py similarity index 97% rename from src/saltfactories/factories/daemons/sshd.py rename to src/saltfactories/daemons/sshd.py index f9627ad1..ff437c05 100644 --- a/src/saltfactories/factories/daemons/sshd.py +++ b/src/saltfactories/daemons/sshd.py @@ -1,7 +1,4 @@ """ -saltfactories.factories.daemons.sshd -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - SSHD daemon factory implementation """ import logging @@ -12,8 +9,8 @@ import attr +from saltfactories.bases import Daemon from saltfactories.exceptions import FactoryFailure -from saltfactories.factories.base import DaemonFactory from saltfactories.utils import ports from saltfactories.utils import running_username from saltfactories.utils import socket @@ -22,7 +19,7 @@ @attr.s(kw_only=True, slots=True) -class SshdDaemonFactory(DaemonFactory): +class Sshd(Daemon): config_dir = attr.ib() listen_address = attr.ib(default=None) listen_port = attr.ib(default=None) diff --git a/src/saltfactories/factories/daemons/syndic.py b/src/saltfactories/daemons/syndic.py similarity index 96% rename from src/saltfactories/factories/daemons/syndic.py rename to src/saltfactories/daemons/syndic.py index a21e6b49..334024c7 100644 --- a/src/saltfactories/factories/daemons/syndic.py +++ b/src/saltfactories/daemons/syndic.py @@ -3,9 +3,6 @@ PYTEST_DONT_REWRITE -saltfactories.factories.daemons.syndic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Salt Syndic Factory """ import logging @@ -15,14 +12,14 @@ import salt.config import salt.utils.dictupdate -from saltfactories.factories.base import SaltDaemonFactory +from saltfactories.bases import SaltDaemon from saltfactories.utils import ports log = logging.getLogger(__name__) @attr.s(kw_only=True, slots=True) -class SaltSyndicFactory(SaltDaemonFactory): +class SaltSyndic(SaltDaemon): master = attr.ib(repr=False, hash=False) minion = attr.ib(repr=False, hash=False) diff --git a/src/saltfactories/factories/__init__.py b/src/saltfactories/factories/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/saltfactories/factories/manager.py b/src/saltfactories/manager.py similarity index 89% rename from src/saltfactories/factories/manager.py rename to src/saltfactories/manager.py index 25d7a8f8..33bb08b2 100644 --- a/src/saltfactories/factories/manager.py +++ b/src/saltfactories/manager.py @@ -2,10 +2,6 @@ .. PYTEST_DONT_REWRITE - -saltfactories.factories.manager -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Salt Factories Manager """ import logging @@ -14,9 +10,9 @@ import attr -import saltfactories -from saltfactories.factories import daemons -from saltfactories.factories.base import SaltFactory +from saltfactories import CODE_ROOT_DIR +from saltfactories import daemons +from saltfactories.bases import Salt from saltfactories.utils import cli_scripts from saltfactories.utils import running_username @@ -112,14 +108,14 @@ def get_salt_log_handlers_path(): """ Returns the path to the Salt log handler this plugin provides """ - return saltfactories.CODE_ROOT_DIR / "utils" / "salt" / "log_handlers" + return CODE_ROOT_DIR / "utils" / "salt" / "log_handlers" @staticmethod def get_salt_engines_path(): """ Returns the path to the Salt engine this plugin provides """ - return saltfactories.CODE_ROOT_DIR / "utils" / "salt" / "engines" + return CODE_ROOT_DIR / "utils" / "salt" / "engines" def final_minion_config_tweaks(self, config): pytest_key = "pytest-minion" @@ -186,7 +182,7 @@ def get_salt_master_daemon( config_overrides=None, max_start_attempts=3, start_timeout=None, - factory_class=daemons.master.SaltMasterFactory, + factory_class=daemons.master.SaltMaster, **factory_class_kwargs ): """ @@ -198,8 +194,8 @@ def get_salt_master_daemon( order_masters(bool): Boolean flag to set if this master is going to control other masters(ie, master of masters), like, for example, in a :ref:`Syndic ` topology scenario - master_of_masters(:py:class:`saltfactories.factories.daemons.master.SaltMasterFactory`): - A :py:class:`saltfactories.factories.daemons.master.SaltMasterFactory` instance, like, for example, + master_of_masters(:py:class:`saltfactories.daemons.master.SaltMaster`): + A :py:class:`saltfactories.daemons.master.SaltMaster` instance, like, for example, in a :ref:`Syndic ` topology scenario config_defaults(dict): A dictionary of default configuration to use when configuring the master @@ -208,10 +204,10 @@ def get_salt_master_daemon( max_start_attempts(int): How many attempts should be made to start the master in case of failure to validate that its running factory_class_kwargs(dict): - Extra keyword arguments to pass to :py:class:`saltfactories.factories.daemons.master.SaltMasterFactory` + Extra keyword arguments to pass to :py:class:`saltfactories.daemons.master.SaltMaster` Returns: - :py:class:`saltfactories.factories.daemons.master.SaltMasterFactory`: + :py:class:`saltfactories.daemons.master.SaltMaster`: The master process class instance """ root_dir = self.get_root_dir_for_daemon( @@ -246,7 +242,7 @@ def get_salt_minion_daemon( config_overrides=None, max_start_attempts=3, start_timeout=None, - factory_class=daemons.minion.SaltMinionFactory, + factory_class=daemons.minion.SaltMinion, **factory_class_kwargs ): """ @@ -255,8 +251,8 @@ def get_salt_minion_daemon( Args: minion_id(str): The minion ID - master(:py:class:`saltfactories.factories.daemons.master.SaltMasterFactory`): - An instance of :py:class:`saltfactories.factories.daemons.master.SaltMasterFactory` that + master(:py:class:`saltfactories.daemons.master.SaltMaster`): + An instance of :py:class:`saltfactories.daemons.master.SaltMaster` that this minion will connect to. config_defaults(dict): A dictionary of default configuration to use when configuring the minion @@ -265,10 +261,10 @@ def get_salt_minion_daemon( max_start_attempts(int): How many attempts should be made to start the minion in case of failure to validate that its running factory_class_kwargs(dict): - Extra keyword arguments to pass to :py:class:`~saltfactories.factories.daemons.minion.SaltMinionFactory` + Extra keyword arguments to pass to :py:class:`~saltfactories.daemons.minion.SaltMinion` Returns: - :py:class:`~saltfactories.factories.daemons.minion.SaltMinionFactory`: + :py:class:`~saltfactories.daemons.minion.SaltMinion`: The minion process class instance """ root_dir = self.get_root_dir_for_daemon( @@ -303,13 +299,13 @@ def get_salt_syndic_daemon( config_overrides=None, max_start_attempts=3, start_timeout=None, - factory_class=daemons.syndic.SaltSyndicFactory, + factory_class=daemons.syndic.SaltSyndic, master_config_defaults=None, master_config_overrides=None, - master_factory_class=daemons.master.SaltMasterFactory, + master_factory_class=daemons.master.SaltMaster, minion_config_defaults=None, minion_config_overrides=None, - minion_factory_class=daemons.minion.SaltMinionFactory, + minion_factory_class=daemons.minion.SaltMinion, **factory_class_kwargs ): """ @@ -319,8 +315,8 @@ def get_salt_syndic_daemon( syndic_id(str): The Syndic ID. This ID will be shared by the ``salt-master``, ``salt-minion`` and ``salt-syndic`` processes. - master_of_masters(:py:class:`saltfactories.factories.daemons.master.SaltMasterFactory`): - An instance of :py:class:`saltfactories.factories.daemons.master.SaltMasterFactory` that the + master_of_masters(:py:class:`saltfactories.daemons.master.SaltMaster`): + An instance of :py:class:`saltfactories.daemons.master.SaltMaster` that the master configured in this :ref:`Syndic ` topology scenario shall connect to. config_defaults(dict): A dictionary of default configurations with three top level keys, ``master``, ``minion`` and @@ -333,10 +329,10 @@ def get_salt_syndic_daemon( max_start_attempts(int): How many attempts should be made to start the syndic in case of failure to validate that its running factory_class_kwargs(dict): - Extra keyword arguments to pass to :py:class:`~saltfactories.factories.daemons.syndic.SaltSyndicFactory` + Extra keyword arguments to pass to :py:class:`~saltfactories.daemons.syndic.SaltSyndic` Returns: - :py:class:`~saltfactories.factories.daemons.syndic.SaltSyndicFactory`: + :py:class:`~saltfactories.daemons.syndic.SaltSyndic`: The syndic process class instance """ @@ -421,7 +417,7 @@ def get_salt_proxy_minion_daemon( config_overrides=None, max_start_attempts=3, start_timeout=None, - factory_class=daemons.proxy.SaltProxyMinionFactory, + factory_class=daemons.proxy.SaltProxyMinion, **factory_class_kwargs ): """ @@ -430,8 +426,8 @@ def get_salt_proxy_minion_daemon( Args: proxy_minion_id(str): The proxy minion ID - master(:py:class:`saltfactories.factories.daemons.master.SaltMasterFactory`): - An instance of :py:class:`saltfactories.factories.daemons.master.SaltMasterFactory` that this minion + master(:py:class:`saltfactories.daemons.master.SaltMaster`): + An instance of :py:class:`saltfactories.daemons.master.SaltMaster` that this minion will connect to. config_defaults(dict): A dictionary of default configuration to use when configuring the proxy minion @@ -441,10 +437,10 @@ def get_salt_proxy_minion_daemon( How many attempts should be made to start the proxy minion in case of failure to validate that its running factory_class_kwargs(dict): - Extra keyword arguments to pass to :py:class:`~saltfactories.factories.daemons.proxy.SaltProxyMinionFactory` + Extra keyword arguments to pass to :py:class:`~saltfactories.daemons.proxy.SaltProxyMinion` Returns: - :py:class:`~saltfactories.factories.daemons.proxy.SaltProxyMinionFactory`: + :py:class:`~saltfactories.daemons.proxy.SaltProxyMinion`: The proxy minion process class instance """ root_dir = self.get_root_dir_for_daemon( @@ -476,17 +472,17 @@ def get_salt_api_daemon( master, max_start_attempts=3, start_timeout=None, - factory_class=daemons.api.SaltApiFactory, + factory_class=daemons.api.SaltApi, **factory_class_kwargs ): """ Spawn a salt-api - Please see py:class:`~saltfactories.factories.manager.FactoriesManager.get_salt_master_daemon` for argument + Please see py:class:`~saltfactories.manager.FactoriesManager.get_salt_master_daemon` for argument documentation. Returns: - :py:class:`~saltfactories.factories.daemons.api.SaltApiFactory`: + :py:class:`~saltfactories.daemons.api.SaltApi`: The salt-api process class instance """ return self._get_factory_class_instance( @@ -509,7 +505,7 @@ def get_sshd_daemon( cli_script_name="sshd", max_start_attempts=3, start_timeout=None, - factory_class=daemons.sshd.SshdDaemonFactory, + factory_class=daemons.sshd.Sshd, **factory_class_kwargs ): """ @@ -530,10 +526,10 @@ def get_sshd_daemon( cli_script_name(str): The name or path to the binary to run. Defaults to ``sshd``. factory_class_kwargs(dict): - Extra keyword arguments to pass to :py:class:`~saltfactories.factories.daemons.sshd.SshdDaemonFactory` + Extra keyword arguments to pass to :py:class:`~saltfactories.daemons.sshd.Sshd` Returns: - :py:class:`~saltfactories.factories.daemons.sshd.SshdDaemonFactory`: + :py:class:`~saltfactories.daemons.sshd.Sshd`: The sshd process class instance """ if config_dir is None: @@ -565,7 +561,7 @@ def get_container( image_name, docker_client=None, display_name=None, - factory_class=daemons.container.ContainerFactory, + factory_class=daemons.container.Container, max_start_attempts=3, start_timeout=None, **factory_class_kwargs @@ -583,17 +579,17 @@ def get_container( display_name(str): Human readable name for the factory factory_class: - A factory class. (Default :py:class:`~saltfactories.factories.daemons.container.ContainerFactory`) + A factory class. (Default :py:class:`~saltfactories.daemons.container.Container`) max_start_attempts(int): How many attempts should be made to start the container in case of failure to validate that its running. start_timeout(int): The amount of time, in seconds, to wait, until the container is considered as not started. factory_class_kwargs(dict): - Extra keyword arguments to pass to :py:class:`~saltfactories.factories.daemons.container.ContainerFactory` + Extra keyword arguments to pass to :py:class:`~saltfactories.daemons.container.Container` Returns: - :py:class:`~saltfactories.factories.daemons.container.ContainerFactory`: + :py:class:`~saltfactories.daemons.container.Container`: The factory instance """ return factory_class( @@ -662,7 +658,7 @@ def get_root_dir_for_daemon(self, daemon_id, config_defaults=None, factory_class root_dir = pathlib.Path(config_defaults["root_dir"]).resolve() root_dir.mkdir(parents=True, exist_ok=True) return root_dir - if self.system_install is True and issubclass(factory_class, SaltFactory): + if self.system_install is True and issubclass(factory_class, Salt): return self.root_dir elif self.system_install is True: root_dir = self.tmp_root_dir diff --git a/src/saltfactories/plugin.py b/src/saltfactories/plugin.py deleted file mode 100644 index ffc7e87d..00000000 --- a/src/saltfactories/plugin.py +++ /dev/null @@ -1,74 +0,0 @@ -""" -saltfactories.plugin -~~~~~~~~~~~~~~~~~~~~ - -Salt Factories PyTest plugin interface - -:meta private: -""" -import logging -import os -import sys -import tempfile - -import pytest - -import saltfactories.utils.tempfiles - -log = logging.getLogger(__name__) - - -def pytest_tempdir_temproot(): - # Taken from https://github.com/saltstack/salt/blob/v2019.2.0/tests/support/paths.py - # Avoid ${TMPDIR} and gettempdir() on MacOS as they yield a base path too long - # for unix sockets: ``error: AF_UNIX path too long`` - # Gentoo Portage prefers ebuild tests are rooted in ${TMPDIR} - if not sys.platform.startswith("darwin"): - tempdir = os.environ.get("TMPDIR") or tempfile.gettempdir() - else: - tempdir = "/tmp" - return os.path.abspath(os.path.realpath(tempdir)) - - -def pytest_tempdir_basename(): - """ - Return the temporary directory basename for the salt test suite. - """ - return "saltfactories" - - -def pytest_runtest_logstart(nodeid): - """ - signal the start of running a single test item. - - This hook will be called **before** :func:`pytest_runtest_setup`, :func:`pytest_runtest_call` and - :func:`pytest_runtest_teardown` hooks. - - :param str nodeid: full id of the item - :param location: a triple of ``(filename, linenum, testname)`` - """ - log.debug(">>>>>>> START %s >>>>>>>", nodeid) - - -def pytest_runtest_logfinish(nodeid): - """ - signal the complete finish of running a single test item. - - This hook will be called **after** :func:`pytest_runtest_setup`, :func:`pytest_runtest_call` and - :func:`pytest_runtest_teardown` hooks. - - :param str nodeid: full id of the item - :param location: a triple of ``(filename, linenum, testname)`` - """ - log.debug("<<<<<<< END %s <<<<<<<", nodeid) - - -@pytest.hookimpl(trylast=True) -def pytest_load_initial_conftests(*_): - """ - Register our pytest helpers - """ - if "temp_directory" not in pytest.helpers: - pytest.helpers.register(saltfactories.utils.tempfiles.temp_directory, name="temp_directory") - if "temp_file" not in pytest.helpers: - pytest.helpers.register(saltfactories.utils.tempfiles.temp_file, name="temp_file") diff --git a/src/saltfactories/plugins/__init__.py b/src/saltfactories/plugins/__init__.py index e69de29b..e89c2f1a 100644 --- a/src/saltfactories/plugins/__init__.py +++ b/src/saltfactories/plugins/__init__.py @@ -0,0 +1,72 @@ +""" +saltfactories.plugins +~~~~~~~~~~~~~~~~~~~~~ + +Salt Factories PyTest plugin interface +""" +import logging +import os +import sys +import tempfile + +import pytest + +import saltfactories.utils.tempfiles + +log = logging.getLogger(__name__) + + +def pytest_tempdir_temproot(): + # Taken from https://github.com/saltstack/salt/blob/v2019.2.0/tests/support/paths.py + # Avoid ${TMPDIR} and gettempdir() on MacOS as they yield a base path too long + # for unix sockets: ``error: AF_UNIX path too long`` + # Gentoo Portage prefers ebuild tests are rooted in ${TMPDIR} + if not sys.platform.startswith("darwin"): + tempdir = os.environ.get("TMPDIR") or tempfile.gettempdir() + else: + tempdir = "/tmp" + return os.path.abspath(os.path.realpath(tempdir)) + + +def pytest_tempdir_basename(): + """ + Return the temporary directory basename for the salt test suite. + """ + return "saltfactories" + + +def pytest_runtest_logstart(nodeid): + """ + signal the start of running a single test item. + + This hook will be called **before** :func:`pytest_runtest_setup`, :func:`pytest_runtest_call` and + :func:`pytest_runtest_teardown` hooks. + + :param str nodeid: full id of the item + :param location: a triple of ``(filename, linenum, testname)`` + """ + log.debug(">>>>>>> START %s >>>>>>>", nodeid) + + +def pytest_runtest_logfinish(nodeid): + """ + signal the complete finish of running a single test item. + + This hook will be called **after** :func:`pytest_runtest_setup`, :func:`pytest_runtest_call` and + :func:`pytest_runtest_teardown` hooks. + + :param str nodeid: full id of the item + :param location: a triple of ``(filename, linenum, testname)`` + """ + log.debug("<<<<<<< END %s <<<<<<<", nodeid) + + +@pytest.hookimpl(trylast=True) +def pytest_load_initial_conftests(*_): + """ + Register our pytest helpers + """ + if "temp_directory" not in pytest.helpers: + pytest.helpers.register(saltfactories.utils.tempfiles.temp_directory, name="temp_directory") + if "temp_file" not in pytest.helpers: + pytest.helpers.register(saltfactories.utils.tempfiles.temp_file, name="temp_file") diff --git a/src/saltfactories/plugins/factories.py b/src/saltfactories/plugins/factories.py index 3b0527cb..0416a493 100644 --- a/src/saltfactories/plugins/factories.py +++ b/src/saltfactories/plugins/factories.py @@ -14,7 +14,7 @@ import pytest import saltfactories -from saltfactories.factories.manager import FactoriesManager +from saltfactories.manager import FactoriesManager log = logging.getLogger(__name__) diff --git a/tests/functional/factories/base/test_daemon_factory.py b/tests/functional/factories/base/test_daemon_factory.py index cab7bd1c..0309a242 100644 --- a/tests/functional/factories/base/test_daemon_factory.py +++ b/tests/functional/factories/base/test_daemon_factory.py @@ -9,9 +9,9 @@ import psutil import pytest +from saltfactories.bases import Daemon from saltfactories.exceptions import FactoryNotRunning from saltfactories.exceptions import FactoryNotStarted -from saltfactories.factories.base import DaemonFactory from saltfactories.utils import platform from saltfactories.utils.processes import _get_cmdline @@ -91,7 +91,7 @@ def main(): else: # Windows don't know how to handle python scripts directly factory_kwargs = dict(cli_script_name=sys.executable, base_script_args=[script]) - daemon = DaemonFactory(start_timeout=1, **factory_kwargs) + daemon = Daemon(start_timeout=1, **factory_kwargs) daemon.start() daemon_pid = daemon.pid # Make sure the daemon is terminated no matter what @@ -190,7 +190,7 @@ def main(): else: # Windows don't know how to handle python scripts directly factory_kwargs = dict(cli_script_name=sys.executable, base_script_args=[script]) - daemon = DaemonFactory(start_timeout=1, **factory_kwargs) + daemon = Daemon(start_timeout=1, **factory_kwargs) daemon.start() daemon_pid = daemon.pid # Make sure the daemon is terminated no matter what @@ -243,7 +243,7 @@ def main(): """, executable=True, ) - daemon = DaemonFactory( + daemon = Daemon( cli_script_name=sys.executable, base_script_args=[script], start_timeout=2, @@ -318,7 +318,7 @@ def main(): def test_stopped_context_manager_raises_FactoryNotRunning(request, factory_stopped_script): - daemon = DaemonFactory( + daemon = Daemon( cli_script_name=sys.executable, base_script_args=[factory_stopped_script], start_timeout=3, @@ -334,7 +334,7 @@ def test_stopped_context_manager_raises_FactoryNotRunning(request, factory_stopp def test_stopped_context_manager(request, factory_stopped_script): - daemon = DaemonFactory( + daemon = Daemon( cli_script_name=sys.executable, base_script_args=[factory_stopped_script], start_timeout=3, @@ -378,7 +378,7 @@ def after_start_callback(self, daemon): def test_stopped_context_manager_callbacks(request, factory_stopped_script): - daemon = DaemonFactory( + daemon = Daemon( cli_script_name=sys.executable, base_script_args=[factory_stopped_script], start_timeout=3, @@ -460,7 +460,7 @@ def main(): """, executable=True, ) - daemon = DaemonFactory( + daemon = Daemon( cli_script_name=sys.executable, base_script_args=[script], start_timeout=1, @@ -526,7 +526,7 @@ def main(): """, executable=True, ) - daemon = DaemonFactory( + daemon = Daemon( cli_script_name=sys.executable, base_script_args=[script], start_timeout=0.1, @@ -543,7 +543,7 @@ def main(): "Attempt: {} of {}".format(n, max_start_attempts) for n in range(1, max_start_attempts + 1) ] for record in caplog.records: - if not record.message.startswith("Starting DaemonFactory"): + if not record.message.startswith("Starting Daemon"): continue for idx, start_attempt in enumerate(list(start_attempts)): if start_attempt in record.message: diff --git a/tests/functional/factories/base/test_process_factory.py b/tests/functional/factories/base/test_process_factory.py index 79dce75e..0d8c651b 100644 --- a/tests/functional/factories/base/test_process_factory.py +++ b/tests/functional/factories/base/test_process_factory.py @@ -2,13 +2,13 @@ import pytest +from saltfactories.bases import Process from saltfactories.exceptions import FactoryTimeout -from saltfactories.factories.base import ProcessFactory @pytest.mark.parametrize("exitcode", [0, 1, 3, 9, 40, 120]) def test_exitcode(exitcode, tempfiles): - shell = ProcessFactory(cli_script_name=sys.executable) + shell = Process(cli_script_name=sys.executable) script = tempfiles.makepyfile( """ # coding=utf-8 @@ -24,7 +24,7 @@ def test_exitcode(exitcode, tempfiles): def test_timeout_defined_on_class_instantiation(tempfiles): - shell = ProcessFactory(cli_script_name=sys.executable, default_timeout=0.5) + shell = Process(cli_script_name=sys.executable, default_timeout=0.5) script = tempfiles.makepyfile( """ # coding=utf-8 @@ -38,7 +38,7 @@ def test_timeout_defined_on_class_instantiation(tempfiles): def test_timeout_defined_run(tempfiles): - shell = ProcessFactory(cli_script_name=sys.executable) + shell = Process(cli_script_name=sys.executable) script = tempfiles.makepyfile( """ # coding=utf-8 @@ -72,7 +72,7 @@ def test_timeout_defined_run(tempfiles): ], ) def test_json_output(input_str, expected_object, tempfiles): - shell = ProcessFactory(cli_script_name=sys.executable) + shell = Process(cli_script_name=sys.executable) script = tempfiles.makepyfile( """ # coding=utf-8 @@ -92,7 +92,7 @@ def test_json_output(input_str, expected_object, tempfiles): def test_stderr_output(tempfiles): input_str = "Thou shalt not exit cleanly" - shell = ProcessFactory(cli_script_name=sys.executable) + shell = Process(cli_script_name=sys.executable) script = tempfiles.makepyfile( """ # coding=utf-8 @@ -107,7 +107,7 @@ def test_stderr_output(tempfiles): def test_unicode_output(tempfiles): - shell = ProcessFactory(cli_script_name=sys.executable) + shell = Process(cli_script_name=sys.executable) script = tempfiles.makepyfile( r""" # coding=utf-8 @@ -127,7 +127,7 @@ def test_unicode_output(tempfiles): def test_process_failed_to_start(tempfiles): - shell = ProcessFactory(cli_script_name=sys.executable) + shell = Process(cli_script_name=sys.executable) script = tempfiles.makepyfile( """ # coding=utf-8 diff --git a/tests/functional/factories/base/test_salt_daemon_factory.py b/tests/functional/factories/base/test_salt_daemon_factory.py index 3e3c36fa..963ac28b 100644 --- a/tests/functional/factories/base/test_salt_daemon_factory.py +++ b/tests/functional/factories/base/test_salt_daemon_factory.py @@ -2,8 +2,8 @@ import pytest +from saltfactories.bases import SaltDaemon from saltfactories.exceptions import FactoryNotStarted -from saltfactories.factories.base import SaltDaemonFactory @pytest.fixture @@ -58,7 +58,7 @@ def main(): output_file ), ) - daemon = SaltDaemonFactory( + daemon = SaltDaemon( cli_script_name=script, config=config, start_timeout=0.25, diff --git a/tests/functional/test_cli.py b/tests/functional/test_cli.py index 7d1f3e08..ab189b8e 100644 --- a/tests/functional/test_cli.py +++ b/tests/functional/test_cli.py @@ -1,11 +1,28 @@ import subprocess +import sys + +import pytest import saltfactories -def test_salt_factories_cli(): - ret = subprocess.run( +def cmdline_ids(value): + if value[0] == sys.executable: + return " ".join(["python"] + value[1:]) + return " ".join(value) + + +@pytest.mark.parametrize( + "cmdline", + ( ["salt-factories", "--coverage"], + [sys.executable, "-m", "saltfactories", "--coverage"], + ), + ids=cmdline_ids, +) +def test_salt_factories_cli(cmdline): + ret = subprocess.run( + cmdline, stdout=subprocess.PIPE, universal_newlines=True, check=False, diff --git a/tests/integration/factories/daemons/container/test_container_factory.py b/tests/integration/factories/daemons/container/test_container_factory.py index 7534d213..9e3b1969 100644 --- a/tests/integration/factories/daemons/container/test_container_factory.py +++ b/tests/integration/factories/daemons/container/test_container_factory.py @@ -1,6 +1,6 @@ import pytest -from saltfactories.factories.daemons.container import ContainerFactory +from saltfactories.daemons.container import Container from saltfactories.utils import ports from saltfactories.utils import socket @@ -14,7 +14,7 @@ def docker_client(): client = docker.from_env() except DockerException: pytest.skip("Failed to get a connection to docker running on the system") - connectable = ContainerFactory.client_connectable(client) + connectable = Container.client_connectable(client) if connectable is not True: # pragma: no cover pytest.skip(connectable) return client diff --git a/tests/unit/factories/base/test_salt_cli_factory.py b/tests/unit/factories/base/test_salt_cli_factory.py index c09b5796..05daa8a7 100644 --- a/tests/unit/factories/base/test_salt_cli_factory.py +++ b/tests/unit/factories/base/test_salt_cli_factory.py @@ -7,7 +7,7 @@ import pytest -from saltfactories.factories.base import SaltCliFactory +from saltfactories.bases import SaltCli from saltfactories.utils.processes import ProcessResult @@ -60,7 +60,7 @@ def test_default_cli_flags(minion_id, config_dir, config_file, cli_script_name): minion_id, "test.ping", ] - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) assert cmdline == expected @@ -89,7 +89,7 @@ def test_override_log_level(minion_id, config_dir, config_file, cli_script_name, + flag_overrides_args + ["test.ping"] ) - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) assert cmdline == expected @@ -117,7 +117,7 @@ def test_override_output(minion_id, config_dir, config_file, cli_script_name, fl + flag_overrides_args + ["test.ping"] ) - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) assert cmdline == expected @@ -148,7 +148,7 @@ def test_override_output_indent(minion_id, config_dir, config_file, cli_script_n + flag_overrides_args + ["test.ping"] ) - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) assert cmdline == expected @@ -181,9 +181,7 @@ def test_cli_timeout_lesser_than_timeout_kw(minion_id, config_dir, config_file, terminate_mock = mock.MagicMock(return_value=ProcessResult(0, "", "", cmdline=())) popen_mock.terminate = terminate_mock - proc = SaltCliFactory( - cli_script_name=cli_script_name, config=config, default_timeout=default_timeout - ) + proc = SaltCli(cli_script_name=cli_script_name, config=config, default_timeout=default_timeout) with mock.patch.object(proc.impl, "init_terminal", popen_mock), mock.patch.object( proc, "terminate", terminate_mock ): @@ -224,9 +222,7 @@ def test_cli_timeout_matches_timeout_kw(minion_id, config_dir, config_file, cli_ terminate_mock = mock.MagicMock(return_value=ProcessResult(0, "", "", cmdline=())) popen_mock.terminate = terminate_mock - proc = SaltCliFactory( - cli_script_name=cli_script_name, config=config, default_timeout=default_timeout - ) + proc = SaltCli(cli_script_name=cli_script_name, config=config, default_timeout=default_timeout) with mock.patch.object(proc.impl, "init_terminal", popen_mock), mock.patch.object( proc, "terminate", terminate_mock ): @@ -267,9 +263,7 @@ def test_cli_timeout_greater_than_timeout_kw(minion_id, config_dir, config_file, terminate_mock = mock.MagicMock(return_value=ProcessResult(0, "", "", cmdline=())) popen_mock.terminate = terminate_mock - proc = SaltCliFactory( - cli_script_name=cli_script_name, config=config, default_timeout=default_timeout - ) + proc = SaltCli(cli_script_name=cli_script_name, config=config, default_timeout=default_timeout) with mock.patch.object(proc.impl, "init_terminal", popen_mock), mock.patch.object( proc, "terminate", terminate_mock ): @@ -309,9 +303,7 @@ def test_cli_timeout_updates_to_timeout_kw_plus_10( popen_mock.terminate = mock.MagicMock(return_value=ProcessResult(0, "", "", cmdline=())) terminate_mock = mock.MagicMock(return_value=ProcessResult(0, "", "")) - proc = SaltCliFactory( - cli_script_name=cli_script_name, config=config, default_timeout=default_timeout - ) + proc = SaltCli(cli_script_name=cli_script_name, config=config, default_timeout=default_timeout) with mock.patch.object(proc.impl, "init_terminal", popen_mock), mock.patch.object( proc, "terminate", terminate_mock ): @@ -350,9 +342,7 @@ def test_cli_timeout_updates_to_default_timeout_plus_10( popen_mock.terminate = mock.MagicMock(return_value=ProcessResult(0, "", "", cmdline=())) terminate_mock = mock.MagicMock(return_value=ProcessResult(0, "", "")) - proc = SaltCliFactory( - cli_script_name=cli_script_name, config=config, default_timeout=default_timeout - ) + proc = SaltCli(cli_script_name=cli_script_name, config=config, default_timeout=default_timeout) with mock.patch.object(proc.impl, "init_terminal", popen_mock), mock.patch.object( proc, "terminate", terminate_mock ): @@ -390,9 +380,7 @@ def test_override_timeout(minion_id, config_dir, config_file, cli_script_name, f + flag_overrides_args + ["test.ping"] ) - proc = SaltCliFactory( - cli_script_name=cli_script_name, config=config, default_timeout=default_timeout - ) + proc = SaltCli(cli_script_name=cli_script_name, config=config, default_timeout=default_timeout) # We set __cli_timeout_supported__ to True just to test. This would be an attribute set # at the class level for Salt CLI's that support the timeout flag, like for example, salt-run proc.__cli_timeout_supported__ = True @@ -431,9 +419,7 @@ def test_override_timeout_bad_value(minion_id, config_dir, config_file, cli_scri + flag_overrides_args + ["test.ping"] ) - proc = SaltCliFactory( - cli_script_name=cli_script_name, config=config, default_timeout=default_timeout - ) + proc = SaltCli(cli_script_name=cli_script_name, config=config, default_timeout=default_timeout) # We set __cli_timeout_supported__ to True just to test. This would be an attribute set # at the class level for Salt CLI's that support the timeout flag, like for example, salt-run proc.__cli_timeout_supported__ = True @@ -472,7 +458,7 @@ def test_override_config_dir(minion_id, config_dir, config_file, cli_script_name + flag_overrides_args + ["test.ping"] ) - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) assert cmdline == expected @@ -482,7 +468,7 @@ def test_process_output(cli_script_name, config_file): in_stderr = "" cmdline = ["--out=json"] config = {"conf_file": config_file, "id": "the-id"} - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) # Call proc.build_cmdline() so that proc.__json_output__ is properly set proc.build_cmdline() stdout, stderr, json_out = proc.process_output(in_stdout, in_stderr, cmdline=cmdline) @@ -507,7 +493,7 @@ def test_non_string_cli_flags(minion_id, config_dir, config_file, cli_script_nam "test.ping", "foo={}".format(json.dumps(foo)), ] - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) assert cmdline == expected @@ -531,7 +517,7 @@ def test_jsonify_kwargs(minion_id, config_dir, config_file, cli_script_name): ] for key, value in extra_kwargs.items(): expected.append("{}={}".format(key, value)) - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) # Function **kwargs are not ordered dictionaries on some python versions # let's just use sorted to make sure everything is in the output @@ -554,7 +540,7 @@ def test_jsonify_kwargs(minion_id, config_dir, config_file, cli_script_name): for key, value in extra_kwargs.items(): value = json.dumps(value) expected.append("{}={}".format(key, value)) - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) # Function **kwargs are not ordered dictionaries on some python versions # let's just use sorted to make sure everything is in the output @@ -577,7 +563,7 @@ def test_jsonify_kwargs(minion_id, config_dir, config_file, cli_script_name): for key, value in extra_kwargs.items(): value = json.dumps(value) expected.append("{}={}".format(key, value)) - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) # Function **kwargs are not ordered dictionaries on some python versions # let's just use sorted to make sure everything is in the output @@ -597,7 +583,7 @@ def test_jsonify_kwargs(minion_id, config_dir, config_file, cli_script_name): "test.ping", "extra={}".format(json.dumps(extra_kwargs)), ] - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = SaltCli(cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args, **kwargs) # Function **kwargs are not ordered dictionaries on some python versions # let's just use sorted to make sure everything is in the output @@ -605,9 +591,7 @@ def test_jsonify_kwargs(minion_id, config_dir, config_file, cli_script_name): def test_salt_cli_factory_id_attr_comes_first_in_repr(config_file): - proc = SaltCliFactory( - cli_script_name="foo-bar", config={"id": "TheID", "conf_file": config_file} - ) + proc = SaltCli(cli_script_name="foo-bar", config={"id": "TheID", "conf_file": config_file}) regex = r"{}(id='TheID'".format(proc.__class__.__name__) assert repr(proc).startswith(regex) assert str(proc).startswith(regex) @@ -615,7 +599,5 @@ def test_salt_cli_factory_id_attr_comes_first_in_repr(config_file): def test_salt_cli_display_name(config_file): factory_id = "TheID" - proc = SaltCliFactory( - cli_script_name="foo-bar", config={"id": factory_id, "conf_file": config_file} - ) - assert proc.get_display_name() == "{}(id={!r})".format(SaltCliFactory.__name__, factory_id) + proc = SaltCli(cli_script_name="foo-bar", config={"id": factory_id, "conf_file": config_file}) + assert proc.get_display_name() == "{}(id={!r})".format(SaltCli.__name__, factory_id) diff --git a/tests/unit/factories/base/test_salt_daemon_factory.py b/tests/unit/factories/base/test_salt_daemon_factory.py index 513fddb6..8f5616f2 100644 --- a/tests/unit/factories/base/test_salt_daemon_factory.py +++ b/tests/unit/factories/base/test_salt_daemon_factory.py @@ -3,7 +3,7 @@ import pytest -from saltfactories.factories.base import SaltDaemonFactory +from saltfactories.bases import SaltDaemon @pytest.fixture @@ -49,7 +49,7 @@ def test_default_cli_flags(config_dir, config_file, cli_script_name): "--config-dir={}".format(config_dir), "--log-level=critical", ] - proc = SaltDaemonFactory(start_timeout=1, cli_script_name=cli_script_name, config=config) + proc = SaltDaemon(start_timeout=1, cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline() assert cmdline == expected @@ -67,7 +67,7 @@ def test_override_log_level(config_dir, config_file, cli_script_name, flag): cli_script_name, "--config-dir={}".format(config_dir), ] + args - proc = SaltDaemonFactory(start_timeout=1, cli_script_name=cli_script_name, config=config) + proc = SaltDaemon(start_timeout=1, cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args) assert cmdline == expected @@ -84,13 +84,13 @@ def test_override_config_dir(config_dir, config_file, cli_script_name, flag): config = {"conf_file": config_file, "id": "the-id"} expected = [sys.executable, cli_script_name, "--log-level=critical"] + args - proc = SaltDaemonFactory(start_timeout=1, cli_script_name=cli_script_name, config=config) + proc = SaltDaemon(start_timeout=1, cli_script_name=cli_script_name, config=config) cmdline = proc.build_cmdline(*args) assert cmdline == expected def test_salt_daemon_factory_id_attr_comes_first_in_repr(config_file): - proc = SaltDaemonFactory( + proc = SaltDaemon( start_timeout=1, cli_script_name="foo-bar", config={"id": "TheID", "conf_file": config_file} ) regex = r"{}(id='TheID'".format(proc.__class__.__name__) @@ -100,9 +100,9 @@ def test_salt_daemon_factory_id_attr_comes_first_in_repr(config_file): def test_salt_cli_display_name(config_file): factory_id = "TheID" - proc = SaltDaemonFactory( + proc = SaltDaemon( start_timeout=1, cli_script_name="foo-bar", config={"id": factory_id, "conf_file": config_file}, ) - assert proc.get_display_name() == "{}(id={!r})".format(SaltDaemonFactory.__name__, factory_id) + assert proc.get_display_name() == "{}(id={!r})".format(SaltDaemon.__name__, factory_id) diff --git a/tests/unit/factories/cli/test_salt.py b/tests/unit/factories/cli/test_salt.py index 6366919f..fed7b31d 100644 --- a/tests/unit/factories/cli/test_salt.py +++ b/tests/unit/factories/cli/test_salt.py @@ -8,7 +8,7 @@ import pytest -from saltfactories.factories.cli.salt import SaltCliFactory +from saltfactories.cli.salt import Salt @pytest.fixture @@ -49,7 +49,7 @@ def cli_script_name(pytester): def test_missing_minion_id_raises_exception(minion_id, config_dir, config_file, cli_script_name): config = {"conf_file": config_file, "id": "the-id"} args = ["test.ping"] - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = Salt(cli_script_name=cli_script_name, config=config) with pytest.raises(pytest.UsageError) as exc: proc.build_cmdline(*args) assert ( @@ -66,12 +66,12 @@ def test_missing_minion_id_does_not_raise_exception( """ config = {"conf_file": config_file, "id": "the-id"} args = ["test.ping"] + [flag] - proc = SaltCliFactory(cli_script_name=cli_script_name, config=config) + proc = Salt(cli_script_name=cli_script_name, config=config) try: cmdline = proc.build_cmdline(*args) except RuntimeError: pytest.fail( - "The SaltCliFactory raised RuntimeError when the CLI flag '{}' was present in args".format( + "The Salt class raised RuntimeError when the CLI flag '{}' was present in args".format( flag ) ) diff --git a/tests/unit/factories/daemons/test_api.py b/tests/unit/factories/daemons/test_api.py index 71931e46..30ad395d 100644 --- a/tests/unit/factories/daemons/test_api.py +++ b/tests/unit/factories/daemons/test_api.py @@ -1,6 +1,6 @@ import pytest -from saltfactories.factories.daemons.api import SaltApiFactory +from saltfactories.daemons.api import SaltApi from saltfactories.utils import random_string @@ -17,7 +17,7 @@ def test_missing_api_config(salt_factories): def test_configure_raises_exception(salt_factories): with pytest.raises(pytest.UsageError) as exc: - SaltApiFactory.configure(salt_factories, "api") + SaltApi.configure(salt_factories, "api") assert str(exc.value) == ( "The salt-api daemon is not configurable. It uses the salt-master config that " "it's attached to." @@ -26,7 +26,7 @@ def test_configure_raises_exception(salt_factories): def test_load_config_raises_exception(): with pytest.raises(pytest.UsageError) as exc: - SaltApiFactory.load_config("config_file", {}) + SaltApi.load_config("config_file", {}) assert str(exc.value) == ( "The salt-api daemon does not have it's own config file. It uses the salt-master config that " "it's attached to." diff --git a/tests/unit/factories/daemons/test_container.py b/tests/unit/factories/daemons/test_container.py index 0a18d0a6..5cae8e6b 100644 --- a/tests/unit/factories/daemons/test_container.py +++ b/tests/unit/factories/daemons/test_container.py @@ -2,26 +2,26 @@ import pytest -from saltfactories.factories.daemons.container import ContainerFactory +from saltfactories.daemons.container import Container def test_missing_docker_library(): with mock.patch( - "saltfactories.factories.daemons.container.HAS_DOCKER", + "saltfactories.daemons.container.HAS_DOCKER", new_callable=mock.PropertyMock(return_value=False), ): with pytest.raises(RuntimeError) as exc: - ContainerFactory(name="foo", image="bar") + Container(name="foo", image="bar") assert str(exc.value) == "The docker python library was not found installed" def test_missing_requests_library(): with mock.patch( - "saltfactories.factories.daemons.container.HAS_REQUESTS", + "saltfactories.daemons.container.HAS_REQUESTS", new_callable=mock.PropertyMock(return_value=False), ): with pytest.raises(RuntimeError) as exc: - ContainerFactory(name="foo", image="bar") + Container(name="foo", image="bar") assert str(exc.value) == "The requests python library was not found installed"