wip: migrate to mono-repo. SPN has already been moved to spn/

This commit is contained in:
Patrick Pacher
2024-03-15 11:55:13 +01:00
parent b30fd00ccf
commit 8579430db9
577 changed files with 35981 additions and 818 deletions

112
spn/navigator/sort_test.go Normal file
View File

@@ -0,0 +1,112 @@
package navigator
import (
"sort"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/safing/portmaster/spn/hub"
)
func TestSorting(t *testing.T) {
t.Parallel()
list := []*Pin{
{
Hub: &hub.Hub{
ID: "a",
},
measurements: &hub.Measurements{
Latency: 3,
Capacity: 4,
CalculatedCost: 5,
},
analysis: &AnalysisState{
SuggestedHopDistance: 3,
},
},
{
Hub: &hub.Hub{
ID: "b",
},
measurements: &hub.Measurements{
Latency: 4,
Capacity: 3,
CalculatedCost: 1,
},
analysis: &AnalysisState{
SuggestedHopDistance: 2,
},
},
{
Hub: &hub.Hub{
ID: "c",
},
measurements: &hub.Measurements{
Latency: 5,
Capacity: 2,
CalculatedCost: 2,
},
analysis: &AnalysisState{
SuggestedHopDistance: 4,
},
},
{
Hub: &hub.Hub{
ID: "d",
},
measurements: &hub.Measurements{
Latency: 1,
Capacity: 1,
CalculatedCost: 3,
},
analysis: &AnalysisState{
SuggestedHopDistance: 4,
},
},
{
Hub: &hub.Hub{
ID: "e",
},
measurements: &hub.Measurements{
Latency: 2,
Capacity: 5,
CalculatedCost: 4,
},
analysis: &AnalysisState{
SuggestedHopDistance: 4,
},
},
}
sort.Sort(sortByLowestMeasuredCost(list))
checkSorting(t, list, "b-c-d-e-a")
sort.Sort(sortBySuggestedHopDistanceAndLowestMeasuredCost(list))
checkSorting(t, list, "c-d-e-a-b")
sort.Sort(sortByLowestMeasuredLatency(list))
checkSorting(t, list, "d-e-a-b-c")
sort.Sort(sortByHighestMeasuredCapacity(list))
checkSorting(t, list, "e-a-b-c-d")
sort.Sort(sortByPinID(list))
checkSorting(t, list, "a-b-c-d-e")
}
func checkSorting(t *testing.T, sortedList []*Pin, expectedOrder string) {
t.Helper()
// Build list ID string.
ids := make([]string, 0, len(sortedList))
for _, pin := range sortedList {
ids = append(ids, pin.Hub.ID)
}
sortedIDs := strings.Join(ids, "-")
// Check for matching order.
assert.Equal(t, expectedOrder, sortedIDs, "should match")
}