Skip to content

Commit f3e8b45

Browse files
committed
Add tests.
1 parent f6f5842 commit f3e8b45

1 file changed

Lines changed: 79 additions & 16 deletions

File tree

‎sip/sip_test.go‎

Lines changed: 79 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,27 +1163,37 @@ func TestEvaluateDispatchRule_RespectsRuleMediaTimeout(t *testing.T) {
11631163
require.Equal(t, 5*time.Minute, res.Media.MediaTimeout.AsDuration())
11641164
}
11651165

1166-
func TestMatchIP(t *testing.T) {
1166+
func TestParseIPMask(t *testing.T) {
11671167
cases := []struct {
1168-
addr string
1169-
mask string
1170-
valid bool
1171-
exp bool
1168+
mask string
1169+
exp string // empty if not an IP mask
11721170
}{
1173-
{addr: "192.168.0.10", mask: "192.168.0.10", valid: true, exp: true},
1174-
{addr: "192.168.0.10", mask: "192.168.0.11", valid: true, exp: false},
1175-
{addr: "192.168.0.10", mask: "192.168.0.0/24", valid: true, exp: true},
1176-
{addr: "192.168.0.10", mask: "192.168.0.10/0", valid: true, exp: true},
1177-
{addr: "192.168.0.10", mask: "192.170.0.0/24", valid: true, exp: false},
1171+
{mask: "192.168.0.10", exp: "192.168.0.10/32"},
1172+
{mask: "192.168.0.0/24", exp: "192.168.0.0/24"},
1173+
{mask: "2001:db8::1", exp: "2001:db8::1/128"},
1174+
{mask: "[2001:db8::1]", exp: "2001:db8::1/128"},
1175+
{mask: "[2001:db8::]/32", exp: "2001:db8::/32"},
1176+
{mask: "[::]", exp: "::/128"},
1177+
{mask: "[::]/0", exp: "::/0"},
1178+
1179+
// Not IP masks: treated as hostnames.
1180+
{mask: "sip.example.com"},
1181+
{mask: "sip.example.com/24"},
1182+
{mask: "192.168.0.10/33"},
1183+
{mask: "192.168.0.10/"},
1184+
{mask: "[192.168.0.10"},
1185+
{mask: "[2001:db8::1]:5060"},
1186+
{mask: "[[2001:db8::1]]"},
11781187
}
11791188
for _, c := range cases {
11801189
t.Run(c.mask, func(t *testing.T) {
1181-
ip, err := netip.ParseAddr(c.addr)
1182-
require.NoError(t, err)
1183-
got := isValidMask(c.mask)
1184-
require.Equal(t, c.valid, got)
1185-
got = matchAddrMask(ip, c.mask)
1186-
require.Equal(t, c.exp, got)
1190+
pref, ok := parseIPMask(c.mask)
1191+
if c.exp == "" {
1192+
require.False(t, ok)
1193+
return
1194+
}
1195+
require.True(t, ok)
1196+
require.Equal(t, netip.MustParsePrefix(c.exp), pref)
11871197
})
11881198
}
11891199
}
@@ -1281,6 +1291,59 @@ func TestMatchMasks(t *testing.T) {
12811291
},
12821292
exp: true,
12831293
},
1294+
{
1295+
name: "ip spoofed in from host",
1296+
addr: "203.0.113.5",
1297+
host: "192.168.0.10",
1298+
masks: []string{
1299+
"192.168.0.10",
1300+
},
1301+
exp: false,
1302+
},
1303+
{
1304+
name: "ip range spoofed in from host",
1305+
addr: "203.0.113.5",
1306+
host: "192.168.0.0/24",
1307+
masks: []string{
1308+
"192.168.0.0/24",
1309+
},
1310+
exp: false,
1311+
},
1312+
{
1313+
name: "ipv6 spoofed in from host",
1314+
addr: "203.0.113.5",
1315+
host: "[2001:db8::1]",
1316+
masks: []string{
1317+
"[2001:db8::1]",
1318+
},
1319+
exp: false,
1320+
},
1321+
{
1322+
name: "ipv6 bracketed",
1323+
addr: "2001:db8::1",
1324+
host: "sip.example.com",
1325+
masks: []string{
1326+
"[2001:db8::1]",
1327+
},
1328+
exp: true,
1329+
},
1330+
{
1331+
name: "ipv6 bracketed range",
1332+
addr: "2001:db8::1",
1333+
masks: []string{
1334+
"[2001:db8::]/32",
1335+
},
1336+
exp: true,
1337+
},
1338+
{
1339+
name: "ip matches source, from host differs",
1340+
addr: "192.168.0.10",
1341+
host: "sip.example.com",
1342+
masks: []string{
1343+
"192.168.0.10",
1344+
},
1345+
exp: true,
1346+
},
12841347
}
12851348
for _, c := range cases {
12861349
t.Run(c.name, func(t *testing.T) {

0 commit comments

Comments
 (0)