Files
python-encrypt-code/tests/integration/main_test.py
T
Brian Bjarke Jensen 422bad3fb8
Python Code Quality / python-code-quality (push) Successful in 11s
Python Test / python-test (push) Successful in 12s
first version
2026-01-07 17:59:16 +01:00

178 lines
4.1 KiB
Python

"""Definition of integration tests for the CLI functionality."""
import subprocess
import os
import sys
from pathlib import Path
def test_generate_password_command() -> None:
"""Test the generate-password CLI command."""
generate_password_args = [
sys.executable,
"-m",
"python_encrypt_code",
"generate-password",
]
output = subprocess.run(
generate_password_args, check=True, capture_output=True, text=True
)
password = output.stdout.strip()
assert len(password) > 0, "Generated password should not be empty"
def test_encrypt_command(
password: str,
aad: str,
simple_python_module: Path,
tmp_dir: Path,
) -> None:
"""Test the encrypt CLI command."""
encrypted_file = tmp_dir / "encrypted.pec"
# Encrypt the simple python module
encrypt_args = [
sys.executable,
"-m",
"python_encrypt_code",
"encrypt",
str(simple_python_module),
"-o",
str(encrypted_file),
"-p",
password,
"-aad",
aad,
]
subprocess.run(encrypt_args, check=True)
assert encrypted_file.exists(), "Encrypted file should be created"
# Encrypt without optional AAD
encrypted_file_no_aad = tmp_dir / "encrypted_no_aad.pec"
encrypt_args_no_aad = [
sys.executable,
"-m",
"python_encrypt_code",
"encrypt",
str(simple_python_module),
"-o",
str(encrypted_file_no_aad),
"-p",
password,
]
subprocess.run(encrypt_args_no_aad, check=True)
assert encrypted_file_no_aad.exists(), "Encrypted file should be created"
def test_decrypt_command(
password: str,
aad: str,
simple_python_module: Path,
tmp_dir: Path,
) -> None:
"""Test the decrypt CLI command."""
encrypted_file = tmp_dir / "encrypted.pec"
decrypted_output_dir = tmp_dir / "decrypted_output"
# Prepare an encrypted file
encrypt_args = [
sys.executable,
"-m",
"python_encrypt_code",
"encrypt",
str(simple_python_module),
"-o",
str(encrypted_file),
"-p",
password,
"-aad",
aad,
]
subprocess.run(encrypt_args, check=True)
# The PasswordProviderExample reads from environment variables
# to mock getting data from external secret management systems.
env = {**os.environ}
env["PEC_PASSWORD"] = password
env["PEC_AAD"] = aad
# Decrypt the file
decrypt_args = [
sys.executable,
"-m",
"python_encrypt_code",
"decrypt",
str(encrypted_file),
"-o",
str(decrypted_output_dir),
]
subprocess.run(decrypt_args, check=True, env=env)
assert decrypted_output_dir.exists(), "Decrypted output directory should be created"
assert any(decrypted_output_dir.iterdir()), (
"Decrypted output directory should not be empty"
)
def test_run_insecure_command(
password: str,
aad: str,
simple_python_module: Path,
tmp_dir: Path,
) -> None:
"""Test the run-insecure CLI command."""
encrypted_file = tmp_dir / "encrypted_run.pec"
# Encrypt the simple python module
encrypt_args = [
sys.executable,
"-m",
"python_encrypt_code",
"encrypt",
str(simple_python_module),
"-o",
str(encrypted_file),
"-p",
password,
"-aad",
aad,
]
subprocess.run(
args=encrypt_args,
check=True,
)
# Verify that the encrypted file was created
assert encrypted_file.exists()
# Store password and AAD in environment variables for the subprocesses
env = dict(**os.environ)
env["PEC_PASSWORD"] = password
env["PEC_AAD"] = aad
# Step 2: Run the encrypted module
run_args = [
sys.executable,
"-m",
"python_encrypt_code",
"run-insecure",
str(encrypted_file),
"--script",
"hello_world.py",
]
result = subprocess.run(
args=run_args,
check=True,
capture_output=True,
text=True,
env=env,
)
# Verify output
assert "Hello, World!" in result.stdout