package xmpp // import "gosrc.io/xmpp" import ( "encoding/xml" "testing" ) func TestHandshake(t *testing.T) { opts := ComponentOptions{ Domain: "test.localhost", Secret: "mypass", } c := Component{ComponentOptions: opts} streamID := "1263952298440005243" expected := "c77e2ef0109fbbc5161e83b51629cd1353495332" result := c.handshake(streamID) if result != expected { t.Errorf("incorrect handshake calculation '%s' != '%s'", result, expected) } } func TestGenerateHandshake(t *testing.T) { // TODO } // 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 for _, ext := range iq.Payload { if delegation, ok := ext.(*Delegation); ok { packet := delegation.Forwarded.Stanza forwardedIQ, ok := packet.(IQ) if !ok { t.Errorf("Could not extract packet IQ") return } payload := forwardedIQ.Payload if len(payload) > 0 { pl := payload[0] if pubsub, ok := pl.(*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) } }