Files
community.crypto/tests/unit/plugins/module_utils/crypto/test_pem.py
Felix Fontein d8f838c365 Modernize some Python constructs (#876)
* Update __future__ import, remove __metaclass__ assignment.

* Removing obsolete encoding comment.

* Remove unneccessary object inheritance.
2025-05-01 10:36:59 +02:00

64 lines
2.2 KiB
Python

# Copyright (c) 2023, Felix Fontein <felix@fontein.de>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
from __future__ import annotations
import pytest
from ansible_collections.community.crypto.plugins.module_utils.crypto.pem import (
extract_first_pem,
identify_pem_format,
identify_private_key_format,
split_pem_list,
)
PEM_TEST_CASES = [
(b"", [], False, "raw"),
(b"random stuff\nblabla", [], False, "raw"),
(b"-----BEGIN PRIVATE KEY-----", [], False, "raw"),
(
b"-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----",
["-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----"],
True,
"pkcs8",
),
(
b"foo=bar\n# random stuff\n-----BEGIN RSA PRIVATE KEY-----\nblabla\n-----END RSA PRIVATE KEY-----\nmore stuff\n",
["-----BEGIN RSA PRIVATE KEY-----\nblabla\n-----END RSA PRIVATE KEY-----\n"],
True,
"pkcs1",
),
(
b"foo=bar\n# random stuff\n-----BEGIN CERTIFICATE-----\nblabla\n-----END CERTIFICATE-----\nmore stuff\n"
b"\n-----BEGIN CERTIFICATE-----\nfoobar\n-----END CERTIFICATE-----",
[
"-----BEGIN CERTIFICATE-----\nblabla\n-----END CERTIFICATE-----\n",
"-----BEGIN CERTIFICATE-----\nfoobar\n-----END CERTIFICATE-----",
],
True,
"unknown-pem",
),
(
b"-----BEGINCERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n-----BEGINCERTIFICATE-----\n-----END CERTIFICATE-----\n-----BEGINCERTIFICATE-----\n",
[
"-----BEGIN CERTIFICATE-----\n-----BEGINCERTIFICATE-----\n-----END CERTIFICATE-----\n",
],
True,
"unknown-pem",
),
]
@pytest.mark.parametrize("data, pems, is_pem, private_key_type", PEM_TEST_CASES)
def test_pem_handling(data, pems, is_pem, private_key_type):
assert identify_pem_format(data) == is_pem
assert identify_private_key_format(data) == private_key_type
try:
text = data.decode("utf-8")
assert split_pem_list(text) == pems
first_pem = pems[0] if pems else None
assert extract_first_pem(text) == first_pem
except UnicodeDecodeError:
pass