Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

event_stream_test.go 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package events_test
  2. import (
  3. "context"
  4. "net"
  5. "testing"
  6. "time"
  7. "github.com/9seconds/mtg/v2/events"
  8. "github.com/9seconds/mtg/v2/mtglib"
  9. "github.com/stretchr/testify/mock"
  10. "github.com/stretchr/testify/suite"
  11. )
  12. type EventStreamTestSuite struct {
  13. suite.Suite
  14. ctx context.Context
  15. ctxCancel context.CancelFunc
  16. observerMock1 *ObserverMock
  17. observerMock2 *ObserverMock
  18. stream mtglib.EventStream
  19. }
  20. func (suite *EventStreamTestSuite) SetupTest() {
  21. suite.ctx, suite.ctxCancel = context.WithCancel(context.Background())
  22. suite.observerMock1 = &ObserverMock{}
  23. suite.observerMock2 = &ObserverMock{}
  24. suite.observerMock1.On("Shutdown")
  25. suite.observerMock2.On("Shutdown")
  26. factories := make([]events.ObserverFactory, 2)
  27. factories[0] = func() events.Observer { return suite.observerMock1 }
  28. factories[1] = func() events.Observer { return suite.observerMock2 }
  29. suite.stream = events.NewEventStream(factories)
  30. }
  31. func (suite *EventStreamTestSuite) TestEventStartOk() {
  32. evt := mtglib.EventStart{
  33. CreatedAt: time.Now(),
  34. ConnID: "connID",
  35. RemoteIP: net.ParseIP("10.0.0.1"),
  36. }
  37. for _, v := range []*ObserverMock{suite.observerMock1, suite.observerMock2} {
  38. v.
  39. On("EventStart", mock.Anything).
  40. Once().
  41. Run(func(args mock.Arguments) {
  42. caught := args.Get(0).(mtglib.EventStart)
  43. suite.Equal(evt.CreatedAt, caught.CreatedAt)
  44. suite.Equal(evt.ConnID, caught.ConnID)
  45. suite.Equal(evt.RemoteIP.String(), caught.RemoteIP.String())
  46. suite.Equal(evt.StreamID(), caught.StreamID())
  47. })
  48. }
  49. suite.stream.Send(suite.ctx, evt)
  50. time.Sleep(100 * time.Millisecond)
  51. }
  52. func (suite *EventStreamTestSuite) TestEventFinishOk() {
  53. evt := mtglib.EventFinish{
  54. CreatedAt: time.Now(),
  55. ConnID: "connID",
  56. }
  57. for _, v := range []*ObserverMock{suite.observerMock1, suite.observerMock2} {
  58. v.
  59. On("EventFinish", mock.Anything).
  60. Once().
  61. Run(func(args mock.Arguments) {
  62. caught := args.Get(0).(mtglib.EventFinish)
  63. suite.Equal(evt.CreatedAt, caught.CreatedAt)
  64. suite.Equal(evt.ConnID, caught.ConnID)
  65. suite.Equal(evt.StreamID(), caught.StreamID())
  66. })
  67. }
  68. suite.stream.Send(suite.ctx, evt)
  69. time.Sleep(100 * time.Millisecond)
  70. }
  71. func (suite *EventStreamTestSuite) TestEventConcurrencyLimitedOk() {
  72. evt := mtglib.EventConcurrencyLimited{
  73. CreatedAt: time.Now(),
  74. }
  75. for _, v := range []*ObserverMock{suite.observerMock1, suite.observerMock2} {
  76. v.
  77. On("EventConcurrencyLimited", mock.Anything).
  78. Once().
  79. Run(func(args mock.Arguments) {
  80. caught := args.Get(0).(mtglib.EventConcurrencyLimited)
  81. suite.Equal(evt.CreatedAt, caught.CreatedAt)
  82. })
  83. }
  84. suite.stream.Send(suite.ctx, evt)
  85. time.Sleep(100 * time.Millisecond)
  86. }
  87. func (suite *EventStreamTestSuite) TestEventIPBlocklistedOk() {
  88. evt := mtglib.EventIPBlocklisted{
  89. CreatedAt: time.Now(),
  90. RemoteIP: net.ParseIP("10.0.0.10"),
  91. }
  92. for _, v := range []*ObserverMock{suite.observerMock1, suite.observerMock2} {
  93. v.
  94. On("EventIPBlocklisted", mock.Anything).
  95. Once().
  96. Run(func(args mock.Arguments) {
  97. caught := args.Get(0).(mtglib.EventIPBlocklisted)
  98. suite.Equal(evt.CreatedAt, caught.CreatedAt)
  99. suite.Equal(evt.StreamID(), caught.StreamID())
  100. suite.Equal(evt.RemoteIP.String(), caught.RemoteIP.String())
  101. })
  102. }
  103. suite.stream.Send(suite.ctx, evt)
  104. time.Sleep(100 * time.Millisecond)
  105. }
  106. func (suite *EventStreamTestSuite) TearDownTest() {
  107. suite.stream.Shutdown()
  108. suite.ctxCancel()
  109. time.Sleep(100 * time.Millisecond)
  110. suite.observerMock1.AssertExpectations(suite.T())
  111. suite.observerMock2.AssertExpectations(suite.T())
  112. }
  113. func TestEventStream(t *testing.T) {
  114. t.Parallel()
  115. suite.Run(t, &EventStreamTestSuite{})
  116. }