Skip to content

Commit c84d751

Browse files
committed
test(utils): hoist WORKING_TEST_CERT and update cert-related tests
1 parent 9e3f844 commit c84d751

File tree

1 file changed

+40
-87
lines changed

1 file changed

+40
-87
lines changed

packages/vite/src/node/__tests__/utils.spec.ts

Lines changed: 40 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,39 @@ import {
2828
import { isWindows } from '../../shared/utils'
2929
import type { CommonServerOptions, ResolvedServerUrls } from '..'
3030

31+
// Test certificate for SAN parsing (localhost, foo.localhost, *.vite.localhost)
32+
// Generate once:
33+
// openssl req -x509 -nodes -newkey rsa:2048 -days 365 -subj "/CN=example.org" \
34+
// -addext "subjectAltName=DNS:localhost,DNS:foo.localhost,DNS:*.vite.localhost" \
35+
// -keyout /tmp/test.key -out /tmp/test.crt
36+
// Paste /tmp/test.crt below.
37+
const WORKING_TEST_CERT = `
38+
-----BEGIN CERTIFICATE-----
39+
MIID7zCCAtegAwIBAgIJS9D2rIN7tA8mMA0GCSqGSIb3DQEBCwUAMGkxFDASBgNV
40+
BAMTC2V4YW1wbGUub3JnMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWEx
41+
EzARBgNVBAcTCkJsYWNrc2J1cmcxDTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRl
42+
c3QwHhcNMjUwMTMwMDQxNTI1WhcNMjUwMzAxMDQxNTI1WjBpMRQwEgYDVQQDEwtl
43+
eGFtcGxlLm9yZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYD
44+
VQQHEwpCbGFja3NidXJnMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MIIB
45+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNPlCqTmUZ7/F7GyFWDopqZ6
46+
w19Y7/98B10JEeFGTAQIj/RP2UgZNcTABQDUvtkF7y+bOeoVJW7Zz8ozQYhRaDp8
47+
CN2gXMcYeTUku/pKLXyCzHHVrOPAXTeU7sMRgLvPCrrJtx5OjvndW+O/PhohPRi3
48+
iEpPvpM8gi7MVRGhnWVSx0/Ynx5c0+/vqyBTzrM2OX7Ufg8Nv7LaTXpCAnmIQp+f
49+
Sqq7HZ7t6Y7laS4RApityvlnFHZ4f2cEibAKv/vXLED7bgAlGb8R1viPRdMtAPuI
50+
MYvHBgGFjyX1fmq6Mz3aqlAscJILtbQlwty1oYyaENE0lq8+nZXQ+t6I+CIVLQID
51+
AQABo4GZMIGWMAsGA1UdDwQEAwIC9DAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYB
52+
BQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDCDBUBgNVHREETTBLgglsb2NhbGhvc3SC
53+
DWZvby5sb2NhbGhvc3SCECoudml0ZS5sb2NhbGhvc3SCBVs6OjFdhwR/AAABhxD+
54+
gAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQBi302qLCgxWsUalgc2
55+
olFxVKob1xCciS8yUVX6HX0vza0WJ7oGW6qZsBbQtfgDwB/dHv7rwsfpjRWvFhmq
56+
gEUrewa1h0TIC+PPTYYz4M0LOwcLIWZLZr4am1eI7YP9NDgRdhfAfM4hw20vjf2a
57+
kYLKyRTC5+3/ly5opMq+CGLQ8/gnFxhP3ho8JYrRnqLeh3KCTGen3kmbAhD4IOJ9
58+
lxMwFPTTWLFFjxbXjXmt5cEiL2mpcq13VCF2HmheCen37CyYIkrwK9IfLhBd5QQh
59+
WEIBLwjKCAscrtyayXWp6zUTmgvb8PQf//3Mh2DiEngAi3WI/nL+8Y0RkqbvxBar
60+
X2JN
61+
-----END CERTIFICATE-----
62+
`.trim() as any
63+
3164
describe('bareImportRE', () => {
3265
test('should work with normal package name', () => {
3366
expect(bareImportRE.test('vite')).toBe(true)
@@ -220,33 +253,7 @@ describe('extractHostnamesFromSubjectAltName', () => {
220253
}
221254

222255
test('should extract names from actual certificate', () => {
223-
const certText = `
224-
-----BEGIN CERTIFICATE-----
225-
MIID7zCCAtegAwIBAgIJS9D2rIN7tA8mMA0GCSqGSIb3DQEBCwUAMGkxFDASBgNV
226-
BAMTC2V4YW1wbGUub3JnMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWEx
227-
EzARBgNVBAcTCkJsYWNrc2J1cmcxDTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRl
228-
c3QwHhcNMjUwMTMwMDQxNTI1WhcNMjUwMzAxMDQxNTI1WjBpMRQwEgYDVQQDEwtl
229-
eGFtcGxlLm9yZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYD
230-
VQQHEwpCbGFja3NidXJnMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MIIB
231-
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNPlCqTmUZ7/F7GyFWDopqZ6
232-
w19Y7/98B10JEeFGTAQIj/RP2UgZNcTABQDUvtkF7y+bOeoVJW7Zz8ozQYhRaDp8
233-
CN2gXMcYeTUku/pKLXyCzHHVrOPAXTeU7sMRgLvPCrrJtx5OjvndW+O/PhohPRi3
234-
iEpPvpM8gi7MVRGhnWVSx0/Ynx5c0+/vqyBTzrM2OX7Ufg8Nv7LaTXpCAnmIQp+f
235-
Sqq7HZ7t6Y7laS4RApityvlnFHZ4f2cEibAKv/vXLED7bgAlGb8R1viPRdMtAPuI
236-
MYvHBgGFjyX1fmq6Mz3aqlAscJILtbQlwty1oYyaENE0lq8+nZXQ+t6I+CIVLQID
237-
AQABo4GZMIGWMAsGA1UdDwQEAwIC9DAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYB
238-
BQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDCDBUBgNVHREETTBLgglsb2NhbGhvc3SC
239-
DWZvby5sb2NhbGhvc3SCECoudml0ZS5sb2NhbGhvc3SCBVs6OjFdhwR/AAABhxD+
240-
gAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQBi302qLCgxWsUalgc2
241-
olFxVKob1xCciS8yUVX6HX0vza0WJ7oGW6qZsBbQtfgDwB/dHv7rwsfpjRWvFhmq
242-
gEUrewa1h0TIC+PPTYYz4M0LOwcLIWZLZr4am1eI7YP9NDgRdhfAfM4hw20vjf2a
243-
kYLKyRTC5+3/ly5opMq+CGLQ8/gnFxhP3ho8JYrRnqLeh3KCTGen3kmbAhD4IOJ9
244-
lxMwFPTTWLFFjxbXjXmt5cEiL2mpcq13VCF2HmheCen37CyYIkrwK9IfLhBd5QQh
245-
WEIBLwjKCAscrtyayXWp6zUTmgvb8PQf//3Mh2DiEngAi3WI/nL+8Y0RkqbvxBar
246-
X2JN
247-
-----END CERTIFICATE-----
248-
`.trim()
249-
const cert = new crypto.X509Certificate(certText)
256+
const cert = new crypto.X509Certificate(WORKING_TEST_CERT)
250257
expect(
251258
extractHostnamesFromSubjectAltName(cert.subjectAltName ?? ''),
252259
).toStrictEqual([
@@ -912,35 +919,8 @@ describe('getServerUrlByHost', () => {
912919
})
913920

914921
describe('extractHostnamesFromCerts', () => {
915-
// Test certificate containing domains: 'localhost', 'foo.localhost', 'vite.vite.localhost',
916-
const createWorkingCert = `-----BEGIN CERTIFICATE-----
917-
MIID7zCCAtegAwIBAgIJS9D2rIN7tA8mMA0GCSqGSIb3DQEBCwUAMGkxFDASBgNV
918-
BAMTC2V4YW1wbGUub3JnMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWEx
919-
EzARBgNVBAcTCkJsYWNrc2J1cmcxDTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRl
920-
c3QwHhcNMjUwMTMwMDQxNTI1WhcNMjUwMzAxMDQxNTI1WjBpMRQwEgYDVQQDEwtl
921-
eGFtcGxlLm9yZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYD
922-
VQQHEwpCbGFja3NidXJnMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MIIB
923-
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNPlCqTmUZ7/F7GyFWDopqZ6
924-
w19Y7/98B10JEeFGTAQIj/RP2UgZNcTABQDUvtkF7y+bOeoVJW7Zz8ozQYhRaDp8
925-
CN2gXMcYeTUku/pKLXyCzHHVrOPAXTeU7sMRgLvPCrrJtx5OjvndW+O/PhohPRi3
926-
iEpPvpM8gi7MVRGhnWVSx0/Ynx5c0+/vqyBTzrM2OX7Ufg8Nv7LaTXpCAnmIQp+f
927-
Sqq7HZ7t6Y7laS4RApityvlnFHZ4f2cEibAKv/vXLED7bgAlGb8R1viPRdMtAPuI
928-
MYvHBgGFjyX1fmq6Mz3aqlAscJILtbQlwty1oYyaENE0lq8+nZXQ+t6I+CIVLQID
929-
AQABo4GZMIGWMAsGA1UdDwQEAwIC9DAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYB
930-
BQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDCDBUBgNVHREETTBLgglsb2NhbGhvc3SC
931-
DWZvby5sb2NhbGhvc3SCECoudml0ZS5sb2NhbGhvc3SCBVs6OjFdhwR/AAABhxD+
932-
gAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQBi302qLCgxWsUalgc2
933-
olFxVKob1xCciS8yUVX6HX0vza0WJ7oGW6qZsBbQtfgDwB/dHv7rwsfpjRWvFhmq
934-
gEUrewa1h0TIC+PPTYYz4M0LOwcLIWZLZr4am1eI7YP9NDgRdhfAfM4hw20vjf2a
935-
kYLKyRTC5+3/ly5opMq+CGLQ8/gnFxhP3ho8JYrRnqLeh3KCTGen3kmbAhD4IOJ9
936-
lxMwFPTTWLFFjxbXjXmt5cEiL2mpcq13VCF2HmheCen37CyYIkrwK9IfLhBd5QQh
937-
WEIBLwjKCAscrtyayXWp6zUTmgvb8PQf//3Mh2DiEngAi3WI/nL+8Y0RkwbvxBar
938-
X2JN
939-
-----END CERTIFICATE-----
940-
`.trim() as any
941-
942922
test('should extract hostnames from certificate', () => {
943-
const httpsOptions = { cert: [createWorkingCert] } as any
923+
const httpsOptions = { cert: [WORKING_TEST_CERT] } as any
944924
const result = extractHostnamesFromCerts(httpsOptions.cert)
945925

946926
expect(result).toStrictEqual([
@@ -951,7 +931,7 @@ X2JN
951931
})
952932

953933
test('should extract hostnames from multiple certificates', () => {
954-
const httpsOptions = { cert: [createWorkingCert, createWorkingCert] } as any
934+
const httpsOptions = { cert: [WORKING_TEST_CERT, WORKING_TEST_CERT] } as any
955935
const result = extractHostnamesFromCerts(httpsOptions.cert)
956936

957937
expect(result).toStrictEqual([
@@ -977,33 +957,6 @@ describe('resolveServerUrls', () => {
977957
config: { rawBase: '/' } as any,
978958
})
979959

980-
// Test certificate containing domains: 'localhost', 'foo.localhost', 'vite.vite.localhost',
981-
const createWorkingCert = `-----BEGIN CERTIFICATE-----
982-
MIID7zCCAtegAwIBAgIJS9D2rIN7tA8mMA0GCSqGSIb3DQEBCwUAMGkxFDASBgNV
983-
BAMTC2V4YW1wbGUub3JnMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWEx
984-
EzARBgNVBAcTCkJsYWNrc2J1cmcxDTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRl
985-
c3QwHhcNMjUwMTMwMDQxNTI1WhcNMjUwMzAxMDQxNTI1WjBpMRQwEgYDVQQDEwtl
986-
eGFtcGxlLm9yZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYD
987-
VQQHEwpCbGFja3NidXJnMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MIIB
988-
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNPlCqTmUZ7/F7GyFWDopqZ6
989-
w19Y7/98B10JEeFGTAQIj/RP2UgZNcTABQDUvtkF7y+bOeoVJW7Zz8ozQYhRaDp8
990-
CN2gXMcYeTUku/pKLXyCzHHVrOPAXTeU7sMRgLvPCrrJtx5OjvndW+O/PhohPRi3
991-
iEpPvpM8gi7MVRGhnWVSx0/Ynx5c0+/vqyBTzrM2OX7Ufg8Nv7LaTXpCAnmIQp+f
992-
Sqq7HZ7t6Y7laS4RApityvlnFHZ4f2cEibAKv/vXLED7bgAlGb8R1viPRdMtAPuI
993-
MYvHBgGFjyX1fmq6Mz3aqlAscJILtbQlwty1oYyaENE0lq8+nZXQ+t6I+CIVLQID
994-
AQABo4GZMIGWMAsGA1UdDwQEAwIC9DAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYB
995-
BQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDCDBUBgNVHREETTBLgglsb2NhbGhvc3SC
996-
DWZvby5sb2NhbGhvc3SCECoudml0ZS5sb2NhbGhvc3SCBVs6OjFdhwR/AAABhxD+
997-
gAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQBi302qLCgxWsUalgc2
998-
olFxVKob1xCciS8yUVX6HX0vza0WJ7oGW6qZsBbQtfgDwB/dHv7rwsfpjRWvFhmq
999-
gEUrewa1h0TIC+PPTYYz4M0LOwcLIWZLZr4am1eI7YP9NDgRdhfAfM4hw20vjf2a
1000-
kYLKyRTC5+3/ly5opMq+CGLQ8/gnFxhP3ho8JYrRnqLeh3KCTGen3kmbAhD4IOJ9
1001-
lxMwFPTTWLFFjxbXjXmt5cEiL2mpcq13VCF2HmheCen37CyYIkrwK9IfLhBd5QQh
1002-
WEIBLwjKCAscrtyayXWp6zUTmgvb8PQf//3Mh2DiEngAi3WI/nL+8Y0RkwbvxBar
1003-
X2JN
1004-
-----END CERTIFICATE-----
1005-
`.trim() as any
1006-
1007960
test('should handle no certificate', () => {
1008961
const mockServer = createMockServer()
1009962
const { options, hostname, config } = createTestConfig()
@@ -1023,7 +976,7 @@ X2JN
1023976
test('should handle IPv4 single certificate', () => {
1024977
const mockServer = createMockServer()
1025978
const { options, hostname, config } = createTestConfig()
1026-
const httpsOptions = { cert: [createWorkingCert] }
979+
const httpsOptions = { cert: [WORKING_TEST_CERT] }
1027980

1028981
const result = resolveServerUrls(
1029982
mockServer,
@@ -1041,7 +994,7 @@ X2JN
1041994
test('should handle IPv4 multiple certificates', () => {
1042995
const mockServer = createMockServer()
1043996
const { options, hostname, config } = createTestConfig()
1044-
const httpsOptions = { cert: [createWorkingCert, createWorkingCert] }
997+
const httpsOptions = { cert: [WORKING_TEST_CERT, WORKING_TEST_CERT] }
1045998

1046999
const result = resolveServerUrls(
10471000
mockServer,
@@ -1059,7 +1012,7 @@ X2JN
10591012
test('should handle IPv6 single certificate', () => {
10601013
const mockServer = createMockServer('IPv6', '::1')
10611014
const { options, hostname, config } = createTestConfig()
1062-
const httpsOptions = { cert: [createWorkingCert] }
1015+
const httpsOptions = { cert: [WORKING_TEST_CERT] }
10631016

10641017
const result = resolveServerUrls(
10651018
mockServer,
@@ -1077,7 +1030,7 @@ X2JN
10771030
test('should handle IPv6 multiple certificates', () => {
10781031
const mockServer = createMockServer('IPv6', '::1')
10791032
const { options, hostname, config } = createTestConfig()
1080-
const httpsOptions = { cert: [createWorkingCert, createWorkingCert] }
1033+
const httpsOptions = { cert: [WORKING_TEST_CERT, WORKING_TEST_CERT] }
10811034

10821035
const result = resolveServerUrls(
10831036
mockServer,

0 commit comments

Comments
 (0)