2014-02-10 08:52:13 +04:00
|
|
|
// Copyright 2011 Google Inc. All rights reserved.
|
|
|
|
// Use of this source code is governed by the Apache 2.0
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package xmpp
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
|
2014-11-25 03:47:41 +03:00
|
|
|
"github.com/golang/protobuf/proto"
|
2014-02-10 08:52:13 +04:00
|
|
|
|
|
|
|
"google.golang.org/appengine"
|
|
|
|
"google.golang.org/appengine/internal/aetesting"
|
|
|
|
pb "google.golang.org/appengine/internal/xmpp"
|
|
|
|
)
|
|
|
|
|
|
|
|
func newPresenceResponse(isAvailable bool, presence pb.PresenceResponse_SHOW, valid bool) *pb.PresenceResponse {
|
|
|
|
return &pb.PresenceResponse{
|
|
|
|
IsAvailable: proto.Bool(isAvailable),
|
|
|
|
Presence: presence.Enum(),
|
|
|
|
Valid: proto.Bool(valid),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func setPresenceResponse(m *pb.PresenceResponse, isAvailable bool, presence pb.PresenceResponse_SHOW, valid bool) {
|
|
|
|
m.IsAvailable = &isAvailable
|
|
|
|
m.Presence = presence.Enum()
|
|
|
|
m.Valid = &valid
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetPresence(t *testing.T) {
|
|
|
|
c := aetesting.FakeSingleContext(t, "xmpp", "GetPresence", func(in *pb.PresenceRequest, out *pb.PresenceResponse) error {
|
|
|
|
if jid := in.GetJid(); jid != "user@example.com" {
|
|
|
|
return fmt.Errorf("bad jid %q", jid)
|
|
|
|
}
|
|
|
|
setPresenceResponse(out, true, pb.PresenceResponse_CHAT, true)
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
presence, err := GetPresence(c, "user@example.com", "")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("GetPresence: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if presence != "chat" {
|
|
|
|
t.Errorf("GetPresence: got %#v, want %#v", presence, pb.PresenceResponse_CHAT)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetPresenceMultiSingleJID(t *testing.T) {
|
|
|
|
c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
|
|
|
|
if !reflect.DeepEqual(in.Jid, []string{"user@example.com"}) {
|
|
|
|
return fmt.Errorf("bad request jids %#v", in.Jid)
|
|
|
|
}
|
|
|
|
out.PresenceResponse = []*pb.PresenceResponse{
|
|
|
|
newPresenceResponse(true, pb.PresenceResponse_NORMAL, true),
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
presence, err := GetPresenceMulti(c, []string{"user@example.com"}, "")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("GetPresenceMulti: %v", err)
|
|
|
|
}
|
|
|
|
if !reflect.DeepEqual(presence, []string{""}) {
|
|
|
|
t.Errorf("GetPresenceMulti: got %s, want %s", presence, []string{""})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetPresenceMultiJID(t *testing.T) {
|
|
|
|
c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
|
|
|
|
if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
|
|
|
|
return fmt.Errorf("bad request jids %#v", in.Jid)
|
|
|
|
}
|
|
|
|
out.PresenceResponse = []*pb.PresenceResponse{
|
|
|
|
newPresenceResponse(true, pb.PresenceResponse_NORMAL, true),
|
|
|
|
newPresenceResponse(true, pb.PresenceResponse_AWAY, true),
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
jids := []string{"user@example.com", "user2@example.com"}
|
|
|
|
presence, err := GetPresenceMulti(c, jids, "")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("GetPresenceMulti: %v", err)
|
|
|
|
}
|
|
|
|
want := []string{"", "away"}
|
|
|
|
if !reflect.DeepEqual(presence, want) {
|
|
|
|
t.Errorf("GetPresenceMulti: got %v, want %v", presence, want)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetPresenceMultiFromJID(t *testing.T) {
|
|
|
|
c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
|
|
|
|
if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
|
|
|
|
return fmt.Errorf("bad request jids %#v", in.Jid)
|
|
|
|
}
|
|
|
|
if jid := in.GetFromJid(); jid != "bot@appspot.com" {
|
|
|
|
return fmt.Errorf("bad from jid %q", jid)
|
|
|
|
}
|
|
|
|
out.PresenceResponse = []*pb.PresenceResponse{
|
|
|
|
newPresenceResponse(true, pb.PresenceResponse_NORMAL, true),
|
|
|
|
newPresenceResponse(true, pb.PresenceResponse_CHAT, true),
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
jids := []string{"user@example.com", "user2@example.com"}
|
|
|
|
presence, err := GetPresenceMulti(c, jids, "bot@appspot.com")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("GetPresenceMulti: %v", err)
|
|
|
|
}
|
|
|
|
want := []string{"", "chat"}
|
|
|
|
if !reflect.DeepEqual(presence, want) {
|
|
|
|
t.Errorf("GetPresenceMulti: got %v, want %v", presence, want)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetPresenceMultiInvalid(t *testing.T) {
|
|
|
|
c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
|
|
|
|
if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
|
|
|
|
return fmt.Errorf("bad request jids %#v", in.Jid)
|
|
|
|
}
|
|
|
|
out.PresenceResponse = []*pb.PresenceResponse{
|
|
|
|
newPresenceResponse(true, pb.PresenceResponse_EXTENDED_AWAY, true),
|
|
|
|
newPresenceResponse(true, pb.PresenceResponse_CHAT, false),
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
jids := []string{"user@example.com", "user2@example.com"}
|
|
|
|
presence, err := GetPresenceMulti(c, jids, "")
|
|
|
|
|
|
|
|
wantErr := appengine.MultiError{nil, ErrInvalidJID}
|
|
|
|
if !reflect.DeepEqual(err, wantErr) {
|
|
|
|
t.Fatalf("GetPresenceMulti: got %#v, want %#v", err, wantErr)
|
|
|
|
}
|
|
|
|
|
|
|
|
want := []string{"xa", ""}
|
|
|
|
if !reflect.DeepEqual(presence, want) {
|
|
|
|
t.Errorf("GetPresenceMulti: got %#v, want %#v", presence, want)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetPresenceMultiUnavailable(t *testing.T) {
|
|
|
|
c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
|
|
|
|
if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
|
|
|
|
return fmt.Errorf("bad request jids %#v", in.Jid)
|
|
|
|
}
|
|
|
|
out.PresenceResponse = []*pb.PresenceResponse{
|
|
|
|
newPresenceResponse(false, pb.PresenceResponse_AWAY, true),
|
|
|
|
newPresenceResponse(false, pb.PresenceResponse_DO_NOT_DISTURB, true),
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
jids := []string{"user@example.com", "user2@example.com"}
|
|
|
|
presence, err := GetPresenceMulti(c, jids, "")
|
|
|
|
|
|
|
|
wantErr := appengine.MultiError{
|
|
|
|
ErrPresenceUnavailable,
|
|
|
|
ErrPresenceUnavailable,
|
|
|
|
}
|
|
|
|
if !reflect.DeepEqual(err, wantErr) {
|
|
|
|
t.Fatalf("GetPresenceMulti: got %#v, want %#v", err, wantErr)
|
|
|
|
}
|
|
|
|
want := []string{"", ""}
|
|
|
|
if !reflect.DeepEqual(presence, want) {
|
|
|
|
t.Errorf("GetPresenceMulti: got %#v, want %#v", presence, want)
|
|
|
|
}
|
|
|
|
}
|