import datetime
import traceback
import pytest
import synta
import synta.oids as oids
def _name_der(cn="Test", org=None):
b = synta.NameBuilder().common_name(cn)
if org:
b = b.organization(org)
return b.build()
def test_format_dn_returns_string():
result = synta.format_dn(_name_der("Example", "Org"))
assert isinstance(result, str)
assert "Example" in result
assert "Org" in result
def test_format_dn_comma_separated():
result = synta.format_dn(synta.NameBuilder().country("US").common_name("test").build())
assert "US" in result
def test_format_dn_empty_name():
result = synta.format_dn(bytes([0x30, 0x00]))
assert isinstance(result, str)
def test_format_dn_via_cert():
key = synta.PrivateKey.generate_ec("P-256")
name = _name_der("Via Cert")
now = datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc)
later = datetime.datetime(2026, 1, 1, tzinfo=datetime.timezone.utc)
cert = (
synta.CertificateBuilder()
.issuer_name(name).subject_name(name)
.public_key(key.public_key).serial_number(1)
.not_valid_before_utc(now).not_valid_after_utc(later)
.sign(key, "sha256")
)
assert "Via Cert" in synta.format_dn(cert.subject_raw_der)
def test_format_dn_slash_returns_string():
result = synta.format_dn_slash(synta.NameBuilder().country("US").common_name("x").build())
assert isinstance(result, str)
def test_format_dn_slash_has_slash_separator():
result = synta.format_dn_slash(
synta.NameBuilder().country("US").organization("ACME").common_name("a").build()
)
assert "/" in result
def test_format_dn_slash_via_cert():
key = synta.PrivateKey.generate_ec("P-256")
name = _name_der("Slash Test")
now = datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc)
later = datetime.datetime(2026, 1, 1, tzinfo=datetime.timezone.utc)
cert = (
synta.CertificateBuilder()
.issuer_name(name).subject_name(name)
.public_key(key.public_key).serial_number(1)
.not_valid_before_utc(now).not_valid_after_utc(later)
.sign(key, "sha256")
)
assert "Slash Test" in synta.format_dn_slash(cert.subject_raw_der)
def main():
tests = [
test_format_dn_returns_string,
test_format_dn_comma_separated,
test_format_dn_empty_name,
test_format_dn_via_cert,
test_format_dn_slash_returns_string,
test_format_dn_slash_has_slash_separator,
test_format_dn_slash_via_cert,
]
passed = failed = 0
for t in tests:
try:
t()
print(f" ok {t.__name__}")
passed += 1
except Exception as e:
print(f" FAIL {t.__name__}: {e}")
traceback.print_exc()
failed += 1
print(f"\n{passed} passed, {failed} failed")
if failed:
raise SystemExit(1)
if __name__ == "__main__":
main()