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