313 lines
10 KiB
Python
313 lines
10 KiB
Python
|
# Copyright (c) 2015-2018 Cisco Systems, Inc.
|
||
|
#
|
||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
# of this software and associated documentation files (the "Software"), to
|
||
|
# deal in the Software without restriction, including without limitation the
|
||
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||
|
# sell copies of the Software, and to permit persons to whom the Software is
|
||
|
# furnished to do so, subject to the following conditions:
|
||
|
#
|
||
|
# The above copyright notice and this permission notice shall be included in
|
||
|
# all copies or substantial portions of the Software.
|
||
|
#
|
||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||
|
# DEALINGS IN THE SOFTWARE.
|
||
|
|
||
|
import os
|
||
|
|
||
|
import pytest
|
||
|
import sh
|
||
|
from molecule.scenario import ephemeral_directory
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def scenario_to_test(request):
|
||
|
return request.param
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def scenario_name(request):
|
||
|
try:
|
||
|
return request.param
|
||
|
except AttributeError:
|
||
|
return None
|
||
|
|
||
|
|
||
|
@pytest.fixture
|
||
|
def driver_name(request):
|
||
|
return request.param
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_check(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("check", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_cleanup(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("cleanup", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_converge(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("converge", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_create(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("create", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.skip(
|
||
|
reason="Disabled due to https://github.com/ansible/galaxy/issues/2030"
|
||
|
)
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("dependency", "hetznercloud", "ansible-galaxy")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_dependency_ansible_galaxy(
|
||
|
request, scenario_to_test, with_scenario, scenario_name
|
||
|
):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("dependency", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
dependency_role = os.path.join(
|
||
|
ephemeral_directory("molecule"),
|
||
|
"dependency",
|
||
|
"ansible-galaxy",
|
||
|
"roles",
|
||
|
"timezone",
|
||
|
)
|
||
|
assert os.path.isdir(dependency_role)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("dependency", "hetznercloud", "gilt")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_dependency_gilt(
|
||
|
request, scenario_to_test, with_scenario, scenario_name
|
||
|
):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("dependency", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
dependency_role = os.path.join(
|
||
|
ephemeral_directory("molecule"), "dependency", "gilt", "roles", "timezone"
|
||
|
)
|
||
|
assert os.path.isdir(dependency_role)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("dependency", "hetznercloud", "shell")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_dependency_shell(
|
||
|
request, scenario_to_test, with_scenario, scenario_name
|
||
|
):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("dependency", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
dependency_role = os.path.join(
|
||
|
ephemeral_directory("molecule"), "dependency", "shell", "roles", "timezone"
|
||
|
)
|
||
|
assert os.path.isdir(dependency_role)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_destroy(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("destroy", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_idempotence(scenario_to_test, with_scenario, scenario_name):
|
||
|
pytest.helpers.idempotence(scenario_name)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"driver_name",
|
||
|
[
|
||
|
("digitalocean"),
|
||
|
("docker"),
|
||
|
("ec2"),
|
||
|
("gce"),
|
||
|
("linode"),
|
||
|
("openstack"),
|
||
|
("vagrant"),
|
||
|
],
|
||
|
indirect=["driver_name"],
|
||
|
)
|
||
|
def test_command_init_role(temp_dir, driver_name, skip_test):
|
||
|
pytest.helpers.init_role(temp_dir, driver_name)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize("driver_name", [("hetznercloud")], indirect=["driver_name"])
|
||
|
def test_command_init_scenario(temp_dir, driver_name, skip_test):
|
||
|
pytest.helpers.init_scenario(temp_dir, driver_name)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_lint(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("lint", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, expected",
|
||
|
[
|
||
|
(
|
||
|
"driver/hetznercloud",
|
||
|
"hetznercloud",
|
||
|
"""
|
||
|
Instance Name Driver Name Provisioner Name Scenario Name Created Converged
|
||
|
--------------- ------------- ------------------ --------------- --------- -----------
|
||
|
instance hetznercloud ansible default false false
|
||
|
instance-1 hetznercloud ansible multi-node false false
|
||
|
instance-2 hetznercloud ansible multi-node false false
|
||
|
""".strip(), # noqa
|
||
|
)
|
||
|
],
|
||
|
indirect=["scenario_to_test", "driver_name"],
|
||
|
)
|
||
|
def test_command_list(scenario_to_test, with_scenario, expected):
|
||
|
pytest.helpers.list(expected)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, expected",
|
||
|
[
|
||
|
(
|
||
|
"driver/hetznercloud",
|
||
|
"hetznercloud",
|
||
|
"""
|
||
|
instance hetznercloud ansible default false false
|
||
|
instance-1 hetznercloud ansible multi-node false false
|
||
|
instance-2 hetznercloud ansible multi-node false false
|
||
|
""".strip(),
|
||
|
) # noqa
|
||
|
],
|
||
|
indirect=["scenario_to_test", "driver_name"],
|
||
|
)
|
||
|
def test_command_list_with_format_plain(scenario_to_test, with_scenario, expected):
|
||
|
pytest.helpers.list_with_format_plain(expected)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, login_args, scenario_name",
|
||
|
[
|
||
|
(
|
||
|
"driver/hetznercloud",
|
||
|
"hetznercloud",
|
||
|
[["instance-1", ".*instance-1.*"], ["instance-2", ".*instance-2.*"]],
|
||
|
"multi-node",
|
||
|
)
|
||
|
],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_login(scenario_to_test, with_scenario, login_args, scenario_name):
|
||
|
pytest.helpers.login(login_args, scenario_name)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_prepare(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
|
||
|
cmd = sh.molecule.bake("create", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
cmd = sh.molecule.bake("prepare", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_side_effect(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("side-effect", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_syntax(scenario_to_test, with_scenario, scenario_name):
|
||
|
options = {"scenario_name": scenario_name}
|
||
|
cmd = sh.molecule.bake("syntax", **options)
|
||
|
pytest.helpers.run_command(cmd)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", None)],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_test(scenario_to_test, with_scenario, scenario_name, driver_name):
|
||
|
pytest.helpers.test(driver_name, scenario_name)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"scenario_to_test, driver_name, scenario_name",
|
||
|
[("driver/hetznercloud", "hetznercloud", "default")],
|
||
|
indirect=["scenario_to_test", "driver_name", "scenario_name"],
|
||
|
)
|
||
|
def test_command_verify(scenario_to_test, with_scenario, scenario_name):
|
||
|
pytest.helpers.verify(scenario_name)
|