xmpp_test.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. // Copyright 2011 Google Inc. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package xmpp
  5. import (
  6. "fmt"
  7. "reflect"
  8. "testing"
  9. "github.com/golang/protobuf/proto"
  10. "google.golang.org/appengine"
  11. "google.golang.org/appengine/internal/aetesting"
  12. pb "google.golang.org/appengine/internal/xmpp"
  13. )
  14. func newPresenceResponse(isAvailable bool, presence pb.PresenceResponse_SHOW, valid bool) *pb.PresenceResponse {
  15. return &pb.PresenceResponse{
  16. IsAvailable: proto.Bool(isAvailable),
  17. Presence: presence.Enum(),
  18. Valid: proto.Bool(valid),
  19. }
  20. }
  21. func setPresenceResponse(m *pb.PresenceResponse, isAvailable bool, presence pb.PresenceResponse_SHOW, valid bool) {
  22. m.IsAvailable = &isAvailable
  23. m.Presence = presence.Enum()
  24. m.Valid = &valid
  25. }
  26. func TestGetPresence(t *testing.T) {
  27. c := aetesting.FakeSingleContext(t, "xmpp", "GetPresence", func(in *pb.PresenceRequest, out *pb.PresenceResponse) error {
  28. if jid := in.GetJid(); jid != "user@example.com" {
  29. return fmt.Errorf("bad jid %q", jid)
  30. }
  31. setPresenceResponse(out, true, pb.PresenceResponse_CHAT, true)
  32. return nil
  33. })
  34. presence, err := GetPresence(c, "user@example.com", "")
  35. if err != nil {
  36. t.Fatalf("GetPresence: %v", err)
  37. }
  38. if presence != "chat" {
  39. t.Errorf("GetPresence: got %#v, want %#v", presence, pb.PresenceResponse_CHAT)
  40. }
  41. }
  42. func TestGetPresenceMultiSingleJID(t *testing.T) {
  43. c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
  44. if !reflect.DeepEqual(in.Jid, []string{"user@example.com"}) {
  45. return fmt.Errorf("bad request jids %#v", in.Jid)
  46. }
  47. out.PresenceResponse = []*pb.PresenceResponse{
  48. newPresenceResponse(true, pb.PresenceResponse_NORMAL, true),
  49. }
  50. return nil
  51. })
  52. presence, err := GetPresenceMulti(c, []string{"user@example.com"}, "")
  53. if err != nil {
  54. t.Fatalf("GetPresenceMulti: %v", err)
  55. }
  56. if !reflect.DeepEqual(presence, []string{""}) {
  57. t.Errorf("GetPresenceMulti: got %s, want %s", presence, []string{""})
  58. }
  59. }
  60. func TestGetPresenceMultiJID(t *testing.T) {
  61. c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
  62. if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
  63. return fmt.Errorf("bad request jids %#v", in.Jid)
  64. }
  65. out.PresenceResponse = []*pb.PresenceResponse{
  66. newPresenceResponse(true, pb.PresenceResponse_NORMAL, true),
  67. newPresenceResponse(true, pb.PresenceResponse_AWAY, true),
  68. }
  69. return nil
  70. })
  71. jids := []string{"user@example.com", "user2@example.com"}
  72. presence, err := GetPresenceMulti(c, jids, "")
  73. if err != nil {
  74. t.Fatalf("GetPresenceMulti: %v", err)
  75. }
  76. want := []string{"", "away"}
  77. if !reflect.DeepEqual(presence, want) {
  78. t.Errorf("GetPresenceMulti: got %v, want %v", presence, want)
  79. }
  80. }
  81. func TestGetPresenceMultiFromJID(t *testing.T) {
  82. c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
  83. if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
  84. return fmt.Errorf("bad request jids %#v", in.Jid)
  85. }
  86. if jid := in.GetFromJid(); jid != "bot@appspot.com" {
  87. return fmt.Errorf("bad from jid %q", jid)
  88. }
  89. out.PresenceResponse = []*pb.PresenceResponse{
  90. newPresenceResponse(true, pb.PresenceResponse_NORMAL, true),
  91. newPresenceResponse(true, pb.PresenceResponse_CHAT, true),
  92. }
  93. return nil
  94. })
  95. jids := []string{"user@example.com", "user2@example.com"}
  96. presence, err := GetPresenceMulti(c, jids, "bot@appspot.com")
  97. if err != nil {
  98. t.Fatalf("GetPresenceMulti: %v", err)
  99. }
  100. want := []string{"", "chat"}
  101. if !reflect.DeepEqual(presence, want) {
  102. t.Errorf("GetPresenceMulti: got %v, want %v", presence, want)
  103. }
  104. }
  105. func TestGetPresenceMultiInvalid(t *testing.T) {
  106. c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
  107. if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
  108. return fmt.Errorf("bad request jids %#v", in.Jid)
  109. }
  110. out.PresenceResponse = []*pb.PresenceResponse{
  111. newPresenceResponse(true, pb.PresenceResponse_EXTENDED_AWAY, true),
  112. newPresenceResponse(true, pb.PresenceResponse_CHAT, false),
  113. }
  114. return nil
  115. })
  116. jids := []string{"user@example.com", "user2@example.com"}
  117. presence, err := GetPresenceMulti(c, jids, "")
  118. wantErr := appengine.MultiError{nil, ErrInvalidJID}
  119. if !reflect.DeepEqual(err, wantErr) {
  120. t.Fatalf("GetPresenceMulti: got %#v, want %#v", err, wantErr)
  121. }
  122. want := []string{"xa", ""}
  123. if !reflect.DeepEqual(presence, want) {
  124. t.Errorf("GetPresenceMulti: got %#v, want %#v", presence, want)
  125. }
  126. }
  127. func TestGetPresenceMultiUnavailable(t *testing.T) {
  128. c := aetesting.FakeSingleContext(t, "xmpp", "BulkGetPresence", func(in *pb.BulkPresenceRequest, out *pb.BulkPresenceResponse) error {
  129. if !reflect.DeepEqual(in.Jid, []string{"user@example.com", "user2@example.com"}) {
  130. return fmt.Errorf("bad request jids %#v", in.Jid)
  131. }
  132. out.PresenceResponse = []*pb.PresenceResponse{
  133. newPresenceResponse(false, pb.PresenceResponse_AWAY, true),
  134. newPresenceResponse(false, pb.PresenceResponse_DO_NOT_DISTURB, true),
  135. }
  136. return nil
  137. })
  138. jids := []string{"user@example.com", "user2@example.com"}
  139. presence, err := GetPresenceMulti(c, jids, "")
  140. wantErr := appengine.MultiError{
  141. ErrPresenceUnavailable,
  142. ErrPresenceUnavailable,
  143. }
  144. if !reflect.DeepEqual(err, wantErr) {
  145. t.Fatalf("GetPresenceMulti: got %#v, want %#v", err, wantErr)
  146. }
  147. want := []string{"", ""}
  148. if !reflect.DeepEqual(presence, want) {
  149. t.Errorf("GetPresenceMulti: got %#v, want %#v", presence, want)
  150. }
  151. }