permit_deny_test.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package handler
  2. import (
  3. "bytes"
  4. "log/slog"
  5. "testing"
  6. "github.com/mk6i/retro-aim-server/state"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/stretchr/testify/mock"
  9. "github.com/mk6i/retro-aim-server/wire"
  10. )
  11. func TestPermitDenyHandler_RightsQuery(t *testing.T) {
  12. input := wire.SNACMessage{
  13. Frame: wire.SNACFrame{
  14. FoodGroup: wire.PermitDeny,
  15. SubGroup: wire.PermitDenyRightsQuery,
  16. },
  17. Body: struct{}{},
  18. }
  19. output := wire.SNACMessage{
  20. Frame: wire.SNACFrame{
  21. FoodGroup: wire.PermitDeny,
  22. SubGroup: wire.PermitDenyRightsReply,
  23. },
  24. Body: wire.SNAC_0x09_0x03_PermitDenyRightsReply{
  25. TLVRestBlock: wire.TLVRestBlock{
  26. TLVList: wire.TLVList{
  27. wire.NewTLVBE(0x01, uint16(1000)),
  28. },
  29. },
  30. },
  31. }
  32. svc := newMockPermitDenyService(t)
  33. svc.EXPECT().
  34. RightsQuery(mock.Anything, input.Frame).
  35. Return(output)
  36. h := NewPermitDenyHandler(slog.Default(), svc)
  37. responseWriter := newMockResponseWriter(t)
  38. responseWriter.EXPECT().
  39. SendSNAC(output.Frame, output.Body).
  40. Return(nil)
  41. buf := &bytes.Buffer{}
  42. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  43. assert.NoError(t, h.RightsQuery(nil, nil, input.Frame, buf, responseWriter))
  44. }
  45. func TestPermitDenyHandler_AddDenyListEntries(t *testing.T) {
  46. sess := state.NewSession()
  47. input := wire.SNACMessage{
  48. Frame: wire.SNACFrame{
  49. FoodGroup: wire.PermitDeny,
  50. SubGroup: wire.PermitDenyAddDenyListEntries,
  51. },
  52. Body: wire.SNAC_0x09_0x07_PermitDenyAddDenyListEntries{
  53. Users: []struct {
  54. ScreenName string `oscar:"len_prefix=uint8"`
  55. }{
  56. {
  57. ScreenName: "friend1",
  58. },
  59. {
  60. ScreenName: "friend2",
  61. },
  62. },
  63. },
  64. }
  65. svc := newMockPermitDenyService(t)
  66. svc.EXPECT().
  67. AddDenyListEntries(mock.Anything, sess, input.Body).
  68. Return(nil)
  69. buf := &bytes.Buffer{}
  70. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  71. h := NewPermitDenyHandler(slog.Default(), svc)
  72. assert.NoError(t, h.AddDenyListEntries(nil, sess, input.Frame, buf, nil))
  73. }
  74. func TestPermitDenyHandler_DelDenyListEntries(t *testing.T) {
  75. sess := state.NewSession()
  76. input := wire.SNACMessage{
  77. Frame: wire.SNACFrame{
  78. FoodGroup: wire.PermitDeny,
  79. SubGroup: wire.PermitDenyDelDenyListEntries,
  80. },
  81. Body: wire.SNAC_0x09_0x08_PermitDenyDelDenyListEntries{
  82. Users: []struct {
  83. ScreenName string `oscar:"len_prefix=uint8"`
  84. }{
  85. {
  86. ScreenName: "friend1",
  87. },
  88. {
  89. ScreenName: "friend2",
  90. },
  91. },
  92. },
  93. }
  94. svc := newMockPermitDenyService(t)
  95. svc.EXPECT().
  96. DelDenyListEntries(mock.Anything, sess, input.Body).
  97. Return(nil)
  98. buf := &bytes.Buffer{}
  99. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  100. h := NewPermitDenyHandler(slog.Default(), svc)
  101. assert.NoError(t, h.DelDenyListEntries(nil, sess, input.Frame, buf, nil))
  102. }
  103. func TestPermitDenyHandler_AddPermListEntries(t *testing.T) {
  104. sess := state.NewSession()
  105. input := wire.SNACMessage{
  106. Frame: wire.SNACFrame{
  107. FoodGroup: wire.PermitDeny,
  108. SubGroup: wire.PermitDenyAddPermListEntries,
  109. },
  110. Body: wire.SNAC_0x09_0x05_PermitDenyAddPermListEntries{
  111. Users: []struct {
  112. ScreenName string `oscar:"len_prefix=uint8"`
  113. }{
  114. {
  115. ScreenName: "friend1",
  116. },
  117. {
  118. ScreenName: "friend2",
  119. },
  120. },
  121. },
  122. }
  123. svc := newMockPermitDenyService(t)
  124. svc.EXPECT().
  125. AddPermListEntries(mock.Anything, sess, input.Body).
  126. Return(nil)
  127. buf := &bytes.Buffer{}
  128. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  129. h := NewPermitDenyHandler(slog.Default(), svc)
  130. assert.NoError(t, h.AddPermListEntries(nil, sess, input.Frame, buf, nil))
  131. }
  132. func TestPermitDenyHandler_DelPermListEntries(t *testing.T) {
  133. sess := state.NewSession()
  134. input := wire.SNACMessage{
  135. Frame: wire.SNACFrame{
  136. FoodGroup: wire.PermitDeny,
  137. SubGroup: wire.PermitDenyDelPermListEntries,
  138. },
  139. Body: wire.SNAC_0x09_0x06_PermitDenyDelPermListEntries{
  140. Users: []struct {
  141. ScreenName string `oscar:"len_prefix=uint8"`
  142. }{
  143. {
  144. ScreenName: "friend1",
  145. },
  146. {
  147. ScreenName: "friend2",
  148. },
  149. },
  150. },
  151. }
  152. svc := newMockPermitDenyService(t)
  153. svc.EXPECT().
  154. DelPermListEntries(mock.Anything, sess, input.Body).
  155. Return(nil)
  156. buf := &bytes.Buffer{}
  157. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  158. h := NewPermitDenyHandler(slog.Default(), svc)
  159. assert.NoError(t, h.DelPermListEntries(nil, sess, input.Frame, buf, nil))
  160. }
  161. func TestPermitDenyHandler_SetGroupPermitMask(t *testing.T) {
  162. sess := state.NewSession()
  163. input := wire.SNACMessage{
  164. Frame: wire.SNACFrame{
  165. FoodGroup: wire.PermitDeny,
  166. SubGroup: wire.PermitDenyDelPermListEntries,
  167. },
  168. Body: wire.SNAC_0x09_0x04_PermitDenySetGroupPermitMask{
  169. PermMask: 1234,
  170. },
  171. }
  172. svc := newMockPermitDenyService(t)
  173. buf := &bytes.Buffer{}
  174. assert.NoError(t, wire.MarshalBE(input.Body, buf))
  175. h := NewPermitDenyHandler(slog.Default(), svc)
  176. assert.NoError(t, h.SetGroupPermitMask(nil, sess, input.Frame, buf, nil))
  177. }