You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansible/test/units/modules/cloud/amazon/test_aws_direct_connect_lin...

177 lines
7.1 KiB
Python

# (c) 2017 Red Hat Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
import pytest
import os
import collections
from units.utils.amazon_placebo_fixtures import placeboify, maybe_sleep
from ansible.modules.cloud.amazon import aws_direct_connect_link_aggregation_group as lag_module
from ansible.module_utils.ec2 import get_aws_connection_info, boto3_conn
@pytest.fixture(scope="module")
def dependencies():
# each LAG dict will contain the keys: module, connections, virtual_interfaces
Dependencies = collections.namedtuple("Dependencies", ["lag_1", "lag_2"])
lag_1 = dict()
lag_2 = dict()
vanilla_params = {"name": "ansible_lag_1",
"location": "EqSe2",
"num_connections": 1,
"min_links": 0,
"bandwidth": "1Gbps"}
for lag in ("ansible_lag_1", "ansible_lag_2"):
params = dict(vanilla_params)
params["name"] = lag
if lag == "ansible_lag_1":
lag_1["module"] = FakeModule(**params)
else:
lag_2["module"] = FakeModule(**params)
if os.getenv("PLACEBO_RECORD"):
region, ec2_url, aws_connect_kwargs = get_aws_connection_info(lag_1["module"], boto3=True)
client = boto3_conn(lag_1["module"], conn_type="client", resource="directconnect", region=region, endpoint=ec2_url, **aws_connect_kwargs)
# See if link aggregation groups exist
for name in ("ansible_lag_1", "ansible_lag_2"):
lag_id = lag_module.create_lag(client, num_connections=1, location="EqSe2", bandwidth="1Gbps", name=name, connection_id=None)
if name == "ansible_lag_1":
lag_1["lag_id"] = lag_id
lag_1["name"] = name
else:
lag_2["lag_id"] = lag_id
lag_2["name"] = name
yield Dependencies(lag_1=lag_1, lag_2=lag_2)
else:
lag_1.update(lag_id="dxlag-fgkk4dja", name="ansible_lag_1")
lag_2.update(lag_id="dxlag-fgytkicv", name="ansible_lag_2")
yield Dependencies(lag_1=lag_1, lag_2=lag_2)
if os.getenv("PLACEBO_RECORD"):
# clean up
lag_module.ensure_absent(client, lag_1["lag_id"], lag_1["name"], True, True, True, 120)
lag_module.ensure_absent(client, lag_2["lag_id"], lag_2["name"], True, True, True, 120)
class FakeModule(object):
def __init__(self, **kwargs):
self.params = kwargs
def fail_json(self, *args, **kwargs):
self.exit_args = args
self.exit_kwargs = kwargs
raise Exception("FAIL")
def exit_json(self, *args, **kwargs):
self.exit_args = args
self.exit_kwargs = kwargs
def test_nonexistent_lag_status(placeboify, maybe_sleep):
client = placeboify.client("directconnect")
exists = lag_module.lag_exists(client=client,
lag_id="doesntexist",
lag_name="doesntexist",
verify=True)
assert not exists
def test_lag_status(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
status = lag_module.lag_status(client, lag_id=dependencies.lag_1.get("lag_id"))
assert status.get("lagId") == dependencies.lag_1.get("lag_id")
assert status.get("lagName") == "ansible_lag_1"
def test_lag_exists(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
exists = lag_module.lag_exists(client=client,
lag_id=dependencies.lag_1.get("lag_id"),
lag_name=None,
verify=True)
assert exists
def test_lag_exists_using_name(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
exists = lag_module.lag_exists(client=client,
lag_id=None,
lag_name=dependencies.lag_1.get("name"),
verify=True)
assert exists
def test_nonexistent_lag_does_not_exist(placeboify, maybe_sleep):
client = placeboify.client("directconnect")
exists = lag_module.lag_exists(client=client,
lag_id="dxlag-XXXXXXXX",
lag_name="doesntexist",
verify=True)
assert not exists
def test_lag_changed_true(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
status = lag_module.lag_status(client=client, lag_id=dependencies.lag_1.get("lag_id"))
assert lag_module.lag_changed(status, "new_name", 1)
def test_lag_changed_true_no(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
status = lag_module.lag_status(client=client, lag_id=dependencies.lag_1.get("lag_id"))
assert not lag_module.lag_changed(status, "ansible_lag_1", 0)
def test_update_lag(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
status_before = lag_module.lag_status(client=client, lag_id=dependencies.lag_2.get("lag_id"))
lag_module.update_lag(client,
lag_id=dependencies.lag_2.get("lag_id"),
lag_name="ansible_lag_2_update",
min_links=0,
wait=False,
wait_timeout=0,
num_connections=1)
status_after = lag_module.lag_status(client=client, lag_id=dependencies.lag_2.get("lag_id"))
assert status_before != status_after
# remove the lag name from the statuses and verify it was the only thing changed
del status_before['lagName']
del status_after['lagName']
assert status_before == status_after
def test_delete_nonexistent_lag(placeboify, maybe_sleep):
client = placeboify.client("directconnect")
changed = lag_module.ensure_absent(client, "dxlag-XXXXXXXX", "doesntexist", True, True, True, 120)
assert not changed
def test_delete_lag_with_connections_without_force_delete(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
with pytest.raises(Exception) as error_message:
lag_module.ensure_absent(client, dependencies.lag_1.get("lag_id"), "ansible_lag_1", False, True, True, 120)
assert "To force deletion of the LAG use delete_force: True" in error_message
def test_delete_lag_with_connections(placeboify, maybe_sleep, dependencies):
client = placeboify.client("directconnect")
changed = lag_module.ensure_absent(client, dependencies.lag_1.get("lag_id"), "ansible_lag_1", True, True, True, 120)
assert changed