Software /
code /
prosody
Annotate
spec/util_ip_spec.lua @ 13230:26c30844cac6
plugins: Handle how get_option_period returns "never"
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 21 Jul 2023 17:23:00 +0200 |
parent | 12934:c6dffebab2f8 |
rev | line source |
---|---|
8236
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 local ip = require "util.ip"; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
3 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 local new_ip = ip.new_ip; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
5 local match = ip.match; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
6 local parse_cidr = ip.parse_cidr; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
7 local commonPrefixLength = ip.commonPrefixLength; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
8 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
9 describe("util.ip", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
10 describe("#match()", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
11 it("should work", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
12 local _ = new_ip; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
13 local ip = _"10.20.30.40"; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
14 assert.are.equal(match(ip, _"10.0.0.0", 8), true); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
15 assert.are.equal(match(ip, _"10.0.0.0", 16), false); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
16 assert.are.equal(match(ip, _"10.0.0.0", 24), false); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
17 assert.are.equal(match(ip, _"10.0.0.0", 32), false); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
18 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
19 assert.are.equal(match(ip, _"10.20.0.0", 8), true); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
20 assert.are.equal(match(ip, _"10.20.0.0", 16), true); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
21 assert.are.equal(match(ip, _"10.20.0.0", 24), false); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
22 assert.are.equal(match(ip, _"10.20.0.0", 32), false); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
23 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 assert.are.equal(match(ip, _"0.0.0.0", 32), false); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 assert.are.equal(match(ip, _"0.0.0.0", 0), true); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 assert.are.equal(match(ip, _"0.0.0.0"), false); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
27 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 assert.are.equal(match(ip, _"10.0.0.0", 255), false, "excessive number of bits"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 assert.are.equal(match(ip, _"10.0.0.0", -8), true, "negative number of bits"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
30 assert.are.equal(match(ip, _"10.0.0.0", -32), true, "negative number of bits"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
31 assert.are.equal(match(ip, _"10.0.0.0", 0), true, "zero bits"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 assert.are.equal(match(ip, _"10.0.0.0"), false, "no specified number of bits (differing ip)"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
33 assert.are.equal(match(ip, _"10.20.30.40"), true, "no specified number of bits (same ip)"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
34 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 assert.are.equal(match(_"127.0.0.1", _"127.0.0.1"), true, "simple ip"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
37 assert.are.equal(match(_"8.8.8.8", _"8.8.0.0", 16), true); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
38 assert.are.equal(match(_"8.8.4.4", _"8.8.0.0", 16), true); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
39 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
40 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
41 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
42 describe("#parse_cidr()", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 it("should work", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
44 assert.are.equal(new_ip"0.0.0.0", new_ip"0.0.0.0") |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
45 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
46 local function assert_cidr(cidr, ip, bits) |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
47 local parsed_ip, parsed_bits = parse_cidr(cidr); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
48 assert.are.equal(new_ip(ip), parsed_ip, cidr.." parsed ip is "..ip); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
49 assert.are.equal(bits, parsed_bits, cidr.." parsed bits is "..tostring(bits)); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
50 end |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
51 assert_cidr("0.0.0.0", "0.0.0.0", nil); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
52 assert_cidr("127.0.0.1", "127.0.0.1", nil); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
53 assert_cidr("127.0.0.1/0", "127.0.0.1", 0); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
54 assert_cidr("127.0.0.1/8", "127.0.0.1", 8); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
55 assert_cidr("127.0.0.1/32", "127.0.0.1", 32); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
56 assert_cidr("127.0.0.1/256", "127.0.0.1", 256); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
57 assert_cidr("::/48", "::", 48); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
58 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
59 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
60 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
61 describe("#new_ip()", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
62 it("should work", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
63 local v4, v6 = "IPv4", "IPv6"; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
64 local function assert_proto(s, proto) |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
65 local ip = new_ip(s); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
66 if proto then |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
67 assert.are.equal(ip and ip.proto, proto, "protocol is correct for "..("%q"):format(s)); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
68 else |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
69 assert.are.equal(ip, nil, "address is invalid"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
70 end |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
71 end |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
72 assert_proto("127.0.0.1", v4); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
73 assert_proto("::1", v6); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
74 assert_proto("", nil); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
75 assert_proto("abc", nil); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
76 assert_proto(" ", nil); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
77 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
78 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
79 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
80 describe("#commonPrefixLength()", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
81 it("should work", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
82 local function assert_cpl6(a, b, len, v4) |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
83 local ipa, ipb = new_ip(a), new_ip(b); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
84 if v4 then len = len+96; end |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
85 assert.are.equal(commonPrefixLength(ipa, ipb), len, "common prefix length of "..a.." and "..b.." is "..len); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
86 assert.are.equal(commonPrefixLength(ipb, ipa), len, "common prefix length of "..b.." and "..a.." is "..len); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
87 end |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
88 local function assert_cpl4(a, b, len) |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
89 return assert_cpl6(a, b, len, "IPv4"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
90 end |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
91 assert_cpl4("0.0.0.0", "0.0.0.0", 32); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
92 assert_cpl4("255.255.255.255", "0.0.0.0", 0); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
93 assert_cpl4("255.255.255.255", "255.255.0.0", 16); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
94 assert_cpl4("255.255.255.255", "255.255.255.255", 32); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
95 assert_cpl4("255.255.255.255", "255.255.255.255", 32); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
96 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
97 assert_cpl6("::1", "::1", 128); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
98 assert_cpl6("abcd::1", "abcd::1", 128); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
99 assert_cpl6("abcd::abcd", "abcd::", 112); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
100 assert_cpl6("abcd::abcd", "abcd::abcd:abcd", 96); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
101 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
102 end); |
12934
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
103 |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
104 describe("#truncate()", function () |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
105 it("should work for IPv4", function () |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
106 local ip1 = ip.new_ip("192.168.0.1"); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
107 local ip2 = ip.truncate(ip1, 16); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
108 assert.truthy(ip.is_ip(ip2)); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
109 assert.equal("192.168.0.0", ip2.normal); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
110 assert.equal("192.168.0.1", ip1.normal); -- original unmodified |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
111 end); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
112 |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
113 it("should work for IPv6", function () |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
114 local ip1 = ip.new_ip("2001:db8::ff00:42:8329"); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
115 local ip2 = ip.truncate(ip1, 24); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
116 assert.truthy(ip.is_ip(ip2)); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
117 assert.equal("2001:d00::", ip2.normal); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
118 assert.equal("2001:db8::ff00:42:8329", ip1.normal); -- original unmodified |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
119 end); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
120 |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
121 it("accepts a string", function () |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
122 assert.equal("127.0.0.0", ip.truncate("127.0.0.1", 8).normal); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
123 end); |
c6dffebab2f8
util.ip: Tests for truncate()
Matthew Wild <mwild1@gmail.com>
parents:
8236
diff
changeset
|
124 end); |
8236
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
125 end); |