mirror of
https://github.com/pion/stun.git
synced 2025-10-05 15:56:56 +08:00
67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package stun
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
)
|
|
|
|
func newServer(t *testing.T) (*net.UDPAddr, func()) {
|
|
laddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
con, err := net.ListenUDP("udp", laddr)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
addr, ok := con.LocalAddr().(*net.UDPAddr)
|
|
if !ok {
|
|
t.Error("not UDP addr")
|
|
}
|
|
s := &Server{}
|
|
go s.Serve(con)
|
|
return addr, func() {
|
|
if err := con.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func newTestRequest(addr *net.UDPAddr, m *Message) Request {
|
|
return Request{
|
|
Message: m,
|
|
Target: addr.String(),
|
|
}
|
|
}
|
|
|
|
func TestClientServer(t *testing.T) {
|
|
serverAddr, closer := newServer(t)
|
|
defer closer()
|
|
m := AcquireFields(Message{
|
|
TransactionID: NewTransactionID(),
|
|
Type: MessageType{
|
|
Method: MethodBinding,
|
|
Class: ClassRequest,
|
|
},
|
|
})
|
|
m.AddSoftware("cydev/stun alpha")
|
|
m.WriteHeader()
|
|
r := newTestRequest(serverAddr, m)
|
|
defer ReleaseMessage(m)
|
|
if err := DefaultClient.Do(r, func(res Response) error {
|
|
if res.Message.GetSoftware() != "cydev/stun" {
|
|
t.Error("bad software attribute")
|
|
}
|
|
ip, _, err := res.Message.GetXORMappedAddress()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if !ip.Equal(net.ParseIP("127.0.0.1")) {
|
|
t.Error("bad ip", ip)
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|