Skip to content

Commit 494c39f

Browse files
chipspeakopenshift-merge-bot[bot]
authored andcommitted
RHOAIENG-54714: Fix naive datetime comparison in certificate cleanup [cursor-generated]
Use timezone-aware UTC datetimes consistently in certificate cleanup functions. cleanup_old_certificates() and list_tls_certificates() were using naive local-time datetimes, while cleanup_expired_certificates() correctly used UTC-aware datetimes. On non-UTC systems this caused incorrect cutoff calculations and potential TypeError when comparing aware vs naive datetimes. Changes: - list_tls_certificates(): use fromtimestamp(ts, tz=timezone.utc) - cleanup_old_certificates(): use datetime.now(timezone.utc) - Update tests to use UTC-aware datetimes consistently Fix black formatting for fromtimestamp line wrap
1 parent 2b1f3ac commit 494c39f

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

src/codeflare_sdk/common/utils/generate_cert.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,9 @@ def list_tls_certificates():
467467

468468
# Get directory stats
469469
stat_info = cert_dir.stat()
470-
created = datetime.datetime.fromtimestamp(stat_info.st_ctime)
470+
created = datetime.datetime.fromtimestamp(
471+
stat_info.st_ctime, tz=timezone.utc
472+
)
471473

472474
# Calculate total size
473475
total_size = sum(
@@ -562,7 +564,7 @@ def cleanup_old_certificates(days=30, dry_run=True):
562564
"""
563565
import shutil
564566

565-
cutoff_date = datetime.datetime.now() - datetime.timedelta(days=days)
567+
cutoff_date = datetime.datetime.now(timezone.utc) - datetime.timedelta(days=days)
566568
old_certs = []
567569

568570
certificates = list_tls_certificates()

src/codeflare_sdk/common/utils/test_generate_cert.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ def test_cleanup_expired_certificates_dry_run(mocker, tmp_path):
478478
"cluster_name": "expired-cluster",
479479
"namespace": "ns",
480480
"path": str(cert_dir),
481-
"created": datetime.datetime.now(),
481+
"created": datetime.datetime.now(timezone.utc),
482482
"size": 100,
483483
"cert_expiry": expired_time,
484484
}
@@ -516,7 +516,7 @@ def test_cleanup_expired_certificates_delete(mocker, tmp_path):
516516
"cluster_name": "expired-cluster",
517517
"namespace": "ns",
518518
"path": str(cert_dir),
519-
"created": datetime.datetime.now(),
519+
"created": datetime.datetime.now(timezone.utc),
520520
"size": 100,
521521
"cert_expiry": expired_time,
522522
}
@@ -533,6 +533,7 @@ def test_cleanup_old_certificates_dry_run(mocker, tmp_path):
533533
"""Test cleanup_old_certificates in dry_run mode"""
534534
from codeflare_sdk.common.utils.generate_cert import cleanup_old_certificates
535535
import datetime
536+
from datetime import timezone
536537

537538
mocker.patch(
538539
"codeflare_sdk.common.utils.generate_cert._get_tls_base_dir",
@@ -545,7 +546,7 @@ def test_cleanup_old_certificates_dry_run(mocker, tmp_path):
545546
(cert_dir / "tls.crt").write_text("fake cert")
546547

547548
# Mock list_tls_certificates to return an old cert
548-
old_time = datetime.datetime.now() - datetime.timedelta(days=60)
549+
old_time = datetime.datetime.now(timezone.utc) - datetime.timedelta(days=60)
549550
mocker.patch(
550551
"codeflare_sdk.common.utils.generate_cert.list_tls_certificates",
551552
return_value=[
@@ -570,6 +571,7 @@ def test_cleanup_old_certificates_delete(mocker, tmp_path):
570571
"""Test cleanup_old_certificates actually deletes when dry_run=False"""
571572
from codeflare_sdk.common.utils.generate_cert import cleanup_old_certificates
572573
import datetime
574+
from datetime import timezone
573575

574576
mocker.patch(
575577
"codeflare_sdk.common.utils.generate_cert._get_tls_base_dir",
@@ -582,7 +584,7 @@ def test_cleanup_old_certificates_delete(mocker, tmp_path):
582584
(cert_dir / "tls.crt").write_text("fake cert")
583585

584586
# Mock list_tls_certificates to return an old cert
585-
old_time = datetime.datetime.now() - datetime.timedelta(days=60)
587+
old_time = datetime.datetime.now(timezone.utc) - datetime.timedelta(days=60)
586588
mocker.patch(
587589
"codeflare_sdk.common.utils.generate_cert.list_tls_certificates",
588590
return_value=[

0 commit comments

Comments
 (0)