package controller import ( "context" "testing" "github.com/netbirdio/netbird/management/internals/controllers/network_map" "github.com/netbirdio/netbird/management/server/account" nbpeer "github.com/netbirdio/netbird/management/server/peer" "github.com/netbirdio/netbird/management/server/types" "github.com/stretchr/testify/assert" "go.uber.org/mock/gomock" ) func TestComputeForwarderPort(t *testing.T) { // Test with empty peers list peers := []*nbpeer.Peer{} result := computeForwarderPort(peers, "v0.59.0") if result != int64(network_map.OldForwarderPort) { t.Errorf("Expected %d for empty peers list, got %d", network_map.OldForwarderPort, result) } // Test with peers that have old versions peers = []*nbpeer.Peer{ { Meta: nbpeer.PeerSystemMeta{ WtVersion: "0.57.0", }, }, { Meta: nbpeer.PeerSystemMeta{ WtVersion: "0.26.0", }, }, } result = computeForwarderPort(peers, "v0.59.0") if result != int64(network_map.OldForwarderPort) { t.Errorf("Expected %d for peers with old versions, got %d", network_map.OldForwarderPort, result) } // Test with peers that have new versions peers = []*nbpeer.Peer{ { Meta: nbpeer.PeerSystemMeta{ WtVersion: "0.59.0", }, }, { Meta: nbpeer.PeerSystemMeta{ WtVersion: "0.59.0", }, }, } result = computeForwarderPort(peers, "v0.59.0") if result != int64(network_map.DnsForwarderPort) { t.Errorf("Expected %d for peers with new versions, got %d", network_map.DnsForwarderPort, result) } // Test with peers that have mixed versions peers = []*nbpeer.Peer{ { Meta: nbpeer.PeerSystemMeta{ WtVersion: "0.59.0", }, }, { Meta: nbpeer.PeerSystemMeta{ WtVersion: "0.57.0", }, }, } result = computeForwarderPort(peers, "v0.59.0") if result != int64(network_map.OldForwarderPort) { t.Errorf("Expected %d for peers with mixed versions, got %d", network_map.OldForwarderPort, result) } // Test with peers that have empty version peers = []*nbpeer.Peer{ { Meta: nbpeer.PeerSystemMeta{ WtVersion: "", }, }, } result = computeForwarderPort(peers, "v0.59.0") if result != int64(network_map.OldForwarderPort) { t.Errorf("Expected %d for peers with empty version, got %d", network_map.OldForwarderPort, result) } peers = []*nbpeer.Peer{ { Meta: nbpeer.PeerSystemMeta{ WtVersion: "development", }, }, } result = computeForwarderPort(peers, "v0.59.0") if result == int64(network_map.OldForwarderPort) { t.Errorf("Expected %d for peers with dev version, got %d", network_map.DnsForwarderPort, result) } // Test with peers that have unknown version string peers = []*nbpeer.Peer{ { Meta: nbpeer.PeerSystemMeta{ WtVersion: "unknown", }, }, } result = computeForwarderPort(peers, "v0.59.0") if result != int64(network_map.OldForwarderPort) { t.Errorf("Expected %d for peers with unknown version, got %d", network_map.OldForwarderPort, result) } } func TestGetValidatedPeerWithComponents_DeletedPeer(t *testing.T) { ctrl := gomock.NewController(t) mockrequestBuffer := account.NewMockRequestBuffer(ctrl) c := Controller{ requestBuffer: mockrequestBuffer, } mockrequestBuffer.EXPECT().GetAccountWithBackpressure(gomock.Any(), gomock.Any()).Return(&types.Account{}, nil) peer, components, netmap, posturechecks, dnsforwardPort, err := c.GetValidatedPeerWithComponents(context.TODO(), false, "test-account-id", &nbpeer.Peer{ID: "test-peer-id"}) assert.Nil(t, peer) assert.Nil(t, components) assert.Nil(t, netmap) assert.Nil(t, posturechecks) assert.Equal(t, int64(0), dnsforwardPort) assert.NotNil(t, err) }