1package xmpp 2 3import ( 4 "encoding/hex" 5 "net" 6 7 . "gopkg.in/check.v1" 8) 9 10type DNSXMPPSuite struct{} 11 12var _ = Suite(&DNSXMPPSuite{}) 13 14func fakeTCPConnToDNS(answer []byte) (net.Conn, error) { 15 fakeResolver, _ := net.Listen("tcp", "127.0.0.1:0") 16 go func() { 17 conn, _ := fakeResolver.Accept() 18 19 var dest [46]byte 20 conn.Read(dest[:]) 21 conn.Write(answer) 22 23 conn.Close() 24 }() 25 26 return net.Dial("tcp", fakeResolver.Addr().String()) 27} 28 29func (s *DNSXMPPSuite) Test_Resolve_resolvesCorrectly(c *C) { 30 dec, _ := hex.DecodeString("00511eea818000010001000000000c5f786d70702d636c69656e74045f746370076f6c6162696e690273650000210001c00c0021000100000258001700000005146604786d7070076f6c6162696e6902736500") 31 32 p := &mockProxy{} 33 p.Expects(func(network, addr string) (net.Conn, error) { 34 c.Check(network, Equals, "tcp") 35 c.Check(addr, Equals, "208.67.222.222:53") 36 37 return fakeTCPConnToDNS(dec) 38 }) 39 40 hostport, err := ResolveSRVWithProxy(p, "olabini.se") 41 c.Assert(err, IsNil) 42 c.Assert(hostport[0], Equals, "xmpp.olabini.se:5222") 43 c.Check(p, MatchesExpectations) 44} 45 46// WARNING: this test requires a real live connection to the Internet. Not so good... 47func (s *DNSXMPPSuite) Test_Resolve_handlesErrors(c *C) { 48 _, err := Resolve("doesntexist.olabini.se") 49 50 //It only happens when using golang resolver 51 //ResolveSRVWithProxy will not return an error 52 c.Assert(err, NotNil) 53 c.Assert(err.Error(), Matches, "lookup _xmpp-client._tcp.doesntexist.olabini.se.*?") 54} 55