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 символів.

scout_conn_collected_test.go 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package doppel
  2. import (
  3. "sync"
  4. "testing"
  5. "time"
  6. "github.com/9seconds/mtg/v2/mtglib/internal/tls"
  7. "github.com/stretchr/testify/suite"
  8. )
  9. type ScoutConnCollectedTestSuite struct {
  10. suite.Suite
  11. }
  12. func (suite *ScoutConnCollectedTestSuite) TestAddSingle() {
  13. collected := NewScoutConnCollected()
  14. collected.Add(tls.TypeApplicationData, 100)
  15. data, _ := collected.Snapshot()
  16. suite.Len(data, 1)
  17. suite.Equal(byte(tls.TypeApplicationData), data[0].recordType)
  18. }
  19. func (suite *ScoutConnCollectedTestSuite) TestAddTimestampsAreMonotonic() {
  20. collected := NewScoutConnCollected()
  21. collected.Add(tls.TypeApplicationData, 100)
  22. time.Sleep(time.Microsecond)
  23. collected.Add(tls.TypeApplicationData, 100)
  24. time.Sleep(time.Microsecond)
  25. collected.Add(tls.TypeApplicationData, 100)
  26. data, _ := collected.Snapshot()
  27. for i := 1; i < len(data); i++ {
  28. suite.True(data[i].timestamp.After(data[i-1].timestamp))
  29. }
  30. }
  31. func (suite *ScoutConnCollectedTestSuite) TestConcurrentAddSnapshot() {
  32. collected := NewScoutConnCollected()
  33. var wg sync.WaitGroup
  34. wg.Add(3)
  35. go func() {
  36. defer wg.Done()
  37. for i := 0; i < 1000; i++ {
  38. collected.Add(tls.TypeApplicationData, i)
  39. }
  40. }()
  41. go func() {
  42. defer wg.Done()
  43. for i := 0; i < 100; i++ {
  44. collected.MarkWrite()
  45. }
  46. }()
  47. go func() {
  48. defer wg.Done()
  49. for i := 0; i < 1000; i++ {
  50. // call Snapshot concurrently to exercise the lock under -race
  51. collected.Snapshot() //nolint:errcheck
  52. }
  53. }()
  54. wg.Wait()
  55. data, writeIndex := collected.Snapshot()
  56. suite.Len(data, 1000)
  57. suite.GreaterOrEqual(writeIndex, 0)
  58. }
  59. func TestScoutConnCollected(t *testing.T) {
  60. t.Parallel()
  61. suite.Run(t, &ScoutConnCollectedTestSuite{})
  62. }