forked from 42wim/go-xmpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
xmpp_test.go
116 lines (100 loc) · 2.26 KB
/
xmpp_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package xmpp
import (
"bytes"
"encoding/xml"
"io"
"net"
"reflect"
"strings"
"testing"
"time"
)
type localAddr struct{}
func (a *localAddr) Network() string {
return "tcp"
}
func (addr *localAddr) String() string {
return "localhost:5222"
}
type testConn struct {
*bytes.Buffer
}
func tConnect(s string) net.Conn {
var conn testConn
conn.Buffer = bytes.NewBufferString(s)
return &conn
}
func (*testConn) Close() error {
return nil
}
func (*testConn) LocalAddr() net.Addr {
return &localAddr{}
}
func (*testConn) RemoteAddr() net.Addr {
return &localAddr{}
}
func (*testConn) SetDeadline(time.Time) error {
return nil
}
func (*testConn) SetReadDeadline(time.Time) error {
return nil
}
func (*testConn) SetWriteDeadline(time.Time) error {
return nil
}
var text = strings.TrimSpace(`
<message xmlns="jabber:client" id="3" type="error" to="123456789@gcm.googleapis.com/ABC">
<gcm xmlns="google:mobile:data">
{"random": "<text>"}
</gcm>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
<text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
InvalidJson: JSON_PARSING_ERROR : Missing Required Field: message_id\n
</text>
</error>
</message>
`)
func TestStanzaError(t *testing.T) {
var c Client
c.conn = tConnect(text)
c.p = xml.NewDecoder(c.conn)
v, err := c.Recv()
if err != nil {
t.Fatalf("Recv() = %v", err)
}
chat := Chat{
Type: "error",
Other: []string{
"\n\t\t{\"random\": \"<text>\"}\n\t",
"\n\t\t\n\t\t\n\t",
},
OtherElem: []XMLElement{
XMLElement{
XMLName: xml.Name{Space: "google:mobile:data", Local: "gcm"},
InnerXML: "\n\t\t{\"random\": \"<text>\"}\n\t",
},
XMLElement{
XMLName: xml.Name{Space: "jabber:client", Local: "error"},
InnerXML: `
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
<text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
InvalidJson: JSON_PARSING_ERROR : Missing Required Field: message_id\n
</text>
`,
},
},
}
if !reflect.DeepEqual(v, chat) {
t.Errorf("Recv() = %#v; want %#v", v, chat)
}
}
func TestEOFError(t *testing.T) {
var c Client
c.conn = tConnect("")
c.p = xml.NewDecoder(c.conn)
_, err := c.Recv()
if err != io.EOF {
t.Errorf("Recv() did not return io.EOF on end of input stream")
}
}