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
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

client_handshake_test.go 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package obfuscated2_test
  2. import (
  3. "bytes"
  4. "testing"
  5. "github.com/9seconds/mtg/v2/internal/testlib"
  6. "github.com/9seconds/mtg/v2/mtglib/internal/obfuscated2"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/stretchr/testify/mock"
  9. "github.com/stretchr/testify/suite"
  10. )
  11. type ClientHandshakeTestSuite struct {
  12. suite.Suite
  13. SnapshotTestSuite
  14. }
  15. func (suite *ClientHandshakeTestSuite) SetupSuite() {
  16. suite.NoError(suite.IngestSnapshots(".", "client-handshake-snapshot-"))
  17. }
  18. func (suite *ClientHandshakeTestSuite) TestCannotRead() {
  19. buf := bytes.NewBuffer([]byte{1, 2, 3})
  20. _, _, _, err := obfuscated2.ClientHandshake([]byte{1, 2, 3}, buf) // nolint: dogsled
  21. suite.Error(err)
  22. }
  23. func (suite *ClientHandshakeTestSuite) TestOk() {
  24. for nameV, snapshotV := range suite.snapshots {
  25. snapshot := snapshotV
  26. suite.T().Run(nameV, func(t *testing.T) {
  27. buf := bytes.NewBuffer(snapshot.Frame.data)
  28. dc, encryptor, decryptor, err := obfuscated2.ClientHandshake(
  29. snapshot.Secret.data, buf)
  30. assert.NoError(t, err)
  31. assert.EqualValues(t, snapshot.DC, dc)
  32. writeData := make([]byte, len(snapshot.Encrypted.Text.data))
  33. readData := make([]byte, len(snapshot.Decrypted.Text.data))
  34. connMock := &testlib.NetConnMock{}
  35. connMock.On("Read", mock.Anything).
  36. Once().
  37. Return(len(snapshot.Decrypted.Text.data), nil).
  38. Run(func(args mock.Arguments) {
  39. arr := args.Get(0).([]byte)
  40. copy(arr, snapshot.Decrypted.Cipher.data)
  41. })
  42. connMock.On("Write", mock.Anything).
  43. Once().
  44. Return(len(snapshot.Encrypted.Text.data), nil).
  45. Run(func(args mock.Arguments) {
  46. arr := args.Get(0).([]byte)
  47. copy(writeData, arr)
  48. })
  49. conn := obfuscated2.Conn{
  50. Conn: connMock,
  51. Encryptor: encryptor,
  52. Decryptor: decryptor,
  53. }
  54. n, err := conn.Read(readData)
  55. assert.Equal(t, len(readData), n)
  56. assert.NoError(t, err)
  57. assert.Equal(t, snapshot.Decrypted.Text.data, readData)
  58. n, err = conn.Write(snapshot.Encrypted.Text.data)
  59. assert.Equal(t, len(writeData), n)
  60. assert.NoError(t, err)
  61. assert.Equal(t, snapshot.Encrypted.Cipher.data, writeData)
  62. connMock.AssertExpectations(t)
  63. })
  64. }
  65. }
  66. func TestClientHandshake(t *testing.T) {
  67. t.Parallel()
  68. suite.Run(t, &ClientHandshakeTestSuite{})
  69. }