1package ice 2 3import ( 4 "testing" 5 "time" 6 7 "github.com/pion/logging" 8 "github.com/pion/transport/test" 9 "github.com/pion/turn" 10) 11 12func TestServerReflexiveOnlyConnection(t *testing.T) { 13 // Limit runtime in case of deadlocks 14 lim := test.TimeOut(time.Second * 30) 15 defer lim.Stop() 16 17 report := test.CheckRoutines(t) 18 defer report() 19 20 loggerFactory := logging.NewDefaultLoggerFactory() 21 //log := loggerFactory.NewLogger("test") 22 23 serverPort := randomPort(t) 24 server := turn.NewServer(&turn.ServerConfig{ 25 Realm: "pion.ly", 26 AuthHandler: optimisticAuthHandler, 27 ListeningPort: serverPort, 28 LoggerFactory: loggerFactory, 29 }) 30 err := server.AddListeningIPAddr("127.0.0.1") 31 if err != nil { 32 t.Fatal(err) 33 } 34 35 err = server.Start() 36 if err != nil { 37 t.Fatal(err) 38 } 39 40 cfg := &AgentConfig{ 41 NetworkTypes: []NetworkType{NetworkTypeUDP4}, 42 Urls: []*URL{ 43 { 44 Scheme: SchemeTypeSTUN, 45 Host: "localhost", 46 Port: serverPort, 47 }, 48 }, 49 CandidateTypes: []CandidateType{CandidateTypeServerReflexive}, 50 } 51 52 aAgent, err := NewAgent(cfg) 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 aNotifier, aConnected := onConnected() 58 if err = aAgent.OnConnectionStateChange(aNotifier); err != nil { 59 t.Fatal(err) 60 } 61 62 bAgent, err := NewAgent(cfg) 63 if err != nil { 64 t.Fatal(err) 65 } 66 67 bNotifier, bConnected := onConnected() 68 if err = bAgent.OnConnectionStateChange(bNotifier); err != nil { 69 t.Fatal(err) 70 } 71 72 connect(aAgent, bAgent) 73 <-aConnected 74 <-bConnected 75 76 if err = aAgent.Close(); err != nil { 77 t.Fatal(err) 78 } 79 if err = bAgent.Close(); err != nil { 80 t.Fatal(err) 81 } 82 if err = server.Close(); err != nil { 83 t.Fatal(err) 84 } 85} 86