80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
|
package stanza
|
||
|
|
||
|
import (
|
||
|
"encoding/xml"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
// We should be able to properly parse delegation confirmation messages
|
||
|
func TestParsingDelegationMessage(t *testing.T) {
|
||
|
packetStr := `<message to='service.localhost' from='localhost'>
|
||
|
<delegation xmlns='urn:xmpp:delegation:1'>
|
||
|
<delegated namespace='http://jabber.org/protocol/pubsub'/>
|
||
|
</delegation>
|
||
|
</message>`
|
||
|
var msg Message
|
||
|
data := []byte(packetStr)
|
||
|
if err := xml.Unmarshal(data, &msg); err != nil {
|
||
|
t.Errorf("Unmarshal(%s) returned error", data)
|
||
|
}
|
||
|
|
||
|
// Check that we have extracted the delegation info as MsgExtension
|
||
|
var nsDelegated string
|
||
|
for _, ext := range msg.Extensions {
|
||
|
if delegation, ok := ext.(*Delegation); ok {
|
||
|
nsDelegated = delegation.Delegated.Namespace
|
||
|
}
|
||
|
}
|
||
|
if nsDelegated != "http://jabber.org/protocol/pubsub" {
|
||
|
t.Errorf("Could not find delegated namespace in delegation: %#v\n", msg)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Check that we can parse a delegation IQ.
|
||
|
// The most important thing is to be able to
|
||
|
func TestParsingDelegationIQ(t *testing.T) {
|
||
|
packetStr := `<iq to='service.localhost' from='localhost' type='set' id='1'>
|
||
|
<delegation xmlns='urn:xmpp:delegation:1'>
|
||
|
<forwarded xmlns='urn:xmpp:forward:0'>
|
||
|
<iq xml:lang='en' to='test1@localhost' from='test1@localhost/mremond-mbp' type='set' id='aaf3a' xmlns='jabber:client'>
|
||
|
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
|
||
|
<publish node='http://jabber.org/protocol/mood'>
|
||
|
<item id='current'>
|
||
|
<mood xmlns='http://jabber.org/protocol/mood'>
|
||
|
<excited/>
|
||
|
</mood>
|
||
|
</item>
|
||
|
</publish>
|
||
|
</pubsub>
|
||
|
</iq>
|
||
|
</forwarded>
|
||
|
</delegation>
|
||
|
</iq>`
|
||
|
var iq IQ
|
||
|
data := []byte(packetStr)
|
||
|
if err := xml.Unmarshal(data, &iq); err != nil {
|
||
|
t.Errorf("Unmarshal(%s) returned error", data)
|
||
|
}
|
||
|
|
||
|
// Check that we have extracted the delegation info as IQPayload
|
||
|
var node string
|
||
|
if iq.Payload != nil {
|
||
|
if delegation, ok := iq.Payload.(*Delegation); ok {
|
||
|
packet := delegation.Forwarded.Stanza
|
||
|
forwardedIQ, ok := packet.(IQ)
|
||
|
if !ok {
|
||
|
t.Errorf("Could not extract packet IQ")
|
||
|
return
|
||
|
}
|
||
|
if forwardedIQ.Payload != nil {
|
||
|
if pubsub, ok := forwardedIQ.Payload.(*PubSub); ok {
|
||
|
node = pubsub.Publish.Node
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if node != "http://jabber.org/protocol/mood" {
|
||
|
t.Errorf("Could not find mood node name on delegated publish: %#v\n", iq)
|
||
|
}
|
||
|
}
|