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
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

frame_test.go 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package obfuscated2
  2. import (
  3. "bytes"
  4. "strconv"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/9seconds/mtg/mtproto"
  8. )
  9. func TestFrameKey(t *testing.T) {
  10. toCompare := make([]byte, 32)
  11. for i := 0; i < 32; i++ {
  12. toCompare[i] = byte(1)
  13. }
  14. assert.Equal(t, toCompare, makeFrame().Key())
  15. }
  16. func TestFrameIV(t *testing.T) {
  17. toCompare := make([]byte, 16)
  18. for i := 0; i < 16; i++ {
  19. toCompare[i] = byte(2)
  20. }
  21. assert.Equal(t, toCompare, makeFrame().IV())
  22. }
  23. func TestFrameMagic(t *testing.T) {
  24. toCompare := make([]byte, 4)
  25. for i := 0; i < 4; i++ {
  26. toCompare[i] = 0xee
  27. }
  28. assert.Equal(t, toCompare, makeFrame().Magic())
  29. }
  30. func TestFrameDC(t *testing.T) {
  31. assert.Equal(t, int16(771), makeFrame().DC())
  32. }
  33. func TestFrameValid(t *testing.T) {
  34. frame := makeFrame()
  35. connType, err := frame.ConnectionType()
  36. assert.Nil(t, err)
  37. assert.Equal(t, connType, mtproto.ConnectionTypeIntermediate)
  38. frame[8+32+16+2] = byte(3)
  39. _, err = frame.ConnectionType()
  40. assert.NotNil(t, err)
  41. }
  42. func TestFrameDoubleInvert(t *testing.T) {
  43. frame := makeFrame()
  44. assert.True(t, bytes.Equal(frame, frame.Invert().Invert()))
  45. }
  46. func TestFrameInvert(t *testing.T) {
  47. frame := makeFrame()
  48. reversed := frame.Invert()
  49. assert.Exactly(t, frame[:8], reversed[:8])
  50. assert.Exactly(t, frame[56:], reversed[56:])
  51. toCompare := make([]byte, 48)
  52. for i := 0; i < 48; i++ {
  53. toCompare[i] = frame[55-i]
  54. }
  55. assert.Equal(t, []byte(reversed[8:56]), toCompare)
  56. }
  57. func TestFrameGenerateValid(t *testing.T) {
  58. validTests := []mtproto.ConnectionType{
  59. mtproto.ConnectionTypeIntermediate,
  60. mtproto.ConnectionTypeAbridged,
  61. }
  62. for _, test := range validTests {
  63. t.Run(strconv.Itoa(int(test)), func(tt *testing.T) {
  64. frame := generateFrame(test)
  65. conType, err := frame.ConnectionType()
  66. assert.Nil(t, err)
  67. assert.Equal(t, conType, test)
  68. })
  69. }
  70. }
  71. func makeFrame() Frame {
  72. f := make(Frame, FrameLen)
  73. for i := 8; i < (8 + 32); i++ {
  74. f[i] = byte(1)
  75. }
  76. for i := (8 + 32); i < (8 + 32 + 16); i++ {
  77. f[i] = byte(2)
  78. }
  79. for i := (8 + 32 + 16); i < (8 + 32 + 16 + 4); i++ {
  80. f[i] = 0xee
  81. }
  82. for i := (8 + 32 + 16 + 4); i < (8 + 32 + 16 + 4 + 2); i++ {
  83. f[i] = byte(3)
  84. }
  85. return f
  86. }