//go:build !js // +build !js package ice import ( "testing" "github.com/stretchr/testify/assert" ) func TestPairPriority(t *testing.T) { a, err := NewAgent(&AgentConfig{}) if err != nil { t.Fatalf("Failed to create agent: %s", err) } hostConfig := &CandidateHostConfig{ Network: "udp", Address: "192.168.1.1", Port: 19216, Component: 1, } hostLocal, err := NewCandidateHost(hostConfig) if err != nil { t.Fatalf("Failed to construct local host candidate: %s", err) } relayConfig := &CandidateRelayConfig{ Network: "udp", Address: "1.2.3.4", Port: 12340, Component: 1, RelAddr: "4.3.2.1", RelPort: 43210, } relayRemote, err := NewCandidateRelay(relayConfig) if err != nil { t.Fatalf("Failed to construct remote relay candidate: %s", err) } srflxConfig := &CandidateServerReflexiveConfig{ Network: "udp", Address: "10.10.10.2", Port: 19218, Component: 1, RelAddr: "4.3.2.1", RelPort: 43212, } srflxRemote, err := NewCandidateServerReflexive(srflxConfig) if err != nil { t.Fatalf("Failed to construct remote srflx candidate: %s", err) } prflxConfig := &CandidatePeerReflexiveConfig{ Network: "udp", Address: "10.10.10.2", Port: 19217, Component: 1, RelAddr: "4.3.2.1", RelPort: 43211, } prflxRemote, err := NewCandidatePeerReflexive(prflxConfig) if err != nil { t.Fatalf("Failed to construct remote prflx candidate: %s", err) } hostConfig = &CandidateHostConfig{ Network: "udp", Address: "1.2.3.5", Port: 12350, Component: 1, } hostRemote, err := NewCandidateHost(hostConfig) if err != nil { t.Fatalf("Failed to construct remote host candidate: %s", err) } for _, remote := range []Candidate{relayRemote, srflxRemote, prflxRemote, hostRemote} { p := a.findPair(hostLocal, remote) if p == nil { p = a.addPair(hostLocal, remote) } p.state = CandidatePairStateSucceeded bestPair := a.getBestValidCandidatePair() if bestPair.String() != (&CandidatePair{Remote: remote, Local: hostLocal}).String() { t.Fatalf("Unexpected bestPair %s (expected remote: %s)", bestPair, remote) } } assert.NoError(t, a.Close()) }