Hetzner failover IP: refactoring (#56203)

* Rename helper function.

* Extract hetzner.py module_utils.

* Rewrite docs.

* Add module docs fragment.

* Split up get_failover function.

* Add tests for new function.

* hetzner_pass -> hetzner_password

* Move common argspec to module_utils.
This commit is contained in:
Felix Fontein
2019-05-10 08:33:51 +02:00
committed by René Moser
parent 7a02c40bbc
commit bd47e64bc7
4 changed files with 222 additions and 139 deletions

View File

@@ -1,11 +1,12 @@
# Copyright: (c) 2017 Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
import copy
import json
import pytest
from mock import MagicMock
from ansible.modules.net_tools import hetzner_failover_ip
from ansible.module_utils import hetzner
class ModuleFailException(Exception):
@@ -96,18 +97,18 @@ FETCH_URL_JSON_FAIL = [
@pytest.mark.parametrize("return_value, accept_errors, result", FETCH_URL_JSON_SUCCESS)
def test_fetch_url_json(monkeypatch, return_value, accept_errors, result):
module = get_module_mock()
hetzner_failover_ip.fetch_url = MagicMock(return_value=return_value)
hetzner.fetch_url = MagicMock(return_value=return_value)
assert hetzner_failover_ip.fetch_url_json(module, 'https://foo/bar', accept_errors=accept_errors) == result
assert hetzner.fetch_url_json(module, 'https://foo/bar', accept_errors=accept_errors) == result
@pytest.mark.parametrize("return_value, accept_errors, result", FETCH_URL_JSON_FAIL)
def test_fetch_url_json_fail(monkeypatch, return_value, accept_errors, result):
module = get_module_mock()
hetzner_failover_ip.fetch_url = MagicMock(return_value=return_value)
hetzner.fetch_url = MagicMock(return_value=return_value)
with pytest.raises(ModuleFailException) as exc:
hetzner_failover_ip.fetch_url_json(module, 'https://foo/bar', accept_errors=accept_errors)
hetzner.fetch_url_json(module, 'https://foo/bar', accept_errors=accept_errors)
assert exc.value.fail_msg == result
assert exc.value.fail_kwargs == dict()
@@ -122,10 +123,17 @@ GET_FAILOVER_SUCCESS = [
body=json.dumps(dict(
failover=dict(
active_server_ip='1.1.1.1',
ip='1.2.3.4',
netmask='255.255.255.255',
)
)).encode('utf-8'),
)),
'1.1.1.1'
'1.1.1.1',
dict(
active_server_ip='1.1.1.1',
ip='1.2.3.4',
netmask='255.255.255.255',
)
),
]
@@ -147,21 +155,41 @@ GET_FAILOVER_FAIL = [
]
@pytest.mark.parametrize("ip, return_value, result", GET_FAILOVER_SUCCESS)
def test_get_failover(monkeypatch, ip, return_value, result):
@pytest.mark.parametrize("ip, return_value, result, record", GET_FAILOVER_SUCCESS)
def test_get_failover_record(monkeypatch, ip, return_value, result, record):
module = get_module_mock()
hetzner_failover_ip.fetch_url = MagicMock(return_value=return_value)
hetzner.fetch_url = MagicMock(return_value=copy.deepcopy(return_value))
assert hetzner_failover_ip.get_failover(module, ip) == result
assert hetzner.get_failover_record(module, ip) == record
@pytest.mark.parametrize("ip, return_value, result", GET_FAILOVER_FAIL)
def test_get_failover_record_fail(monkeypatch, ip, return_value, result):
module = get_module_mock()
hetzner.fetch_url = MagicMock(return_value=copy.deepcopy(return_value))
with pytest.raises(ModuleFailException) as exc:
hetzner.get_failover_record(module, ip)
assert exc.value.fail_msg == result
assert exc.value.fail_kwargs == dict()
@pytest.mark.parametrize("ip, return_value, result, record", GET_FAILOVER_SUCCESS)
def test_get_failover(monkeypatch, ip, return_value, result, record):
module = get_module_mock()
hetzner.fetch_url = MagicMock(return_value=copy.deepcopy(return_value))
assert hetzner.get_failover(module, ip) == result
@pytest.mark.parametrize("ip, return_value, result", GET_FAILOVER_FAIL)
def test_get_failover_fail(monkeypatch, ip, return_value, result):
module = get_module_mock()
hetzner_failover_ip.fetch_url = MagicMock(return_value=return_value)
hetzner.fetch_url = MagicMock(return_value=copy.deepcopy(return_value))
with pytest.raises(ModuleFailException) as exc:
hetzner_failover_ip.get_failover(module, ip)
hetzner.get_failover(module, ip)
assert exc.value.fail_msg == result
assert exc.value.fail_kwargs == dict()
@@ -220,18 +248,18 @@ SET_FAILOVER_FAIL = [
@pytest.mark.parametrize("ip, value, return_value, result", SET_FAILOVER_SUCCESS)
def test_set_failover(monkeypatch, ip, value, return_value, result):
module = get_module_mock()
hetzner_failover_ip.fetch_url = MagicMock(return_value=return_value)
hetzner.fetch_url = MagicMock(return_value=copy.deepcopy(return_value))
assert hetzner_failover_ip.set_failover(module, ip, value) == result
assert hetzner.set_failover(module, ip, value) == result
@pytest.mark.parametrize("ip, value, return_value, result", SET_FAILOVER_FAIL)
def test_set_failover_fail(monkeypatch, ip, value, return_value, result):
module = get_module_mock()
hetzner_failover_ip.fetch_url = MagicMock(return_value=return_value)
hetzner.fetch_url = MagicMock(return_value=copy.deepcopy(return_value))
with pytest.raises(ModuleFailException) as exc:
hetzner_failover_ip.set_failover(module, ip, value)
hetzner.set_failover(module, ip, value)
assert exc.value.fail_msg == result
assert exc.value.fail_kwargs == dict()