Code refactoring (#889)

* Add __all__ to all module and plugin utils.

* Convert quite a few positional args to keyword args.

* Avoid Python 3.8+ syntax.
This commit is contained in:
Felix Fontein
2025-05-16 06:55:57 +02:00
committed by GitHub
parent a5a4e022ba
commit 44bcc8cebc
101 changed files with 1510 additions and 748 deletions

View File

@@ -53,7 +53,7 @@ def test_eckeyparse_cryptography(
fn = tmpdir / "test.pem"
fn.write(pem)
module = MagicMock()
backend = CryptographyBackend(module)
backend = CryptographyBackend(module=module)
key = backend.parse_key(key_file=str(fn))
key.pop("key_obj")
assert key == result
@@ -69,7 +69,7 @@ def test_csridentifiers_cryptography(
fn = tmpdir / "test.csr"
fn.write(csr)
module = MagicMock()
backend = CryptographyBackend(module)
backend = CryptographyBackend(module=module)
identifiers = backend.get_csr_identifiers(csr_filename=str(fn))
assert identifiers == result
identifiers = backend.get_csr_identifiers(csr_content=csr)
@@ -84,7 +84,7 @@ def test_certdays_cryptography(
fn = tmpdir / "test-cert.pem"
fn.write(TEST_CERT)
module = MagicMock()
backend = CryptographyBackend(module)
backend = CryptographyBackend(module=module)
days = backend.get_cert_days(cert_filename=str(fn), now=now)
assert days == expected_days
days = backend.get_cert_days(cert_content=TEST_CERT, now=now)
@@ -103,7 +103,7 @@ def test_get_cert_information(
fn = tmpdir / "test-cert.pem"
fn.write(cert_content)
module = MagicMock()
backend = CryptographyBackend(module)
backend = CryptographyBackend(module=module)
if CRYPTOGRAPHY_TIMEZONE:
expected_cert_info = expected_cert_info._replace(
@@ -126,7 +126,7 @@ def test_get_cert_information(
def test_now(timezone: datetime.timedelta) -> None:
with freeze_time("2024-02-03 04:05:06", tz_offset=timezone):
module = MagicMock()
backend = CryptographyBackend(module)
backend = CryptographyBackend(module=module)
now = backend.get_now()
if CRYPTOGRAPHY_TIMEZONE:
assert now.tzinfo is not None
@@ -142,7 +142,7 @@ def test_parse_acme_timestamp(
) -> None:
with freeze_time("2024-02-03 04:05:06 +00:00", tz_offset=timezone):
module = MagicMock()
backend = CryptographyBackend(module)
backend = CryptographyBackend(module=module)
ts_expected = backend.get_utc_datetime(**expected)
timestamp = backend.parse_acme_timestamp(input)
assert ts_expected == timestamp
@@ -160,9 +160,11 @@ def test_interpolate_timestamp(
) -> None:
with freeze_time("2024-02-03 04:05:06", tz_offset=timezone):
module = MagicMock()
backend = CryptographyBackend(module)
backend = CryptographyBackend(module=module)
ts_start = backend.get_utc_datetime(**start)
ts_end = backend.get_utc_datetime(**end)
ts_expected = backend.get_utc_datetime(**expected)
timestamp = backend.interpolate_timestamp(ts_start, ts_end, percentage)
timestamp = backend.interpolate_timestamp(
ts_start, ts_end, percentage=percentage
)
assert ts_expected == timestamp

View File

@@ -61,7 +61,7 @@ def test_eckeyparse_openssl(
fn.write(pem)
module = MagicMock()
module.run_command = MagicMock(return_value=(0, openssl_output, 0))
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
key = backend.parse_key(key_file=str(fn))
key.pop("key_file")
assert key == result
@@ -75,15 +75,15 @@ def test_csridentifiers_openssl(
fn.write(csr)
module = MagicMock()
module.run_command = MagicMock(return_value=(0, openssl_output, 0))
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
identifiers = backend.get_csr_identifiers(str(fn))
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
identifiers = backend.get_csr_identifiers(csr_filename=str(fn))
assert identifiers == result
@pytest.mark.parametrize("ip, result", TEST_IPS)
def test_normalize_ip(ip: str, result: str) -> None:
module = MagicMock()
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
assert backend._normalize_ip(ip) == result
@@ -96,7 +96,7 @@ def test_certdays_cryptography(
fn.write(TEST_CERT)
module = MagicMock()
module.run_command = MagicMock(return_value=(0, TEST_CERT_OPENSSL_OUTPUT, 0))
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
days = backend.get_cert_days(cert_filename=str(fn), now=now)
assert days == expected_days
days = backend.get_cert_days(cert_content=TEST_CERT, now=now)
@@ -116,7 +116,7 @@ def test_get_cert_information(
fn.write(cert_content)
module = MagicMock()
module.run_command = MagicMock(return_value=(0, openssl_output, 0))
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
expected_cert_info = expected_cert_info._replace(
not_valid_after=ensure_utc_timezone(expected_cert_info.not_valid_after),
@@ -136,7 +136,7 @@ def test_get_cert_information(
def test_now(timezone: datetime.timedelta) -> None:
with freeze_time("2024-02-03 04:05:06", tz_offset=timezone):
module = MagicMock()
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
now = backend.get_now()
assert now.tzinfo is not None
assert now == datetime.datetime(2024, 2, 3, 4, 5, 6, tzinfo=UTC)
@@ -148,7 +148,7 @@ def test_parse_acme_timestamp(
) -> None:
with freeze_time("2024-02-03 04:05:06", tz_offset=timezone):
module = MagicMock()
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
ts_expected = backend.get_utc_datetime(**expected)
timestamp = backend.parse_acme_timestamp(input)
assert ts_expected == timestamp
@@ -166,9 +166,11 @@ def test_interpolate_timestamp(
) -> None:
with freeze_time("2024-02-03 04:05:06", tz_offset=timezone):
module = MagicMock()
backend = OpenSSLCLIBackend(module, openssl_binary="openssl")
backend = OpenSSLCLIBackend(module=module, openssl_binary="openssl")
ts_start = backend.get_utc_datetime(**start)
ts_end = backend.get_utc_datetime(**end)
ts_expected = backend.get_utc_datetime(**expected)
timestamp = backend.interpolate_timestamp(ts_start, ts_end, percentage)
timestamp = backend.interpolate_timestamp(
ts_start, ts_end, percentage=percentage
)
assert ts_expected == timestamp

View File

@@ -23,8 +23,8 @@ from ansible_collections.community.crypto.plugins.module_utils._acme.errors impo
def test_combine_identifier() -> None:
assert combine_identifier("", "") == ":"
assert combine_identifier("a", "b") == "a:b"
assert combine_identifier(identifier_type="", identifier="") == ":"
assert combine_identifier(identifier_type="a", identifier="b") == "a:b"
def test_split_identifier() -> None:
@@ -45,7 +45,7 @@ def test_challenge_from_to_json() -> None:
"status": "valid",
}
client.version = 2
challenge = Challenge.from_json(client, data)
challenge = Challenge.from_json(client=client, data=data)
assert challenge.data == data
assert challenge.type == "type"
assert challenge.url == "xxx"
@@ -58,7 +58,7 @@ def test_challenge_from_to_json() -> None:
"status": "valid",
"token": "foo",
}
challenge = Challenge.from_json(None, data, url="xxx") # type: ignore
challenge = Challenge.from_json(client=None, data=data, url="xxx") # type: ignore
assert challenge.data == data
assert challenge.type == "type"
assert challenge.url == "xxx"
@@ -81,7 +81,7 @@ def test_authorization_from_to_json() -> None:
"value": "example.com",
},
}
authz = Authorization.from_json(client, data, "xxx")
authz = Authorization.from_json(client=client, data=data, url="xxx")
assert authz.url == "xxx"
assert authz.status == "valid"
assert authz.identifier == "example.com"
@@ -112,7 +112,7 @@ def test_authorization_from_to_json() -> None:
},
"wildcard": True,
}
authz = Authorization.from_json(client, data, "xxx")
authz = Authorization.from_json(client=client, data=data, url="xxx")
assert authz.url == "xxx"
assert authz.status == "valid"
assert authz.identifier == "*.example.com"
@@ -146,7 +146,9 @@ def test_authorization_create_error() -> None:
client.version = 2
client.directory.directory = {}
with pytest.raises(ACMEProtocolException) as exc:
Authorization.create(client, "dns", "example.com")
Authorization.create(
client=client, identifier_type="dns", identifier="example.com"
)
assert exc.value.msg == "ACME endpoint does not support pre-authorization."
@@ -197,9 +199,9 @@ def test_wait_for_validation_error() -> None:
},
}
client.get_request = MagicMock(return_value=(data, {}))
authz = Authorization.from_json(client, data, "xxx")
authz = Authorization.from_json(client=client, data=data, url="xxx")
with pytest.raises(ACMEProtocolException) as exc:
authz.wait_for_validation(client, "dns")
authz.wait_for_validation(client=client)
assert exc.value.msg == (
'Failed to validate challenge for dns:example.com: Status is "invalid". Challenge dns-01: Error dns-failed Subproblems:\n'

View File

@@ -94,7 +94,7 @@ TEST_FORMAT_ERROR_PROBLEM: list[tuple[dict[str, t.Any], str, str]] = [
def test_format_error_problem(
problem: dict[str, t.Any], subproblem_prefix: str, result: str
) -> None:
res = format_error_problem(problem, subproblem_prefix)
res = format_error_problem(problem, subproblem_prefix=subproblem_prefix)
assert res == result
@@ -358,7 +358,7 @@ def test_acme_protocol_exception(
module = MagicMock()
module.from_json = from_json
with pytest.raises(ACMEProtocolException) as exc:
raise ACMEProtocolException(module, **input) # type: ignore
raise ACMEProtocolException(module=module, **input) # type: ignore
print(exc.value.msg)
print(exc.value.module_fail_args)

View File

@@ -27,5 +27,5 @@ def test_read_file(tmpdir) -> None:
def test_write_file(tmpdir) -> None:
fn = tmpdir / "test.txt"
module = MagicMock()
write_file(module, str(fn), TEST_TEXT.encode("utf-8"))
write_file(module=module, dest=str(fn), content=TEST_TEXT.encode("utf-8"))
assert fn.read() == TEST_TEXT

View File

@@ -24,7 +24,7 @@ def test_order_from_json() -> None:
"authorizations": [],
}
client.version = 2
order = Order.from_json(client, data, "xxx")
order = Order.from_json(client=client, data=data, url="xxx")
assert order.data == data
assert order.url == "xxx"
assert order.status == "valid"
@@ -44,11 +44,11 @@ def test_wait_for_finalization_error() -> None:
"identifiers": [],
"authorizations": [],
}
order = Order.from_json(client, data, "xxx")
order = Order.from_json(client=client, data=data, url="xxx")
client.get_request = MagicMock(return_value=(data, {}))
with pytest.raises(ACMEProtocolException) as exc:
order.wait_for_finalization(client)
order.wait_for_finalization(client=client)
assert exc.value.msg.startswith(
'Failed to wait for order to complete; got status "invalid". The JSON result: '

View File

@@ -103,7 +103,8 @@ def test_nopad_b64(value: str, result: str) -> None:
def test_pem_to_der(pem: str, der: bytes, tmpdir):
fn = tmpdir / "test.pem"
fn.write(pem)
assert pem_to_der(str(fn)) == der
assert pem_to_der(pem_filename=str(fn)) == der
assert pem_to_der(pem_content=pem) == der
@pytest.mark.parametrize("value, expected_result", TEST_LINKS_HEADER)
@@ -115,7 +116,7 @@ def test_process_links(
def callback(url, rel):
data.append((url, rel))
process_links(value, callback)
process_links(info=value, callback=callback)
assert expected_result == data