Files
stun/integration_test.go
2016-05-11 16:53:35 +03:00

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)
}
}