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
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

secret_test.go 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package mtglib_test
  2. import (
  3. "encoding/hex"
  4. "encoding/json"
  5. "testing"
  6. "github.com/9seconds/mtg/v2/mtglib"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/stretchr/testify/suite"
  9. )
  10. type SecretTestSuite struct {
  11. suite.Suite
  12. }
  13. func (suite *SecretTestSuite) TestParseSecret() {
  14. secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665")
  15. s := mtglib.Secret{
  16. Host: "google.com",
  17. }
  18. copy(s.Key[:], secretData)
  19. testData := map[string]string{
  20. "hex": "eed11c6cbbd9efe7fed5bc0db220b09665676f6f676c652e636f6d",
  21. "base64": "7tEcbLvZ7-f-1bwNsiCwlmVnb29nbGUuY29t",
  22. }
  23. for name, value := range testData {
  24. param := value
  25. suite.T().Run(name, func(t *testing.T) {
  26. parsed, err := mtglib.ParseSecret(param)
  27. assert.NoError(t, err)
  28. assert.Equal(t, s.Key, parsed.Key)
  29. assert.Equal(t, s.Host, parsed.Host)
  30. newSecret := mtglib.Secret{}
  31. assert.NoError(t, newSecret.UnmarshalText([]byte(param)))
  32. assert.Equal(t, s.Key, newSecret.Key)
  33. assert.Equal(t, s.Host, newSecret.Host)
  34. })
  35. }
  36. }
  37. func (suite *SecretTestSuite) TestSerialize() {
  38. s := mtglib.Secret{}
  39. data, err := s.MarshalText()
  40. suite.NoError(err)
  41. suite.Empty(data)
  42. secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665")
  43. s = mtglib.Secret{
  44. Host: "google.com",
  45. }
  46. copy(s.Key[:], secretData)
  47. suite.Equal("eed11c6cbbd9efe7fed5bc0db220b09665676f6f676c652e636f6d", s.Hex())
  48. suite.Equal("7tEcbLvZ7-f-1bwNsiCwlmVnb29nbGUuY29t", s.Base64())
  49. }
  50. func (suite *SecretTestSuite) TestMarshalData() {
  51. secretData, _ := hex.DecodeString("d11c6cbbd9efe7fed5bc0db220b09665")
  52. s := mtglib.Secret{
  53. Host: "google.com",
  54. }
  55. copy(s.Key[:], secretData)
  56. data, err := json.Marshal(&s)
  57. suite.NoError(err)
  58. suite.Equal(string(data), `"7tEcbLvZ7-f-1bwNsiCwlmVnb29nbGUuY29t"`)
  59. }
  60. func (suite *SecretTestSuite) TestIncorrectSecret() {
  61. testData := []string{
  62. "aaa",
  63. "d11c6cbbd9efe7fed5bc0db220b09665",
  64. "ddd11c6cbbd9efe7fed5bc0db220b09665",
  65. "+ueJ0q91t5XOnFYP8Xac3A",
  66. "eed11c6cbbd9efe7fed5bc0db220b09665",
  67. "ed11c6cbbd9efe7fed5bc0db220b09665",
  68. "",
  69. "+**",
  70. "ee",
  71. "efd11c6cbbd9efe7fed5bc0db220b09665",
  72. }
  73. for _, v := range testData {
  74. param := v
  75. suite.T().Run(param, func(t *testing.T) {
  76. _, err := mtglib.ParseSecret(param)
  77. assert.Error(t, err)
  78. })
  79. }
  80. }
  81. func (suite *SecretTestSuite) TestInvariant() {
  82. generated := mtglib.GenerateSecret("google.com")
  83. parsed, err := mtglib.ParseSecret(generated.Hex())
  84. suite.NoError(err)
  85. suite.Equal(generated.Key, parsed.Key)
  86. suite.Equal(generated.Host, parsed.Host)
  87. suite.Equal("google.com", parsed.Host)
  88. }
  89. func (suite *SecretTestSuite) TestValid() {
  90. s := mtglib.Secret{}
  91. suite.False(s.Valid())
  92. s.Key[0] = 1
  93. suite.False(s.Valid())
  94. s.Host = "11"
  95. suite.True(s.Valid())
  96. }
  97. func TestSecret(t *testing.T) {
  98. t.Parallel()
  99. suite.Run(t, &SecretTestSuite{})
  100. }