123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- // 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"
- "github.com/golang/protobuf/proto"
- "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)
- }
- }
|