mirror of
https://github.com/netbirdio/netbird.git
synced 2025-02-23 05:31:28 +01:00
Add tests
This commit is contained in:
parent
151969bdd7
commit
ac06346f5c
@ -1513,24 +1513,24 @@ func TestRouteAccountPeerUpdate(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// Updating the route should update account peers and send peer update
|
// Updating the route should update account peers and send peer update
|
||||||
//t.Run("updating route", func(t *testing.T) {
|
t.Run("updating route", func(t *testing.T) {
|
||||||
// baseRoute.Enabled = false
|
baseRoute.Groups = []string{routeGroup1, routeGroup2}
|
||||||
//
|
|
||||||
// done := make(chan struct{})
|
done := make(chan struct{})
|
||||||
// go func() {
|
go func() {
|
||||||
// peerShouldReceiveUpdate(t, updMsg)
|
peerShouldReceiveUpdate(t, updMsg)
|
||||||
// close(done)
|
close(done)
|
||||||
// }()
|
}()
|
||||||
//
|
|
||||||
// err := manager.SaveRoute(context.Background(), account.Id, userID, &baseRoute)
|
err := manager.SaveRoute(context.Background(), account.Id, userID, &baseRoute)
|
||||||
// require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
//
|
|
||||||
// select {
|
select {
|
||||||
// case <-done:
|
case <-done:
|
||||||
// case <-time.After(200 * time.Millisecond):
|
case <-time.After(200 * time.Millisecond):
|
||||||
// t.Error("timeout waiting for peerShouldReceiveUpdate")
|
t.Error("timeout waiting for peerShouldReceiveUpdate")
|
||||||
// }
|
}
|
||||||
//})
|
})
|
||||||
|
|
||||||
// Deleting the route should update account peers and send peer update
|
// Deleting the route should update account peers and send peer update
|
||||||
t.Run("deleting route", func(t *testing.T) {
|
t.Run("deleting route", func(t *testing.T) {
|
||||||
|
@ -2,11 +2,17 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"net"
|
||||||
|
"net/netip"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
nbdns "github.com/netbirdio/netbird/dns"
|
||||||
|
"github.com/netbirdio/netbird/management/domain"
|
||||||
"github.com/netbirdio/netbird/management/proto"
|
"github.com/netbirdio/netbird/management/proto"
|
||||||
|
nbpeer "github.com/netbirdio/netbird/management/server/peer"
|
||||||
"github.com/netbirdio/netbird/management/server/posture"
|
"github.com/netbirdio/netbird/management/server/posture"
|
||||||
|
nbroute "github.com/netbirdio/netbird/route"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -180,3 +186,300 @@ func TestHandlePeerMessageUpdate(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIsNewPeerUpdateMessage(t *testing.T) {
|
||||||
|
t.Run("Unchanged value", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.False(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Unchanged value with serial incremented", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.False(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating routes network", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.NetworkMap.Routes[0].Network = netip.MustParsePrefix("1.1.1.1/32")
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating routes groups", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.NetworkMap.Routes[0].Groups = []string{"randomGroup1"}
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating network map peers", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newPeer := &nbpeer.Peer{
|
||||||
|
IP: net.ParseIP("192.168.1.4"),
|
||||||
|
SSHEnabled: true,
|
||||||
|
Key: "peer4-key",
|
||||||
|
DNSLabel: "peer4",
|
||||||
|
SSHKey: "peer4-ssh-key",
|
||||||
|
}
|
||||||
|
newUpdateMessage2.NetworkMap.Peers = append(newUpdateMessage2.NetworkMap.Peers, newPeer)
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating posture checks", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newCheck := &posture.Checks{
|
||||||
|
Checks: posture.ChecksDefinition{
|
||||||
|
NBVersionCheck: &posture.NBVersionCheck{
|
||||||
|
MinVersion: "10.0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
newUpdateMessage2.Checks = append(newUpdateMessage2.Checks, newCheck)
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating DNS configuration", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newDomain := "newexample.com"
|
||||||
|
newUpdateMessage2.NetworkMap.DNSConfig.NameServerGroups[0].Domains = append(
|
||||||
|
newUpdateMessage2.NetworkMap.DNSConfig.NameServerGroups[0].Domains,
|
||||||
|
newDomain,
|
||||||
|
)
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating peer IP", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.NetworkMap.Peers[0].IP = net.ParseIP("192.168.1.10")
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating firewall rule", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.NetworkMap.FirewallRules[0].Port = "443"
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Add new firewall rule", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newRule := &FirewallRule{
|
||||||
|
PeerIP: "192.168.1.3",
|
||||||
|
Direction: firewallRuleDirectionOUT,
|
||||||
|
Action: string(PolicyTrafficActionDrop),
|
||||||
|
Protocol: string(PolicyRuleProtocolUDP),
|
||||||
|
Port: "53",
|
||||||
|
}
|
||||||
|
newUpdateMessage2.NetworkMap.FirewallRules = append(newUpdateMessage2.NetworkMap.FirewallRules, newRule)
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Removing nameserver", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.NetworkMap.DNSConfig.NameServerGroups[0].NameServers = make([]nbdns.NameServer, 0)
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating name server IP", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.NetworkMap.DNSConfig.NameServerGroups[0].NameServers[0].IP = netip.MustParseAddr("8.8.4.4")
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Updating custom DNS zone", func(t *testing.T) {
|
||||||
|
newUpdateMessage1 := createMockUpdateMessage(t)
|
||||||
|
newUpdateMessage2 := createMockUpdateMessage(t)
|
||||||
|
|
||||||
|
newUpdateMessage2.NetworkMap.DNSConfig.CustomZones[0].Records[0].RData = "100.64.0.2"
|
||||||
|
newUpdateMessage2.Update.NetworkMap.Serial++
|
||||||
|
|
||||||
|
message, err := isNewPeerUpdateMessage(newUpdateMessage1, newUpdateMessage2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, message)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func createMockUpdateMessage(t *testing.T) *UpdateMessage {
|
||||||
|
_, ipNet, err := net.ParseCIDR("192.168.1.0/24")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
domainList, err := domain.FromStringList([]string{"example.com"})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
config := &Config{
|
||||||
|
Signal: &Host{
|
||||||
|
Proto: "https",
|
||||||
|
URI: "signal.uri",
|
||||||
|
Username: "",
|
||||||
|
Password: "",
|
||||||
|
},
|
||||||
|
Stuns: []*Host{{URI: "stun.uri", Proto: UDP}},
|
||||||
|
TURNConfig: &TURNConfig{
|
||||||
|
Turns: []*Host{{URI: "turn.uri", Proto: UDP, Username: "turn-user", Password: "turn-pass"}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
peer := &nbpeer.Peer{
|
||||||
|
IP: net.ParseIP("192.168.1.1"),
|
||||||
|
SSHEnabled: true,
|
||||||
|
Key: "peer-key",
|
||||||
|
DNSLabel: "peer1",
|
||||||
|
SSHKey: "peer1-ssh-key",
|
||||||
|
}
|
||||||
|
turnCredentials := &TURNCredentials{
|
||||||
|
Username: "turn-user",
|
||||||
|
Password: "turn-pass",
|
||||||
|
}
|
||||||
|
networkMap := &NetworkMap{
|
||||||
|
Network: &Network{Net: *ipNet, Serial: 1000},
|
||||||
|
Peers: []*nbpeer.Peer{{IP: net.ParseIP("192.168.1.2"), Key: "peer2-key", DNSLabel: "peer2", SSHEnabled: true, SSHKey: "peer2-ssh-key"}},
|
||||||
|
OfflinePeers: []*nbpeer.Peer{{IP: net.ParseIP("192.168.1.3"), Key: "peer3-key", DNSLabel: "peer3", SSHEnabled: true, SSHKey: "peer3-ssh-key"}},
|
||||||
|
Routes: []*nbroute.Route{
|
||||||
|
{
|
||||||
|
ID: "route1",
|
||||||
|
Network: netip.MustParsePrefix("10.0.0.0/24"),
|
||||||
|
KeepRoute: true,
|
||||||
|
NetID: "route1",
|
||||||
|
Peer: "peer1",
|
||||||
|
NetworkType: 1,
|
||||||
|
Masquerade: true,
|
||||||
|
Metric: 9999,
|
||||||
|
Enabled: true,
|
||||||
|
Groups: []string{"test1", "test2"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ID: "route2",
|
||||||
|
Domains: domainList,
|
||||||
|
KeepRoute: true,
|
||||||
|
NetID: "route2",
|
||||||
|
Peer: "peer1",
|
||||||
|
NetworkType: 1,
|
||||||
|
Masquerade: true,
|
||||||
|
Metric: 9999,
|
||||||
|
Enabled: true,
|
||||||
|
Groups: []string{"test1", "test2"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DNSConfig: nbdns.Config{
|
||||||
|
ServiceEnable: true,
|
||||||
|
NameServerGroups: []*nbdns.NameServerGroup{
|
||||||
|
{
|
||||||
|
NameServers: []nbdns.NameServer{{
|
||||||
|
IP: netip.MustParseAddr("8.8.8.8"),
|
||||||
|
NSType: nbdns.UDPNameServerType,
|
||||||
|
Port: nbdns.DefaultDNSPort,
|
||||||
|
}},
|
||||||
|
Primary: true,
|
||||||
|
Domains: []string{"example.com"},
|
||||||
|
Enabled: true,
|
||||||
|
SearchDomainsEnabled: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ID: "ns1",
|
||||||
|
NameServers: []nbdns.NameServer{{
|
||||||
|
IP: netip.MustParseAddr("1.1.1.1"),
|
||||||
|
NSType: nbdns.UDPNameServerType,
|
||||||
|
Port: nbdns.DefaultDNSPort,
|
||||||
|
}},
|
||||||
|
Groups: []string{"group1"},
|
||||||
|
Primary: true,
|
||||||
|
Domains: []string{"example.com"},
|
||||||
|
Enabled: true,
|
||||||
|
SearchDomainsEnabled: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CustomZones: []nbdns.CustomZone{{Domain: "example.com", Records: []nbdns.SimpleRecord{{Name: "example.com", Type: 1, Class: "IN", TTL: 60, RData: "100.64.0.1"}}}},
|
||||||
|
},
|
||||||
|
FirewallRules: []*FirewallRule{
|
||||||
|
{PeerIP: "192.168.1.2", Direction: firewallRuleDirectionIN, Action: string(PolicyTrafficActionAccept), Protocol: string(PolicyRuleProtocolTCP), Port: "80"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
dnsName := "example.com"
|
||||||
|
checks := []*posture.Checks{
|
||||||
|
{
|
||||||
|
Checks: posture.ChecksDefinition{
|
||||||
|
ProcessCheck: &posture.ProcessCheck{
|
||||||
|
Processes: []posture.Process{{LinuxPath: "/usr/bin/netbird"}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
dnsCache := &DNSConfigCache{}
|
||||||
|
|
||||||
|
return &UpdateMessage{
|
||||||
|
Update: toSyncResponse(context.Background(), config, peer, turnCredentials, networkMap, dnsName, checks, dnsCache),
|
||||||
|
NetworkMap: networkMap,
|
||||||
|
Checks: checks,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user