@@ -2,10 +2,11 @@ package policy
2
2
3
3
import (
4
4
"fmt"
5
- "github.com/juanfont/headscale/hscontrol/policy/matcher"
6
5
"net/netip"
7
6
"testing"
8
7
8
+ "github.com/juanfont/headscale/hscontrol/policy/matcher"
9
+
9
10
"github.com/google/go-cmp/cmp"
10
11
"github.com/juanfont/headscale/hscontrol/types"
11
12
"github.com/juanfont/headscale/hscontrol/util"
@@ -1370,7 +1371,6 @@ func TestFilterNodesByACL(t *testing.T) {
1370
1371
},
1371
1372
},
1372
1373
},
1373
-
1374
1374
{
1375
1375
name : "subnet-router-with-only-route" ,
1376
1376
args : args {
@@ -1422,6 +1422,108 @@ func TestFilterNodesByACL(t *testing.T) {
1422
1422
},
1423
1423
},
1424
1424
},
1425
+ {
1426
+ name : "subnet-router-with-only-route-smaller-mask-2181" ,
1427
+ args : args {
1428
+ nodes : []* types.Node {
1429
+ {
1430
+ ID : 1 ,
1431
+ IPv4 : ap ("100.64.0.1" ),
1432
+ Hostname : "router" ,
1433
+ User : types.User {Name : "router" },
1434
+ Hostinfo : & tailcfg.Hostinfo {
1435
+ RoutableIPs : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1436
+ },
1437
+ ApprovedRoutes : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1438
+ },
1439
+ {
1440
+ ID : 2 ,
1441
+ IPv4 : ap ("100.64.0.2" ),
1442
+ Hostname : "node" ,
1443
+ User : types.User {Name : "node" },
1444
+ },
1445
+ },
1446
+ rules : []tailcfg.FilterRule {
1447
+ {
1448
+ SrcIPs : []string {
1449
+ "100.64.0.2/32" ,
1450
+ },
1451
+ DstPorts : []tailcfg.NetPortRange {
1452
+ {IP : "10.99.0.2/32" , Ports : tailcfg .PortRangeAny },
1453
+ },
1454
+ },
1455
+ },
1456
+ node : & types.Node {
1457
+ ID : 1 ,
1458
+ IPv4 : ap ("100.64.0.1" ),
1459
+ Hostname : "router" ,
1460
+ User : types.User {Name : "router" },
1461
+ Hostinfo : & tailcfg.Hostinfo {
1462
+ RoutableIPs : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1463
+ },
1464
+ ApprovedRoutes : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1465
+ },
1466
+ },
1467
+ want : []* types.Node {
1468
+ {
1469
+ ID : 2 ,
1470
+ IPv4 : ap ("100.64.0.2" ),
1471
+ Hostname : "node" ,
1472
+ User : types.User {Name : "node" },
1473
+ },
1474
+ },
1475
+ },
1476
+ {
1477
+ name : "node-to-subnet-router-with-only-route-smaller-mask-2181" ,
1478
+ args : args {
1479
+ nodes : []* types.Node {
1480
+ {
1481
+ ID : 1 ,
1482
+ IPv4 : ap ("100.64.0.1" ),
1483
+ Hostname : "router" ,
1484
+ User : types.User {Name : "router" },
1485
+ Hostinfo : & tailcfg.Hostinfo {
1486
+ RoutableIPs : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1487
+ },
1488
+ ApprovedRoutes : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1489
+ },
1490
+ {
1491
+ ID : 2 ,
1492
+ IPv4 : ap ("100.64.0.2" ),
1493
+ Hostname : "node" ,
1494
+ User : types.User {Name : "node" },
1495
+ },
1496
+ },
1497
+ rules : []tailcfg.FilterRule {
1498
+ {
1499
+ SrcIPs : []string {
1500
+ "100.64.0.2/32" ,
1501
+ },
1502
+ DstPorts : []tailcfg.NetPortRange {
1503
+ {IP : "10.99.0.2/32" , Ports : tailcfg .PortRangeAny },
1504
+ },
1505
+ },
1506
+ },
1507
+ node : & types.Node {
1508
+ ID : 2 ,
1509
+ IPv4 : ap ("100.64.0.2" ),
1510
+ Hostname : "node" ,
1511
+ User : types.User {Name : "node" },
1512
+ },
1513
+ },
1514
+ want : []* types.Node {
1515
+ {
1516
+ ID : 1 ,
1517
+ IPv4 : ap ("100.64.0.1" ),
1518
+ Hostname : "router" ,
1519
+ User : types.User {Name : "router" },
1520
+ Hostinfo : & tailcfg.Hostinfo {
1521
+ RoutableIPs : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1522
+ },
1523
+ ApprovedRoutes : []netip.Prefix {netip .MustParsePrefix ("10.99.0.0/16" )},
1524
+ },
1525
+ },
1526
+ },
1425
1527
}
1426
1528
1427
1529
for _ , tt := range tests {
0 commit comments