forked from HAL9000/cleveragents-core
8ea00f5185
Co-authored-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Co-committed-by: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
125 lines
6.1 KiB
Gherkin
125 lines
6.1 KiB
Gherkin
Feature: TLS certificate health-check script
|
|
The ``scripts/check-tls-cert.py`` script inspects TLS certificates for
|
|
CleverAgents infrastructure hostnames and reports errors, warnings, and
|
|
certificate metadata. These scenarios exercise the script's core logic
|
|
using injected SSL contexts so no real network connections are made.
|
|
|
|
# ── Regression tests for issue #1543 ──────────────────────────────────
|
|
# The TLS handshake failure on git.dev.cleveragents.com was caused by the
|
|
# hostname being absent from the certificate's Subject Alternative Names
|
|
# (SANs). The scenarios below verify that the check script correctly
|
|
# detects this condition and reports it as an error.
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script detects missing SAN for git.dev.cleveragents.com
|
|
Given a TLS certificate for "git.cleverthis.com" with SANs "git.cleverthis.com,git.cleveragents.com"
|
|
And the certificate expires in 90 days
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com"
|
|
Then the check result should be a failure
|
|
And the check error should mention "not found in certificate SANs"
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script passes when hostname is present in SANs
|
|
Given a TLS certificate for "git.cleverthis.com" with SANs "git.cleverthis.com,git.dev.cleveragents.com"
|
|
And the certificate expires in 90 days
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com"
|
|
Then the check result should be a success
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script detects expired certificate
|
|
Given a TLS certificate for "git.cleverthis.com" with SANs "git.cleverthis.com,git.dev.cleveragents.com"
|
|
And the certificate expired 5 days ago
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com"
|
|
Then the check result should be a failure
|
|
And the check error should mention "expired"
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script warns when certificate expires within threshold
|
|
Given a TLS certificate for "git.cleverthis.com" with SANs "git.cleverthis.com,git.dev.cleveragents.com"
|
|
And the certificate expires in 15 days
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com" with warn-days 30
|
|
Then the check result should be a success
|
|
And the check warning should mention "expires in"
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script does not warn when certificate expires beyond threshold
|
|
Given a TLS certificate for "git.cleverthis.com" with SANs "git.cleverthis.com,git.dev.cleveragents.com"
|
|
And the certificate expires in 60 days
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com" with warn-days 30
|
|
Then the check result should be a success
|
|
And the check has no warnings
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script reports TLS handshake failure as an error
|
|
Given the TLS connection raises an SSLError "CERTIFICATE_VERIFY_FAILED"
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com"
|
|
Then the check result should be a failure
|
|
And the check error should mention "TLS"
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script reports connection timeout as an error
|
|
Given the TLS connection times out
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com"
|
|
Then the check result should be a failure
|
|
And the check error should mention "timed out"
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script reports connection refused as an error
|
|
Given the TLS connection is refused
|
|
When the TLS check runs for hostname "git.dev.cleveragents.com"
|
|
Then the check result should be a failure
|
|
And the check error should mention "Connection failed"
|
|
|
|
# ── Wildcard SAN matching ──────────────────────────────────────────────
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script accepts wildcard SAN matching the hostname
|
|
Given a TLS certificate for "git.cleverthis.com" with SANs "*.cleverthis.com"
|
|
And the certificate expires in 90 days
|
|
When the TLS check runs for hostname "git.cleverthis.com"
|
|
Then the check result should be a success
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: Script rejects wildcard SAN that does not match the hostname
|
|
Given a TLS certificate for "git.cleverthis.com" with SANs "*.cleveragents.com"
|
|
And the certificate expires in 90 days
|
|
When the TLS check runs for hostname "git.cleverthis.com"
|
|
Then the check result should be a failure
|
|
And the check error should mention "not found in certificate SANs"
|
|
|
|
# ── Helper function unit tests ─────────────────────────────────────────
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: _hostname_matches_san returns True for exact match
|
|
When I check if hostname "git.dev.cleveragents.com" matches SANs "git.dev.cleveragents.com,git.cleveragents.com"
|
|
Then the SAN match result should be True
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: _hostname_matches_san returns False when hostname is absent
|
|
When I check if hostname "git.dev.cleveragents.com" matches SANs "git.cleveragents.com,git.cleverthis.com"
|
|
Then the SAN match result should be False
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: _hostname_matches_san handles wildcard SANs correctly
|
|
When I check if hostname "git.cleverthis.com" matches SANs "*.cleverthis.com"
|
|
Then the SAN match result should be True
|
|
|
|
# @tdd_issue @tdd_issue_1543 @tdd_expected_fail @skip
|
|
@skip
|
|
Scenario: _hostname_matches_san rejects multi-level wildcard
|
|
When I check if hostname "a.b.cleverthis.com" matches SANs "*.cleverthis.com"
|
|
Then the SAN match result should be False
|