File size: 2,023 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | import { describe, expect, it } from 'vitest';
import { classify } from '../src/security/bindClassify';
describe('classify', () => {
describe('loopback', () => {
it.each([['127.0.0.1'], ['127.255.255.255'], ['::1'], ['localhost']])(
'%s β loopback',
(host) => {
expect(classify(host)).toBe('loopback');
},
);
});
describe('lan', () => {
it.each([
['192.168.1.5'],
['10.0.0.1'],
['172.16.0.1'],
['172.31.255.255'],
['169.254.1.1'],
['fe80::1'],
['fe80:0000:0000:0000:0000:0000:0000:0001'],
['febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff'],
])('%s β lan', (host) => {
expect(classify(host)).toBe('lan');
});
});
describe('public', () => {
it.each([
['8.8.8.8'],
['172.32.0.1'],
['203.0.113.5'],
['2001:4860:4860::8888'],
['fec0::1'],
['example.com'],
])('%s β public', (host) => {
expect(classify(host)).toBe('public');
});
});
describe('wildcard binds default to public unless relaxed', () => {
it('0.0.0.0 β public by default', () => {
expect(classify('0.0.0.0')).toBe('public');
});
it('0.0.0.0 β lan when bindClass=lan', () => {
expect(classify('0.0.0.0', { bindClass: 'lan' })).toBe('lan');
});
it('0.0.0.0 β public when bindClass=public', () => {
expect(classify('0.0.0.0', { bindClass: 'public' })).toBe('public');
});
it(':: β public by default', () => {
expect(classify('::')).toBe('public');
});
it(':: β lan when bindClass=lan', () => {
expect(classify('::', { bindClass: 'lan' })).toBe('lan');
});
it('empty string β public by default', () => {
expect(classify('')).toBe('public');
});
});
it('bindClass override does not reclassify a concrete loopback/lan host', () => {
expect(classify('127.0.0.1', { bindClass: 'public' })).toBe('loopback');
expect(classify('192.168.1.5', { bindClass: 'public' })).toBe('lan');
});
});
|