mirror of
https://github.com/pion/ice.git
synced 2025-10-05 23:47:01 +08:00
96 lines
2.1 KiB
Go
96 lines
2.1 KiB
Go
//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())
|
|
}
|