railiance-cluster/tests/test_public_tls_metadata.py
codex c562d7134c
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s
feat(recovery): prepare owner-bound offline TLS continuity preflight
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a1468b-63fa-7710-85dc-8f2e16b3ebfa
2026-10-17 02:12:35 +02:00

34 lines
1.9 KiB
Python

import importlib.util
from pathlib import Path
from datetime import datetime,timedelta,timezone
from unittest.mock import patch
import pytest
from cryptography import x509
from cryptography.hazmat.primitives import hashes,serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.x509.oid import NameOID
spec=importlib.util.spec_from_file_location('metadata',Path(__file__).parents[1]/'tools/public-tls-metadata.py');m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m)
@pytest.fixture
def cert(tmp_path):
key=rsa.generate_private_key(public_exponent=65537,key_size=2048);name=x509.Name([x509.NameAttribute(NameOID.COMMON_NAME,'synthetic.invalid')]);now=datetime.now(timezone.utc)
cert=(x509.CertificateBuilder().subject_name(name).issuer_name(name).public_key(key.public_key()).serial_number(1).not_valid_before(now-timedelta(minutes=1)).not_valid_after(now+timedelta(hours=1)).add_extension(x509.SubjectAlternativeName([x509.DNSName('synthetic.invalid')]),critical=False).sign(key,hashes.SHA256()))
p=tmp_path/'public.pem';p.write_bytes(cert.public_bytes(serialization.Encoding.PEM));return p
def test_public_only_metadata_and_hashes(cert):
result=m.describe(cert,cert)
assert result['leaf_dns_sans']==['synthetic.invalid'];assert result['network_contacted'] is False
assert '-----BEGIN' not in str(result)
def test_mixed_or_private_pem_is_refused(cert):
cert.write_bytes(cert.read_bytes()+b'\n-----BEGIN PRIVATE KEY-----\nsynthetic\n-----END PRIVATE KEY-----')
with pytest.raises(ValueError):m.public_bundle(cert)
def test_oversize_is_refused_before_read(cert):
with patch.object(m,'LIMIT',1),patch.object(m.os,'open') as opened:
with pytest.raises(ValueError):m.public_bundle(cert)
opened.assert_not_called()
def test_symlink_refused(cert):
link=cert.with_name('link.pem');link.symlink_to(cert)
with pytest.raises(ValueError):m.public_bundle(link)