@@ -2,14 +2,17 @@ package types
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"net"
6
7
"net/netip"
7
8
"slices"
8
9
"testing"
9
10
11
+ "github.com/miekg/dns"
10
12
"github.com/stretchr/testify/assert"
11
13
"github.com/stretchr/testify/require"
12
14
15
+ nbdns "github.com/netbirdio/netbird/dns"
13
16
resourceTypes "github.com/netbirdio/netbird/management/server/networks/resources/types"
14
17
routerTypes "github.com/netbirdio/netbird/management/server/networks/routers/types"
15
18
networkTypes "github.com/netbirdio/netbird/management/server/networks/types"
@@ -835,3 +838,109 @@ func Test_NetworksNetMapGenShouldExcludeOtherRouters(t *testing.T) {
835
838
assert .Len (t , networkResourcesRoutes , 1 , "expected network resource route don't match" )
836
839
assert .Len (t , sourcePeers , 2 , "expected source peers don't match" )
837
840
}
841
+
842
+ func Test_FilterZoneRecordsForPeers (t * testing.T ) {
843
+ tests := []struct {
844
+ name string
845
+ peer * nbpeer.Peer
846
+ customZone nbdns.CustomZone
847
+ peersToConnect []* nbpeer.Peer
848
+ expectedRecords []nbdns.SimpleRecord
849
+ }{
850
+ {
851
+ name : "empty peers to connect" ,
852
+ customZone : nbdns.CustomZone {
853
+ Domain : "netbird.cloud." ,
854
+ Records : []nbdns.SimpleRecord {
855
+ {Name : "peer1.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.1" },
856
+ {Name : "router.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.100" },
857
+ },
858
+ },
859
+ peersToConnect : []* nbpeer.Peer {},
860
+ peer : & nbpeer.Peer {ID : "router" , IP : net .ParseIP ("10.0.0.100" )},
861
+ expectedRecords : []nbdns.SimpleRecord {
862
+ {Name : "router.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.100" },
863
+ },
864
+ },
865
+ {
866
+ name : "multiple peers multiple records match" ,
867
+ customZone : nbdns.CustomZone {
868
+ Domain : "netbird.cloud." ,
869
+ Records : func () []nbdns.SimpleRecord {
870
+ var records []nbdns.SimpleRecord
871
+ for i := 1 ; i <= 100 ; i ++ {
872
+ records = append (records , nbdns.SimpleRecord {
873
+ Name : fmt .Sprintf ("peer%d.netbird.cloud" , i ),
874
+ Type : int (dns .TypeA ),
875
+ Class : nbdns .DefaultClass ,
876
+ TTL : 300 ,
877
+ RData : fmt .Sprintf ("10.0.%d.%d" , i / 256 , i % 256 ),
878
+ })
879
+ }
880
+ return records
881
+ }(),
882
+ },
883
+ peersToConnect : func () []* nbpeer.Peer {
884
+ var peers []* nbpeer.Peer
885
+ for _ , i := range []int {1 , 5 , 10 , 25 , 50 , 75 , 100 } {
886
+ peers = append (peers , & nbpeer.Peer {
887
+ ID : fmt .Sprintf ("peer%d" , i ),
888
+ IP : net .ParseIP (fmt .Sprintf ("10.0.%d.%d" , i / 256 , i % 256 )),
889
+ })
890
+ }
891
+ return peers
892
+ }(),
893
+ peer : & nbpeer.Peer {ID : "router" , IP : net .ParseIP ("10.0.0.100" )},
894
+ expectedRecords : func () []nbdns.SimpleRecord {
895
+ var records []nbdns.SimpleRecord
896
+ for _ , i := range []int {1 , 5 , 10 , 25 , 50 , 75 , 100 } {
897
+ records = append (records , nbdns.SimpleRecord {
898
+ Name : fmt .Sprintf ("peer%d.netbird.cloud" , i ),
899
+ Type : int (dns .TypeA ),
900
+ Class : nbdns .DefaultClass ,
901
+ TTL : 300 ,
902
+ RData : fmt .Sprintf ("10.0.%d.%d" , i / 256 , i % 256 ),
903
+ })
904
+ }
905
+ return records
906
+ }(),
907
+ },
908
+ {
909
+ name : "peers with multiple DNS labels" ,
910
+ customZone : nbdns.CustomZone {
911
+ Domain : "netbird.cloud." ,
912
+ Records : []nbdns.SimpleRecord {
913
+ {Name : "peer1.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.1" },
914
+ {Name : "peer1-alt.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.1" },
915
+ {Name : "peer1-backup.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.1" },
916
+ {Name : "peer2.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.2" },
917
+ {Name : "peer2-service.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.2" },
918
+ {Name : "peer3.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.3" },
919
+ {Name : "peer3-alt.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.3" },
920
+ {Name : "router.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.100" },
921
+ },
922
+ },
923
+ peersToConnect : []* nbpeer.Peer {
924
+ {ID : "peer1" , IP : net .ParseIP ("10.0.0.1" ), DNSLabel : "peer1" , ExtraDNSLabels : []string {"peer1-alt" , "peer1-backup" }},
925
+ {ID : "peer2" , IP : net .ParseIP ("10.0.0.2" ), DNSLabel : "peer2" , ExtraDNSLabels : []string {"peer2-service" }},
926
+ },
927
+ peer : & nbpeer.Peer {ID : "router" , IP : net .ParseIP ("10.0.0.100" )},
928
+ expectedRecords : []nbdns.SimpleRecord {
929
+ {Name : "peer1.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.1" },
930
+ {Name : "peer1-alt.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.1" },
931
+ {Name : "peer1-backup.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.1" },
932
+ {Name : "peer2.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.2" },
933
+ {Name : "peer2-service.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.2" },
934
+ {Name : "router.netbird.cloud" , Type : int (dns .TypeA ), Class : nbdns .DefaultClass , TTL : 300 , RData : "10.0.0.100" },
935
+ },
936
+ },
937
+ }
938
+
939
+ for _ , tt := range tests {
940
+ t .Run (tt .name , func (t * testing.T ) {
941
+ result := filterZoneRecordsForPeers (tt .peer , tt .customZone , tt .peersToConnect )
942
+ assert .Equal (t , len (tt .expectedRecords ), len (result ))
943
+ assert .ElementsMatch (t , tt .expectedRecords , result )
944
+ })
945
+ }
946
+ }
0 commit comments