func (s *SessionXmppSuite) Test_WatchStanzas_presence_unavailable_forKnownUser(c *C) { mockIn := &mockConnIOReaderWriter{read: []byte("<client:presence xmlns:client='jabber:client' from='[email protected]/balcony' to='*****@*****.**' type='unavailable'><client:status>going on vacation</client:status></client:presence>")} conn := xmpp.NewConn( xml.NewDecoder(mockIn), mockIn, "[email protected]/foo", ) sess := &session{ config: &config.ApplicationConfig{}, accountConfig: &config.Account{}, r: roster.New(), connStatus: DISCONNECTED, } sess.conn = conn sess.r.AddOrReplace(roster.PeerWithState("*****@*****.**", "somewhere", "", "")) observer := make(chan interface{}, 1) sess.Subscribe(observer) sess.watchStanzas() p, _ := sess.r.Get("*****@*****.**") c.Assert(p.Online, Equals, false) for { select { case ev := <-observer: switch t := ev.(type) { case events.Presence: c.Assert(t.Gone, Equals, true) return default: //ignore } case <-time.After(1 * time.Millisecond): c.Errorf("did not receive event") return } } }
func (s *SessionXmppSuite) Test_WatchStanzas_presence_ignoresSameState(c *C) { mockIn := &mockConnIOReaderWriter{read: []byte("<client:presence xmlns:client='jabber:client' from='[email protected]/balcony' to='*****@*****.**'><client:show>dnd</client:show></client:presence>")} conn := xmpp.NewConn( xml.NewDecoder(mockIn), mockIn, "[email protected]/foo", ) sess := &session{ config: &config.ApplicationConfig{}, accountConfig: &config.Account{}, r: roster.New(), connStatus: DISCONNECTED, } sess.conn = conn sess.r.AddOrReplace(roster.PeerWithState("*****@*****.**", "dnd", "", "")) observer := make(chan interface{}, 1) sess.Subscribe(observer) sess.watchStanzas() st, _, _ := sess.r.StateOf("*****@*****.**") c.Assert(st, Equals, "dnd") select { case ev := <-observer: switch ev.(type) { case events.Presence: c.Error("Received presence event") return default: // ignore } case <-time.After(1 * time.Millisecond): return } }