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

prometheus_test.go 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package stats_test
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net"
  6. "net/http"
  7. "testing"
  8. "time"
  9. "github.com/9seconds/mtg/v2/events"
  10. "github.com/9seconds/mtg/v2/mtglib"
  11. "github.com/9seconds/mtg/v2/stats"
  12. "github.com/stretchr/testify/suite"
  13. )
  14. type PrometheusTestSuite struct {
  15. suite.Suite
  16. httpListener net.Listener
  17. factory *stats.PrometheusFactory
  18. prometheus events.Observer
  19. }
  20. func (suite *PrometheusTestSuite) Get() (string, error) {
  21. addr := fmt.Sprintf("http://%s/", suite.httpListener.Addr().String())
  22. resp, err := http.Get(addr) // nolint: noctx
  23. if err != nil {
  24. return "", err // nolint: wrapcheck
  25. }
  26. defer resp.Body.Close()
  27. data, err := ioutil.ReadAll(resp.Body)
  28. if err != nil {
  29. return "", err // nolint: wrapcheck
  30. }
  31. return string(data), nil
  32. }
  33. func (suite *PrometheusTestSuite) SetupTest() {
  34. suite.httpListener, _ = net.Listen("tcp", "127.0.0.1:0")
  35. suite.factory = stats.NewPrometheus("mtg", "/")
  36. suite.prometheus = suite.factory.Make()
  37. go suite.factory.Serve(suite.httpListener) // nolint: errcheck
  38. }
  39. func (suite *PrometheusTestSuite) TearDownTest() {
  40. suite.prometheus.Shutdown()
  41. suite.NoError(suite.factory.Close())
  42. suite.httpListener.Close()
  43. }
  44. func (suite *PrometheusTestSuite) TestEventStartFinish() {
  45. suite.prometheus.EventStart(mtglib.EventStart{
  46. CreatedAt: time.Now(),
  47. ConnID: "connID",
  48. RemoteIP: net.ParseIP("10.0.0.10"),
  49. })
  50. time.Sleep(100 * time.Millisecond)
  51. data, err := suite.Get()
  52. suite.NoError(err)
  53. suite.Contains(data, `mtg_active_connections{ip_type="ipv4"} 1`)
  54. suite.prometheus.EventFinish(mtglib.EventFinish{
  55. CreatedAt: time.Now(),
  56. ConnID: "connID",
  57. })
  58. time.Sleep(100 * time.Millisecond)
  59. data, err = suite.Get()
  60. suite.NoError(err)
  61. suite.Contains(data, `mtg_active_connections{ip_type="ipv4"} 0`)
  62. }
  63. func (suite *PrometheusTestSuite) TestEventConcurrencyLimited() {
  64. suite.prometheus.EventConcurrencyLimited(mtglib.EventConcurrencyLimited{
  65. CreatedAt: time.Now(),
  66. })
  67. time.Sleep(100 * time.Millisecond)
  68. data, err := suite.Get()
  69. suite.NoError(err)
  70. suite.Contains(data, `mtg_concurrency_limited 1`)
  71. }
  72. func TestPrometheus(t *testing.T) {
  73. t.Parallel()
  74. suite.Run(t, &PrometheusTestSuite{})
  75. }