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,
--- /dev/null
+/**
+ * @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 = ''
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
import { OCPP20IncomingRequestService } from '../../../../src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.js'
import {
type CertificateHashDataChainType,
- type CertificateHashDataType,
GetCertificateIdUseEnumType,
GetInstalledCertificateStatusEnumType,
- HashAlgorithmEnumType,
type OCPP20GetInstalledCertificateIdsRequest,
type OCPP20GetInstalledCertificateIdsResponse,
OCPPVersion,
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
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()
websocketPingInterval: Constants.DEFAULT_WEBSOCKET_PING_INTERVAL,
})
mockStation = initialStation
- mockStation = initialStation
// Use factory function to create station with certificate manager
stationWithCertManager = createStationWithCertificateManager(
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<typeof createMockChargingStation>
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,
import {
ConnectorStatusEnum,
+ HashAlgorithmEnumType,
OCPP20RequiredVariableName,
OCPPVersion,
} from '../../../../src/types/index.js'
// 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.
*
}
}
+/**
+ * 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.