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文字以内のものにしてください。

config_test.go 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package config_test
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. "github.com/9seconds/mtg/v2/internal/config"
  7. "github.com/stretchr/testify/suite"
  8. )
  9. type ConfigTestSuite struct {
  10. suite.Suite
  11. }
  12. func (suite *ConfigTestSuite) ReadConfig(filename string) []byte {
  13. data, err := os.ReadFile(filepath.Join("testdata", filename))
  14. suite.NoError(err)
  15. return data
  16. }
  17. func (suite *ConfigTestSuite) TestParseEmpty() {
  18. _, err := config.Parse([]byte{})
  19. suite.Error(err)
  20. }
  21. func (suite *ConfigTestSuite) TestParseBrokenToml() {
  22. _, err := config.Parse(suite.ReadConfig("broken.toml"))
  23. suite.Error(err)
  24. }
  25. func (suite *ConfigTestSuite) TestParseOnlySecret() {
  26. _, err := config.Parse(suite.ReadConfig("only_secret.toml"))
  27. suite.Error(err)
  28. }
  29. func (suite *ConfigTestSuite) TestParseMinimalConfig() {
  30. conf, err := config.Parse(suite.ReadConfig("minimal.toml"))
  31. suite.NoError(err)
  32. suite.Equal("7oe1GqLy6TBc38CV3jx7q09nb29nbGUuY29t", conf.Secret.Base64())
  33. suite.Equal("0.0.0.0:3128", conf.BindTo.String())
  34. }
  35. func (suite *ConfigTestSuite) TestParsePublicIP() {
  36. conf, err := config.Parse(suite.ReadConfig("public_ip.toml"))
  37. suite.NoError(err)
  38. suite.Equal("203.0.113.1", conf.PublicIPv4.Get(nil).String())
  39. suite.Equal("2001:db8::1", conf.PublicIPv6.Get(nil).String())
  40. }
  41. func (suite *ConfigTestSuite) TestParsePublicIPv4Only() {
  42. conf, err := config.Parse(suite.ReadConfig("public_ip_v4_only.toml"))
  43. suite.NoError(err)
  44. suite.Equal("203.0.113.1", conf.PublicIPv4.Get(nil).String())
  45. suite.Nil(conf.PublicIPv6.Get(nil))
  46. }
  47. func (suite *ConfigTestSuite) TestParsePublicIPInvalid() {
  48. _, err := config.Parse(suite.ReadConfig("public_ip_invalid.toml"))
  49. suite.Error(err)
  50. }
  51. func (suite *ConfigTestSuite) TestParsePublicIPNotSet() {
  52. conf, err := config.Parse(suite.ReadConfig("minimal.toml"))
  53. suite.NoError(err)
  54. suite.Nil(conf.PublicIPv4.Get(nil))
  55. suite.Nil(conf.PublicIPv6.Get(nil))
  56. }
  57. func (suite *ConfigTestSuite) TestString() {
  58. conf, err := config.Parse(suite.ReadConfig("minimal.toml"))
  59. suite.NoError(err)
  60. suite.NotEmpty(conf.String())
  61. }
  62. func (suite *ConfigTestSuite) TestDomainFrontingIPIgnoredWhenHostSet() {
  63. conf, err := config.Parse(suite.ReadConfig("minimal.toml"))
  64. suite.NoError(err)
  65. suite.NoError(conf.DomainFronting.Host.Set("fronting-backend"))
  66. suite.NoError(conf.DomainFronting.IP.Set("10.0.0.10"))
  67. suite.NoError(conf.Validate())
  68. suite.Equal("fronting-backend", conf.GetDomainFrontingHost())
  69. }
  70. func (suite *ConfigTestSuite) TestDomainFrontingHostFromTOML() {
  71. conf, err := config.Parse(suite.ReadConfig("domain_fronting_host.toml"))
  72. suite.NoError(err)
  73. suite.NoError(conf.Validate())
  74. suite.Equal("fronting-backend", conf.GetDomainFrontingHost())
  75. }
  76. func (suite *ConfigTestSuite) TestDomainFrontingHostAcceptsLiteralIP() {
  77. conf, err := config.Parse(suite.ReadConfig("domain_fronting_host_ip.toml"))
  78. suite.NoError(err)
  79. suite.NoError(conf.Validate())
  80. suite.Equal("10.0.0.1", conf.GetDomainFrontingHost())
  81. }
  82. func (suite *ConfigTestSuite) TestDomainFrontingIPIgnoredFromTOML() {
  83. conf, err := config.Parse(suite.ReadConfig("domain_fronting_ip.toml"))
  84. suite.NoError(err)
  85. suite.NoError(conf.Validate())
  86. // Deprecated [domain-fronting].ip is parsed but never used to derive
  87. // the dial target — the user must migrate to [domain-fronting].host.
  88. suite.NotNil(conf.DomainFronting.IP.Get(nil))
  89. suite.Equal("", conf.GetDomainFrontingHost())
  90. }
  91. func (suite *ConfigTestSuite) TestDomainFrontingNotSet() {
  92. conf, err := config.Parse(suite.ReadConfig("minimal.toml"))
  93. suite.NoError(err)
  94. suite.NoError(conf.Validate())
  95. suite.Equal("", conf.GetDomainFrontingHost())
  96. }
  97. func TestConfig(t *testing.T) {
  98. t.Parallel()
  99. suite.Run(t, &ConfigTestSuite{})
  100. }