directus

Форк
0
/
ip-in-networks.test.ts 
74 строки · 1.8 Кб
1
import { randIp, randIpv6 } from '@ngneat/falso';
2
import { describe, expect, test } from 'vitest';
3
import { ipInNetworks } from './ip-in-networks.js';
4

5
describe('IP address', () => {
6
	const ipv4 = randIp();
7
	const ipv6 = randIpv6();
8

9
	describe('succeeds on match', () => {
10
		test.each([ipv4, ipv6])('%s', (ip) => {
11
			expect(ipInNetworks(ip, [ip])).toBe(true);
12
		});
13
	});
14

15
	describe('fails on mismatch', () => {
16
		test.each([ipv4, ipv6])('%s', (ip) => {
17
			expect(ipInNetworks(ip, [])).toBe(false);
18
		});
19
	});
20

21
	test('works with multiple entries', () => {
22
		expect(ipInNetworks(ipv4, [randIp(), ipv4, randIpv6()])).toBe(true);
23
	});
24
});
25

26
describe('IP range', () => {
27
	const ipv4Range = '10.0.0.0-10.0.0.255';
28
	const ipv6Range = '2001:4860::-2001:4860:ffff:ffff:ffff:ffff:ffff:ffff';
29

30
	describe('succeeds on match', () => {
31
		test.each([
32
			['10.0.0.50', ipv4Range],
33
			['2001:4860::1', ipv6Range],
34
		])('%s', (ip, range) => {
35
			expect(ipInNetworks(ip, [range])).toBe(true);
36
		});
37
	});
38

39
	describe('fails on mismatch', () => {
40
		test.each([
41
			['10.0.1.1', ipv4Range],
42
			['2001:4861::1', ipv6Range],
43
		])('%s', (ip, range) => {
44
			expect(ipInNetworks(ip, [range])).toBe(false);
45
		});
46
	});
47
});
48

49
describe('CIDR block', () => {
50
	const ipv4Cidr = '10.0.0.0/24';
51
	const ipv6Cidr = '2001:4860::/32';
52

53
	describe('succeeds on match', () => {
54
		test.each([
55
			['10.0.0.50', ipv4Cidr],
56
			['2001:4860::1', ipv6Cidr],
57
		])('%s', (ip, range) => {
58
			expect(ipInNetworks(ip, [range])).toBe(true);
59
		});
60
	});
61

62
	describe('fails on mismatch', () => {
63
		test.each([
64
			['10.0.1.1', ipv4Cidr],
65
			['2001:4861::1', ipv6Cidr],
66
		])('%s', (ip, range) => {
67
			expect(ipInNetworks(ip, [range])).toBe(false);
68
		});
69
	});
70
});
71

72
test(`Throws if network definitions are invalid`, async () => {
73
	expect(() => ipInNetworks('192.168.0.1', ['invalid'])).toThrowError();
74
});
75

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.