Skip to content

Commit 0cafa61

Browse files
committed
adding test cases for certificate source
1 parent 9185cbd commit 0cafa61

2 files changed

Lines changed: 55 additions & 17 deletions

File tree

awscrt/aws_iot_metrics.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ def _get_encoded_feature_list(client_options):
295295

296296
# I: certificate_source - detected from TlsContextOptions factory method
297297
if client_options.tls_ctx is not None:
298-
val = _certificate_source_metrics_value(getattr(client_options.tls_ctx, '_certificate_source', None))
298+
val = _certificate_source_metrics_value(client_options.tls_ctx._certificate_source)
299299
if val:
300300
features.append(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/{val}")
301301

@@ -347,7 +347,7 @@ def _get_encoded_feature_list_mqtt3(proxy_options, tls_ctx=None):
347347

348348
# I: certificate_source - detected from TlsContextOptions factory method
349349
if tls_ctx is not None:
350-
val = _certificate_source_metrics_value(getattr(tls_ctx, '_certificate_source', None))
350+
val = _certificate_source_metrics_value(tls_ctx._certificate_source)
351351
if val:
352352
features.append(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/{val}")
353353

test/test_aws_iot_metrics.py

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
_protocol_version_metrics_value,
1212
_socket_implementation_metrics_value,
1313
_http_proxy_type_metrics_value,
14-
_certificate_source_metrics_value,
1514
IOT_SDK_METRICS_FEATURE_VERSION,
1615
_get_encoded_feature_list,
1716
_get_encoded_feature_list_mqtt3,
@@ -421,21 +420,16 @@ def test_custom_library_name(self):
421420

422421

423422
class TestCertificateSourceMetrics(NativeResourceTest):
424-
"""Test certificate source metrics encoding."""
425-
426-
def test_certificate_source_mapping_values(self):
427-
"""Verify each _CertificateSource maps to the correct metrics value."""
428-
self.assertEqual("A", _certificate_source_metrics_value(_CertificateSource.CERTIFICATE_FILES))
429-
self.assertEqual("B", _certificate_source_metrics_value(_CertificateSource.PKCS11))
430-
self.assertEqual("C", _certificate_source_metrics_value(_CertificateSource.WINDOWS_CERT_STORE))
431-
self.assertEqual("E", _certificate_source_metrics_value(_CertificateSource.PKCS12_FILE))
432-
self.assertIsNone(_certificate_source_metrics_value(None))
433-
434-
def test_certificate_source_in_feature_list(self):
435-
"""TLS context with certificate source should include feature I in metrics."""
423+
"""Test certificate source metrics encoding through the TLS context binding path."""
424+
425+
def _make_tls_ctx_with_source(self, source):
436426
tls_options = TlsContextOptions()
437-
tls_options._certificate_source = _CertificateSource.CERTIFICATE_FILES
438-
tls_ctx = ClientTlsContext(tls_options)
427+
tls_options._certificate_source = source
428+
return ClientTlsContext(tls_options)
429+
430+
def test_certificate_source_certificate_files(self):
431+
"""CERTIFICATE_FILES source encodes as 'A' in feature list."""
432+
tls_ctx = self._make_tls_ctx_with_source(_CertificateSource.CERTIFICATE_FILES)
439433

440434
options = ClientOptions(host_name="localhost", port=8883, tls_ctx=tls_ctx)
441435
result = _get_encoded_feature_list(options)
@@ -444,6 +438,50 @@ def test_certificate_source_in_feature_list(self):
444438
result_mqtt3 = _get_encoded_feature_list_mqtt3(proxy_options=None, tls_ctx=tls_ctx)
445439
self.assertIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/A", result_mqtt3)
446440

441+
def test_certificate_source_pkcs11(self):
442+
"""PKCS11 source encodes as 'B' in feature list."""
443+
tls_ctx = self._make_tls_ctx_with_source(_CertificateSource.PKCS11)
444+
445+
options = ClientOptions(host_name="localhost", port=8883, tls_ctx=tls_ctx)
446+
result = _get_encoded_feature_list(options)
447+
self.assertIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/B", result)
448+
449+
result_mqtt3 = _get_encoded_feature_list_mqtt3(proxy_options=None, tls_ctx=tls_ctx)
450+
self.assertIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/B", result_mqtt3)
451+
452+
def test_certificate_source_windows_cert_store(self):
453+
"""WINDOWS_CERT_STORE source encodes as 'C' in feature list."""
454+
tls_ctx = self._make_tls_ctx_with_source(_CertificateSource.WINDOWS_CERT_STORE)
455+
456+
options = ClientOptions(host_name="localhost", port=8883, tls_ctx=tls_ctx)
457+
result = _get_encoded_feature_list(options)
458+
self.assertIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/C", result)
459+
460+
result_mqtt3 = _get_encoded_feature_list_mqtt3(proxy_options=None, tls_ctx=tls_ctx)
461+
self.assertIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/C", result_mqtt3)
462+
463+
def test_certificate_source_pkcs12(self):
464+
"""PKCS12_FILE source encodes as 'E' in feature list."""
465+
tls_ctx = self._make_tls_ctx_with_source(_CertificateSource.PKCS12_FILE)
466+
467+
options = ClientOptions(host_name="localhost", port=8883, tls_ctx=tls_ctx)
468+
result = _get_encoded_feature_list(options)
469+
self.assertIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/E", result)
470+
471+
result_mqtt3 = _get_encoded_feature_list_mqtt3(proxy_options=None, tls_ctx=tls_ctx)
472+
self.assertIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/E", result_mqtt3)
473+
474+
def test_no_certificate_source_omits_feature(self):
475+
"""No certificate source (None) should omit feature I from metrics."""
476+
tls_ctx = self._make_tls_ctx_with_source(None)
477+
478+
options = ClientOptions(host_name="localhost", port=8883, tls_ctx=tls_ctx)
479+
result = _get_encoded_feature_list(options)
480+
self.assertNotIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/", result)
481+
482+
result_mqtt3 = _get_encoded_feature_list_mqtt3(proxy_options=None, tls_ctx=tls_ctx)
483+
self.assertNotIn(f"{_MetricsFeatureId.CERTIFICATE_SOURCE.value}/", result_mqtt3)
484+
447485

448486
if __name__ == '__main__':
449487
unittest.main()

0 commit comments

Comments
 (0)