From e205c6d1cd5365991137bdd763cadbf76cfaac2a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sun, 1 Mar 2026 23:40:35 +0100 Subject: [PATCH] refactor(test): consolidate certificate constants and factory functions - Create OCPP20CertificateTestData.ts with shared certificate constants - Add createMockCertificateHashData, createMockCertificateHashDataChain, createMockOCSPRequestData factory functions to OCPP20TestUtils.ts - Migrate 5 test files to use consolidated imports - Remove duplicate local certificate definitions and factory functions --- .../ocpp/2.0/OCPP20CertificateManager.test.ts | 26 ++--- .../ocpp/2.0/OCPP20CertificateTestData.ts | 98 +++++++++++++++++++ ...ngRequestService-CertificateSigned.test.ts | 41 +------- ...Service-GetInstalledCertificateIds.test.ts | 18 +--- ...gRequestService-InstallCertificate.test.ts | 31 +----- .../2.0/OCPP20RequestService-ISO15118.test.ts | 12 +-- .../ocpp/2.0/OCPP20TestUtils.ts | 58 ++++++++++- 7 files changed, 175 insertions(+), 109 deletions(-) create mode 100644 tests/charging-station/ocpp/2.0/OCPP20CertificateTestData.ts diff --git a/tests/charging-station/ocpp/2.0/OCPP20CertificateManager.test.ts b/tests/charging-station/ocpp/2.0/OCPP20CertificateManager.test.ts index 483e1656..9b6fbc27 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20CertificateManager.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20CertificateManager.test.ts @@ -14,32 +14,22 @@ import { InstallCertificateUseEnumType, } from '../../../../src/types/index.js' import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js' - +import { + EMPTY_PEM_CERTIFICATE, + INVALID_PEM_WRONG_MARKERS, + VALID_PEM_CERTIFICATE_EXTENDED, +} from './OCPP20CertificateTestData.js' const TEST_STATION_HASH_ID = 'test-station-hash-12345' const TEST_CERT_TYPE = InstallCertificateUseEnumType.CSMSRootCertificate -const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE----- -MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY -a5uYmO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0y -NzAxMTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVk -IENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxm -mO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0yNzAx -MTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVkIENl -cnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K -8pzuYmOvfLNNMBQLq2K8pzuY0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K8pzuYq ------END CERTIFICATE-----` +// Use VALID_PEM_CERTIFICATE_EXTENDED as the main valid certificate for these tests +const VALID_PEM_CERTIFICATE = VALID_PEM_CERTIFICATE_EXTENDED +// Alias for consistency with existing test expectations const INVALID_PEM_NO_MARKERS = ` MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY a5uYmO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0y ` - -const INVALID_PEM_WRONG_MARKERS = `-----BEGIN PRIVATE KEY----- -MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY ------END PRIVATE KEY-----` - -const EMPTY_PEM_CERTIFICATE = '' - // eslint-disable-next-line @typescript-eslint/no-unused-vars -- kept for future assertions const _EXPECTED_HASH_DATA: CertificateHashDataType = { hashAlgorithm: HashAlgorithmEnumType.SHA256, diff --git a/tests/charging-station/ocpp/2.0/OCPP20CertificateTestData.ts b/tests/charging-station/ocpp/2.0/OCPP20CertificateTestData.ts new file mode 100644 index 00000000..7ebb92bd --- /dev/null +++ b/tests/charging-station/ocpp/2.0/OCPP20CertificateTestData.ts @@ -0,0 +1,98 @@ +/** + * @file Consolidated certificate test data for OCPP 2.0 tests + * @description Centralized PEM certificate constants used across certificate-related test files + */ + +// ============================================================================ +// Valid Certificates +// ============================================================================ + +/** + * Valid PEM certificate (short format) for basic certificate tests. + * Used in InstallCertificate and CertificateSigned tests. + */ +export const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE----- +MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl +c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM +BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz +p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR +AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME +GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS +nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ== +-----END CERTIFICATE-----` + +/** + * Valid PEM certificate (extended format) for CertificateManager tests. + * This is a longer certificate used for more complex validation scenarios. + */ +export const VALID_PEM_CERTIFICATE_EXTENDED = `-----BEGIN CERTIFICATE----- +MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY +a5uYmO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0y +NzAxMTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVk +IENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxm +mO6K8pzuYmOvfLNNMC5leGFtcGxlLmNvbTAeFw0xNzAxMTIyMTI3NDBaFw0yNzAx +MTAyMTI3NDBaMC4xLDAqBgNVBAMTI2V4YW1wbGUuY29tIFNlbGYgU2lnbmVkIENl +cnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K +8pzuYmOvfLNNMBQLq2K8pzuY0BAQEFAAOCAQ8AMIIBCgKCAQEAqGxmmO6K8pzuYq +-----END CERTIFICATE-----` + +/** + * Valid certificate chain with two certificates for chain validation tests. + */ +export const VALID_CERTIFICATE_CHAIN = `-----BEGIN CERTIFICATE----- +MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl +c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM +BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz +p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR +AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME +GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS +nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBkTCB+wIJAKHBfpvPA0GYMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl +c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM +BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz +p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR +AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME +GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS +nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ== +-----END CERTIFICATE-----` + +// ============================================================================ +// Invalid Certificates +// ============================================================================ + +/** + * Invalid PEM certificate missing BEGIN/END markers. + */ +export const INVALID_PEM_CERTIFICATE_MISSING_MARKERS = `MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBn +Rlc3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBA +MMBnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjx` + +/** + * Invalid PEM certificate with wrong markers (PRIVATE KEY instead of CERTIFICATE). + */ +export const INVALID_PEM_WRONG_MARKERS = `-----BEGIN PRIVATE KEY----- +MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3Qq8teleNzMHjvLuHvVsY +-----END PRIVATE KEY-----` + +/** + * Expired PEM certificate (validity period: 2020-01-01 to 2021-01-01). + */ +export const EXPIRED_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE----- +MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl +c3RDQTAeFw0yMDAxMDEwMDAwMDBaFw0yMTAxMDEwMDAwMDBaMBExDzANBgNVBAMM +BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz +p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR +AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME +GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBCwUAA0EAexpired== +-----END CERTIFICATE-----` + +/** + * Empty PEM certificate for edge case testing. + */ +export const EMPTY_PEM_CERTIFICATE = '' diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-CertificateSigned.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-CertificateSigned.test.ts index b9f94c39..4416d5b5 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-CertificateSigned.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-CertificateSigned.test.ts @@ -21,44 +21,13 @@ import { Constants } from '../../../../src/utils/index.js' import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js' import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js' import { createMockChargingStation } from '../../ChargingStationTestUtils.js' +import { + INVALID_PEM_CERTIFICATE_MISSING_MARKERS, + VALID_CERTIFICATE_CHAIN, + VALID_PEM_CERTIFICATE, +} from './OCPP20CertificateTestData.js' import { createMockCertificateManager } from './OCPP20TestUtils.js' -const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE----- -MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl -c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM -BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz -p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR -AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME -GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS -nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ== ------END CERTIFICATE-----` - -const VALID_CERTIFICATE_CHAIN = `-----BEGIN CERTIFICATE----- -MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl -c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM -BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz -p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR -AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME -GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS -nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIBkTCB+wIJAKHBfpvPA0GYMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl -c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM -BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz -p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR -AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME -GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS -nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ== ------END CERTIFICATE-----` - -const INVALID_PEM_CERTIFICATE_MISSING_MARKERS = `MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBn -Rlc3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBA -MMBnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjx` - await describe('I04 - CertificateSigned', async () => { let station: ChargingStation let incomingRequestService: OCPP20IncomingRequestService diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-GetInstalledCertificateIds.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-GetInstalledCertificateIds.test.ts index 4bd9651f..8c8a8198 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-GetInstalledCertificateIds.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-GetInstalledCertificateIds.test.ts @@ -13,10 +13,8 @@ import { createTestableIncomingRequestService } from '../../../../src/charging-s import { OCPP20IncomingRequestService } from '../../../../src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.js' import { type CertificateHashDataChainType, - type CertificateHashDataType, GetCertificateIdUseEnumType, GetInstalledCertificateStatusEnumType, - HashAlgorithmEnumType, type OCPP20GetInstalledCertificateIdsRequest, type OCPP20GetInstalledCertificateIdsResponse, OCPPVersion, @@ -26,25 +24,11 @@ import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js' import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js' import { createMockChargingStation } from '../../ChargingStationTestUtils.js' import { + createMockCertificateHashDataChain, createMockCertificateManager, createStationWithCertificateManager, } from './OCPP20TestUtils.js' -const createMockCertificateHashData = (serialNumber = '123456789'): CertificateHashDataType => ({ - hashAlgorithm: HashAlgorithmEnumType.SHA256, - issuerKeyHash: 'abc123def456', - issuerNameHash: 'xyz789uvw012', - serialNumber, -}) - -const createMockCertificateHashDataChain = ( - certificateType: GetCertificateIdUseEnumType, - serialNumber = '123456789' -): CertificateHashDataChainType => ({ - certificateHashData: createMockCertificateHashData(serialNumber), - certificateType, -}) - await describe('I04 - GetInstalledCertificateIds', async () => { let station: ChargingStation let stationWithCertManager: ChargingStationWithCertificateManager diff --git a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts index 50c6da9b..ff1ae48b 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20IncomingRequestService-InstallCertificate.test.ts @@ -22,36 +22,16 @@ import { Constants } from '../../../../src/utils/index.js' import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js' import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js' import { createMockChargingStation } from '../../ChargingStationTestUtils.js' +import { + EXPIRED_PEM_CERTIFICATE, + INVALID_PEM_CERTIFICATE_MISSING_MARKERS, + VALID_PEM_CERTIFICATE, +} from './OCPP20CertificateTestData.js' import { createMockCertificateManager, createStationWithCertificateManager, } from './OCPP20TestUtils.js' -const VALID_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE----- -MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl -c3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBAMM -BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz -p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR -AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME -GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA0EAYw7K5EKcJGj8TH7NpP3L3hRPZF8qU5QfT0zQBqBm4U5JtDnS -nFUewM7PNhYJsWjJRpLdAL1kC6x8bW1kQ5FVUQ== ------END CERTIFICATE-----` - -const INVALID_PEM_CERTIFICATE_MISSING_MARKERS = `MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBn -Rlc3RDQTAeFw0yNDAxMDEwMDAwMDBaFw0yOTAxMDEwMDAwMDBaMBExDzANBgNVBA -MMBnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjx` - -const EXPIRED_PEM_CERTIFICATE = `-----BEGIN CERTIFICATE----- -MIIBkTCB+wIJAKHBfpvPA0GXMA0GCSqGSIb3DQEBCwUAMBExDzANBgNVBAMMBnRl -c3RDQTAeFw0yMDAxMDEwMDAwMDBaFw0yMTAxMDEwMDAwMDBaMBExDzANBgNVBAMM -BnRlc3RDQTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC5p8U8zTk8TT5H5s8mjxJz -p+eDAh+xW1+eTprjqD4vfQSXCv8hC3TlPpZwHk8C5dJmEp8Dqv3lAO5bVkzzqbhR -AgMBAAGjUzBRMB0GA1UdDgQWBBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAfBgNVHSME -GDAWgBRc8RqFu0nnqJdw3f9nFVXm9BxeUDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBCwUAA0EAexpired== ------END CERTIFICATE-----` - await describe('I03 - InstallCertificate', async () => { afterEach(() => { standardCleanup() @@ -75,7 +55,6 @@ await describe('I03 - InstallCertificate', async () => { websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL, }) mockStation = initialStation - mockStation = initialStation // Use factory function to create station with certificate manager stationWithCertManager = createStationWithCertificateManager( diff --git a/tests/charging-station/ocpp/2.0/OCPP20RequestService-ISO15118.test.ts b/tests/charging-station/ocpp/2.0/OCPP20RequestService-ISO15118.test.ts index 164fe046..912d2a83 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20RequestService-ISO15118.test.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20RequestService-ISO15118.test.ts @@ -19,29 +19,19 @@ import { type OCPP20GetCertificateStatusResponse, OCPP20RequestCommand, OCPPVersion, - type OCSPRequestDataType, ReasonCodeEnumType, } from '../../../../src/types/index.js' import { Constants } from '../../../../src/utils/index.js' import { standardCleanup } from '../../../helpers/TestLifecycleHelpers.js' import { TEST_CHARGING_STATION_BASE_NAME } from '../../ChargingStationTestConstants.js' import { createMockChargingStation } from '../../ChargingStationTestUtils.js' - +import { createMockOCSPRequestData } from './OCPP20TestUtils.js' // Sample Base64 EXI request (mock - represents CertificateInstallationReq) const MOCK_EXI_REQUEST = 'SGVsbG8gV29ybGQgRVhJIFJlcXVlc3Q=' const MOCK_EXI_RESPONSE = 'SGVsbG8gV29ybGQgRVhJIFJlc3BvbnNl' const MOCK_ISO15118_SCHEMA_VERSION = 'urn:iso:std:iso:15118:-20:AC' const MOCK_OCSP_RESULT = 'TW9jayBPQ1NQIFJlc3VsdCBCYXNlNjQ=' -// Mock OCSP request data for GetCertificateStatus tests -const createMockOCSPRequestData = (): OCSPRequestDataType => ({ - hashAlgorithm: HashAlgorithmEnumType.SHA256, - issuerKeyHash: 'abc123def456issuerkeyhash', - issuerNameHash: 'abc123def456issuernamehash', - responderURL: 'http://ocsp.example.com', - serialNumber: '1234567890', -}) - await describe('OCPP20 ISO15118 Request Service', async () => { await describe('M02 - Get15118EVCertificate Request', async () => { let station: ReturnType diff --git a/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts b/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts index 8cec1db6..87a72853 100644 --- a/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts +++ b/tests/charging-station/ocpp/2.0/OCPP20TestUtils.ts @@ -5,7 +5,14 @@ import type { ChargingStationWithCertificateManager } from '../../../../src/char import type { OCPP20RequestService } from '../../../../src/charging-station/ocpp/2.0/OCPP20RequestService.js' import type { ConfigurationKey } from '../../../../src/types/ChargingStationOcppConfiguration.js' import type { EmptyObject } from '../../../../src/types/EmptyObject.js' -import type { JsonType, OCPP20RequestCommand } from '../../../../src/types/index.js' +import type { + CertificateHashDataChainType, + CertificateHashDataType, + GetCertificateIdUseEnumType, + JsonType, + OCPP20RequestCommand, + OCSPRequestDataType, +} from '../../../../src/types/index.js' import type { OCPP20IdTokenType, OCPP20TransactionContext, @@ -13,6 +20,7 @@ import type { import { ConnectorStatusEnum, + HashAlgorithmEnumType, OCPP20RequiredVariableName, OCPPVersion, } from '../../../../src/types/index.js' @@ -689,6 +697,40 @@ export interface MockCertificateManagerOptions { // Certificate Manager Mock Factory // ============================================================================ +/** + * Create mock certificate hash data for testing. + * @param serialNumber - Optional serial number (default: '123456789') + * @returns CertificateHashDataType object + */ +export function createMockCertificateHashData (serialNumber = '123456789'): CertificateHashDataType { + return { + hashAlgorithm: HashAlgorithmEnumType.SHA256, + issuerKeyHash: 'abc123def456', + issuerNameHash: 'xyz789uvw012', + serialNumber, + } +} + +/** + * Create mock certificate hash data chain for testing. + * @param certificateType - The certificate type + * @param serialNumber - Optional serial number (default: '123456789') + * @returns CertificateHashDataChainType object + */ +export function createMockCertificateHashDataChain ( + certificateType: GetCertificateIdUseEnumType, + serialNumber = '123456789' +): CertificateHashDataChainType { + return { + certificateHashData: createMockCertificateHashData(serialNumber), + certificateType, + } +} + +// ============================================================================ +// Certificate Test Data Factory Functions +// ============================================================================ + /** * Create a mock certificate manager for OCPP 2.0 certificate operation testing. * @@ -747,6 +789,20 @@ export function createMockCertificateManager (options: MockCertificateManagerOpt } } +/** + * Create mock OCSP request data for GetCertificateStatus tests. + * @returns OCSPRequestDataType object with default test values + */ +export function createMockOCSPRequestData (): OCSPRequestDataType { + return { + hashAlgorithm: HashAlgorithmEnumType.SHA256, + issuerKeyHash: 'abc123def456issuerkeyhash', + issuerNameHash: 'abc123def456issuernamehash', + responderURL: 'http://ocsp.example.com', + serialNumber: '1234567890', + } +} + /** * Create a mock ChargingStation with certificate manager for testing. * This encapsulates the type casting pattern for ChargingStationWithCertificateManager. -- 2.53.0