235 lines
7.4 KiB
TypeScript
235 lines
7.4 KiB
TypeScript
import { assertEquals } from "@test/assert";
|
|
import { isDomainCoveredByWildcard } from "./traefikConfig";
|
|
|
|
function runTests() {
|
|
console.log('Running wildcard domain coverage tests...');
|
|
|
|
// Test case 1: Basic wildcard certificate at example.com
|
|
const basicWildcardCerts = new Map([
|
|
['example.com', { exists: true, wildcard: true }]
|
|
]);
|
|
|
|
// Should match first-level subdomains
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('level1.example.com', basicWildcardCerts),
|
|
true,
|
|
'Wildcard cert at example.com should match level1.example.com'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('api.example.com', basicWildcardCerts),
|
|
true,
|
|
'Wildcard cert at example.com should match api.example.com'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('www.example.com', basicWildcardCerts),
|
|
true,
|
|
'Wildcard cert at example.com should match www.example.com'
|
|
);
|
|
|
|
// Should match the root domain (exact match)
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('example.com', basicWildcardCerts),
|
|
true,
|
|
'Wildcard cert at example.com should match example.com itself'
|
|
);
|
|
|
|
// Should NOT match second-level subdomains
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('level2.level1.example.com', basicWildcardCerts),
|
|
false,
|
|
'Wildcard cert at example.com should NOT match level2.level1.example.com'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('deep.nested.subdomain.example.com', basicWildcardCerts),
|
|
false,
|
|
'Wildcard cert at example.com should NOT match deep.nested.subdomain.example.com'
|
|
);
|
|
|
|
// Should NOT match different domains
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('test.otherdomain.com', basicWildcardCerts),
|
|
false,
|
|
'Wildcard cert at example.com should NOT match test.otherdomain.com'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('notexample.com', basicWildcardCerts),
|
|
false,
|
|
'Wildcard cert at example.com should NOT match notexample.com'
|
|
);
|
|
|
|
// Test case 2: Multiple wildcard certificates
|
|
const multipleWildcardCerts = new Map([
|
|
['example.com', { exists: true, wildcard: true }],
|
|
['test.org', { exists: true, wildcard: true }],
|
|
['api.service.net', { exists: true, wildcard: true }]
|
|
]);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('app.example.com', multipleWildcardCerts),
|
|
true,
|
|
'Should match subdomain of first wildcard cert'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('staging.test.org', multipleWildcardCerts),
|
|
true,
|
|
'Should match subdomain of second wildcard cert'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('v1.api.service.net', multipleWildcardCerts),
|
|
true,
|
|
'Should match subdomain of third wildcard cert'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('deep.nested.api.service.net', multipleWildcardCerts),
|
|
false,
|
|
'Should NOT match multi-level subdomain of third wildcard cert'
|
|
);
|
|
|
|
// Test exact domain matches for multiple certs
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('example.com', multipleWildcardCerts),
|
|
true,
|
|
'Should match exact domain of first wildcard cert'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('test.org', multipleWildcardCerts),
|
|
true,
|
|
'Should match exact domain of second wildcard cert'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('api.service.net', multipleWildcardCerts),
|
|
true,
|
|
'Should match exact domain of third wildcard cert'
|
|
);
|
|
|
|
// Test case 3: Non-wildcard certificates (should not match anything)
|
|
const nonWildcardCerts = new Map([
|
|
['example.com', { exists: true, wildcard: false }],
|
|
['specific.domain.com', { exists: true, wildcard: false }]
|
|
]);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('sub.example.com', nonWildcardCerts),
|
|
false,
|
|
'Non-wildcard cert should not match subdomains'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('example.com', nonWildcardCerts),
|
|
false,
|
|
'Non-wildcard cert should not match even exact domain via this function'
|
|
);
|
|
|
|
// Test case 4: Non-existent certificates (should not match)
|
|
const nonExistentCerts = new Map([
|
|
['example.com', { exists: false, wildcard: true }],
|
|
['missing.com', { exists: false, wildcard: true }]
|
|
]);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('sub.example.com', nonExistentCerts),
|
|
false,
|
|
'Non-existent wildcard cert should not match'
|
|
);
|
|
|
|
// Test case 5: Edge cases with special domain names
|
|
const specialDomainCerts = new Map([
|
|
['localhost', { exists: true, wildcard: true }],
|
|
['127-0-0-1.nip.io', { exists: true, wildcard: true }],
|
|
['xn--e1afmkfd.xn--p1ai', { exists: true, wildcard: true }] // IDN domain
|
|
]);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('app.localhost', specialDomainCerts),
|
|
true,
|
|
'Should match subdomain of localhost wildcard'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('test.127-0-0-1.nip.io', specialDomainCerts),
|
|
true,
|
|
'Should match subdomain of nip.io wildcard'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('sub.xn--e1afmkfd.xn--p1ai', specialDomainCerts),
|
|
true,
|
|
'Should match subdomain of IDN wildcard'
|
|
);
|
|
|
|
// Test case 6: Empty input and edge cases
|
|
const emptyCerts = new Map();
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('any.domain.com', emptyCerts),
|
|
false,
|
|
'Empty certificate map should not match any domain'
|
|
);
|
|
|
|
// Test case 7: Domains with single character components
|
|
const singleCharCerts = new Map([
|
|
['a.com', { exists: true, wildcard: true }],
|
|
['x.y.z', { exists: true, wildcard: true }]
|
|
]);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('b.a.com', singleCharCerts),
|
|
true,
|
|
'Should match single character subdomain'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('w.x.y.z', singleCharCerts),
|
|
true,
|
|
'Should match single character subdomain of multi-part domain'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('v.w.x.y.z', singleCharCerts),
|
|
false,
|
|
'Should NOT match multi-level subdomain of single char domain'
|
|
);
|
|
|
|
// Test case 8: Domains with numbers and hyphens
|
|
const numericCerts = new Map([
|
|
['api-v2.service-1.com', { exists: true, wildcard: true }],
|
|
['123.456.net', { exists: true, wildcard: true }]
|
|
]);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('staging.api-v2.service-1.com', numericCerts),
|
|
true,
|
|
'Should match subdomain with hyphens and numbers'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('test.123.456.net', numericCerts),
|
|
true,
|
|
'Should match subdomain with numeric components'
|
|
);
|
|
|
|
assertEquals(
|
|
isDomainCoveredByWildcard('deep.staging.api-v2.service-1.com', numericCerts),
|
|
false,
|
|
'Should NOT match multi-level subdomain with hyphens and numbers'
|
|
);
|
|
|
|
console.log('All wildcard domain coverage tests passed!');
|
|
}
|
|
|
|
// Run all tests
|
|
try {
|
|
runTests();
|
|
} catch (error) {
|
|
console.error('Test failed:', error);
|
|
process.exit(1);
|
|
}
|