1
import { randIp, randIpv6 } from '@ngneat/falso';
2
import { describe, expect, test } from 'vitest';
3
import { ipInNetworks } from './ip-in-networks.js';
5
describe('IP address', () => {
7
const ipv6 = randIpv6();
9
describe('succeeds on match', () => {
10
test.each([ipv4, ipv6])('%s', (ip) => {
11
expect(ipInNetworks(ip, [ip])).toBe(true);
15
describe('fails on mismatch', () => {
16
test.each([ipv4, ipv6])('%s', (ip) => {
17
expect(ipInNetworks(ip, [])).toBe(false);
21
test('works with multiple entries', () => {
22
expect(ipInNetworks(ipv4, [randIp(), ipv4, randIpv6()])).toBe(true);
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';
30
describe('succeeds on match', () => {
32
['10.0.0.50', ipv4Range],
33
['2001:4860::1', ipv6Range],
34
])('%s', (ip, range) => {
35
expect(ipInNetworks(ip, [range])).toBe(true);
39
describe('fails on mismatch', () => {
41
['10.0.1.1', ipv4Range],
42
['2001:4861::1', ipv6Range],
43
])('%s', (ip, range) => {
44
expect(ipInNetworks(ip, [range])).toBe(false);
49
describe('CIDR block', () => {
50
const ipv4Cidr = '10.0.0.0/24';
51
const ipv6Cidr = '2001:4860::/32';
53
describe('succeeds on match', () => {
55
['10.0.0.50', ipv4Cidr],
56
['2001:4860::1', ipv6Cidr],
57
])('%s', (ip, range) => {
58
expect(ipInNetworks(ip, [range])).toBe(true);
62
describe('fails on mismatch', () => {
64
['10.0.1.1', ipv4Cidr],
65
['2001:4861::1', ipv6Cidr],
66
])('%s', (ip, range) => {
67
expect(ipInNetworks(ip, [range])).toBe(false);
72
test(`Throws if network definitions are invalid`, async () => {
73
expect(() => ipInNetworks('192.168.0.1', ['invalid'])).toThrowError();