Home Reference Source Test

test/specs/generic/network/address/NetAddress.spec.js

describe('NetAddress', () => {
    const invalid6v4 = '-1.2.3.4';
    const invalid7v4 = '256.0.2.1';
    const invalid8v4 = '1.2.a.4';
    const invalid9v4 = '1.2.3';
    const invalid10v4 = '1.2.3.';
    const invalid11v4 = '1.2.3.5.';
    const invalid12v4 = '1.2.3..5';
    const invalid14v4 = '1.2.3.4.5';

    it('rejects invalid IPv4 addresses', () => {
        expect(() => {
            NetAddress.fromIP(invalid6v4);
        }).toThrowError(`Malformed IP address ${invalid6v4}`);
        expect(() => {
            NetAddress.fromIP(invalid7v4);
        }).toThrowError(`Malformed IP address ${invalid7v4}`);
        expect(() => {
            NetAddress.fromIP(invalid8v4);
        }).toThrowError(`Malformed IP address ${invalid8v4}`);
        expect(() => {
            NetAddress.fromIP(invalid9v4);
        }).toThrowError(`Malformed IP address ${invalid9v4}`);
        expect(() => {
            NetAddress.fromIP(invalid10v4);
        }).toThrowError(`Malformed IP address ${invalid10v4}`);
        expect(() => {
            NetAddress.fromIP(invalid11v4);
        }).toThrowError(`Malformed IP address ${invalid11v4}`);
        expect(() => {
            NetAddress.fromIP(invalid12v4);
        }).toThrowError(`Malformed IP address ${invalid12v4}`);
        expect(() => {
            NetAddress.fromIP(invalid14v4);
        }).toThrowError(`Malformed IP address ${invalid14v4}`);
    });

    const invalid2v6 = 'a:x:1';
    const invalid3v6 = 'test';
    const invalid4v6 = '1:2:3:4:5:6:7:8:9';
    const invalid5v6 = '1:2:3:4:5:6:7:8:1.2.3.4';
    const invalid6v6 = '1::1.2.3.4';
    const invalid7v6 = '1:2:3:4:5:6:1.2.3.4';
    // TODO broadcast addresses

    it('rejects invalid IPv6 addresses', () => {
        expect(() => {
            NetAddress.fromIP(invalid2v6);
        }).toThrowError(`Malformed IP address ${invalid2v6}`);
        expect(() => {
            NetAddress.fromIP(invalid3v6);
        }).toThrowError(`Malformed IP address ${invalid3v6}`);
        expect(() => {
            NetAddress.fromIP(invalid4v6);
        }).toThrowError(`Malformed IP address ${invalid4v6}`);
        expect(() => {
            NetAddress.fromIP(invalid5v6);
        }).toThrowError(`Malformed IP address ${invalid5v6}`);
        expect(() => {
            NetAddress.fromIP(invalid6v6);
        }).toThrowError(`Malformed IP address ${invalid6v6}`);
        expect(() => {
            NetAddress.fromIP(invalid7v6);
        }).toThrowError(`Malformed IP address ${invalid7v6}`);
    });

    const long1v4 = '08.008.8.000008';
    const short1v4 = '8.8.8.8';

    it('canonicalizes IPv4 addresses', () => {
        expect(NetAddress.fromIP(long1v4).toString()).toEqual(short1v4);
    });


    const long1v6 = '2001:db8:0:0:0:0:2:1';
    const short1v6 = '2001:0db8:0000:0000:0000:0000:0002:0001';
    const long2v6 = '2001:db8:0000:1:1:1:1:1';
    const short2v6 = '2001:0db8:0000:0001:0001:0001:0001:0001';
    const long3v6 = '2001:db8:0:0:1:0:0:1';
    const short3v6 = '2001:0db8:0000:0000:0001:0000:0000:0001';
    const long4v6 = '2001:0db8::0001';
    const short4v6 = '2001:0db8:0000:0000:0000:0000:0000:0001';
    const long5v6 = '0:0::0:2:1';
    const short5v6 = '0000:0000:0000:0000:0000:0000:0002:0001';
    const long6v6 = '1:0:0:4:5::8';
    const short6v6 = '0001:0000:0000:0004:0005:0000:0000:0008';
    const long7v6 = '::08.008.8.000008';
    const short7v6 = '8.8.8.8';
    const long8v6 = '1:0:0:4:5::8';
    const short8v6 = '0001:0000:0000:0004:0005:0000:0000:0008';
    const long9v6 = '0:0:0::0:1.2.3.4';
    const short9v6 = '1.2.3.4';
    const long10v6 = '0:0:0::4:1.2.3.4';
    const short10v6 = '1.2.3.4';

    it('canonicalizes IPv6 addresses', () => {
        expect(NetAddress.fromIP(long1v6).toString()).toEqual(short1v6);
        expect(NetAddress.fromIP(long2v6).toString()).toEqual(short2v6);
        expect(NetAddress.fromIP(long3v6).toString()).toEqual(short3v6);
        expect(NetAddress.fromIP(long4v6).toString()).toEqual(short4v6);
        expect(NetAddress.fromIP(long5v6).toString()).toEqual(short5v6);
        expect(NetAddress.fromIP(long6v6).toString()).toEqual(short6v6);
        expect(NetAddress.fromIP(long7v6).toString()).toEqual(short7v6);
        expect(NetAddress.fromIP(long8v6).toString()).toEqual(short8v6);
        expect(NetAddress.fromIP(long9v6).toString()).toEqual(short9v6);
        expect(NetAddress.fromIP(long10v6).toString()).toEqual(short10v6);
    });


    const uppercase1v6 = '2001:DB8::1';
    const lowercase1v6 = '2001:0db8:0000:0000:0000:0000:0000:0001';

    it('lowercases IPv6 addresses', () => {
        expect(NetAddress.fromIP(uppercase1v6).toString()).toEqual(lowercase1v6);
    });
});