at 25.11-pre 5.1 kB view raw
1#!/usr/bin/env bash 2 3# Tests lib/network.nix 4# Run: 5# [nixpkgs]$ lib/tests/network.sh 6# or: 7# [nixpkgs]$ nix-build lib/tests/release.nix 8 9set -euo pipefail 10shopt -s inherit_errexit 11 12if [[ -n "${TEST_LIB:-}" ]]; then 13 NIX_PATH=nixpkgs="$(dirname "$TEST_LIB")" 14else 15 NIX_PATH=nixpkgs="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.."; pwd)" 16fi 17export NIX_PATH 18 19die() { 20 echo >&2 "test case failed: " "$@" 21 exit 1 22} 23 24tmp="$(mktemp -d)" 25clean_up() { 26 rm -rf "$tmp" 27} 28trap clean_up EXIT SIGINT SIGTERM 29work="$tmp/work" 30mkdir "$work" 31cd "$work" 32 33prefixExpression=' 34 let 35 lib = import <nixpkgs/lib>; 36 internal = import <nixpkgs/lib/network/internal.nix> { 37 inherit lib; 38 }; 39 in 40 with lib; 41 with lib.network; 42' 43 44expectSuccess() { 45 local expr=$1 46 local expectedResult=$2 47 if ! result=$(nix-instantiate --eval --strict --json --show-trace \ 48 --expr "$prefixExpression ($expr)"); then 49 die "$expr failed to evaluate, but it was expected to succeed" 50 fi 51 if [[ ! "$result" == "$expectedResult" ]]; then 52 die "$expr == $result, but $expectedResult was expected" 53 fi 54} 55 56expectSuccessRegex() { 57 local expr=$1 58 local expectedResultRegex=$2 59 if ! result=$(nix-instantiate --eval --strict --json --show-trace \ 60 --expr "$prefixExpression ($expr)"); then 61 die "$expr failed to evaluate, but it was expected to succeed" 62 fi 63 if [[ ! "$result" =~ $expectedResultRegex ]]; then 64 die "$expr == $result, but $expectedResultRegex was expected" 65 fi 66} 67 68expectFailure() { 69 local expr=$1 70 local expectedErrorRegex=$2 71 if result=$(nix-instantiate --eval --strict --json --show-trace 2>"$work/stderr" \ 72 --expr "$prefixExpression ($expr)"); then 73 die "$expr evaluated successfully to $result, but it was expected to fail" 74 fi 75 if [[ ! "$(<"$work/stderr")" =~ $expectedErrorRegex ]]; then 76 die "Error was $(<"$work/stderr"), but $expectedErrorRegex was expected" 77 fi 78} 79 80# Internal functions 81expectSuccess '(internal._ipv6.split "0:0:0:0:0:0:0:0").address' '[0,0,0,0,0,0,0,0]' 82expectSuccess '(internal._ipv6.split "000a:000b:000c:000d:000e:000f:ffff:aaaa").address' '[10,11,12,13,14,15,65535,43690]' 83expectSuccess '(internal._ipv6.split "::").address' '[0,0,0,0,0,0,0,0]' 84expectSuccess '(internal._ipv6.split "::0000").address' '[0,0,0,0,0,0,0,0]' 85expectSuccess '(internal._ipv6.split "::1").address' '[0,0,0,0,0,0,0,1]' 86expectSuccess '(internal._ipv6.split "::ffff").address' '[0,0,0,0,0,0,0,65535]' 87expectSuccess '(internal._ipv6.split "::000f").address' '[0,0,0,0,0,0,0,15]' 88expectSuccess '(internal._ipv6.split "::1:1:1:1:1:1:1").address' '[0,1,1,1,1,1,1,1]' 89expectSuccess '(internal._ipv6.split "1::").address' '[1,0,0,0,0,0,0,0]' 90expectSuccess '(internal._ipv6.split "1:1:1:1:1:1:1::").address' '[1,1,1,1,1,1,1,0]' 91expectSuccess '(internal._ipv6.split "1:1:1:1::1:1:1").address' '[1,1,1,1,0,1,1,1]' 92expectSuccess '(internal._ipv6.split "1::1").address' '[1,0,0,0,0,0,0,1]' 93 94expectFailure 'internal._ipv6.split "0:0:0:0:0:0:0:-1"' "contains malformed characters for IPv6 address" 95expectFailure 'internal._ipv6.split "::0:"' "is not a valid IPv6 address" 96expectFailure 'internal._ipv6.split ":0::"' "is not a valid IPv6 address" 97expectFailure 'internal._ipv6.split "0::0:"' "is not a valid IPv6 address" 98expectFailure 'internal._ipv6.split "0:0:"' "is not a valid IPv6 address" 99expectFailure 'internal._ipv6.split "0:0:0:0:0:0:0:0:0"' "is not a valid IPv6 address" 100expectFailure 'internal._ipv6.split "0:0:0:0:0:0:0:0:"' "is not a valid IPv6 address" 101expectFailure 'internal._ipv6.split "::0:0:0:0:0:0:0:0"' "is not a valid IPv6 address" 102expectFailure 'internal._ipv6.split "0::0:0:0:0:0:0:0"' "is not a valid IPv6 address" 103expectFailure 'internal._ipv6.split "::10000"' "0x10000 is not a valid u16 integer" 104 105expectSuccess '(internal._ipv6.split "::").prefixLength' '128' 106expectSuccess '(internal._ipv6.split "::/1").prefixLength' '1' 107expectSuccess '(internal._ipv6.split "::/128").prefixLength' '128' 108 109expectFailure '(internal._ipv6.split "::/0").prefixLength' "IPv6 subnet should be in range \[1;128\], got 0" 110expectFailure '(internal._ipv6.split "::/129").prefixLength' "IPv6 subnet should be in range \[1;128\], got 129" 111expectFailure '(internal._ipv6.split "/::/").prefixLength' "is not a valid IPv6 address in CIDR notation" 112 113# Library API 114expectSuccess 'lib.network.ipv6.fromString "2001:DB8::ffff/64"' '{"address":"2001:db8:0:0:0:0:0:ffff","prefixLength":64}' 115expectSuccess 'lib.network.ipv6.fromString "1234:5678:90ab:cdef:fedc:ba09:8765:4321/44"' '{"address":"1234:5678:90ab:cdef:fedc:ba09:8765:4321","prefixLength":44}' 116 117echo >&2 tests ok