conn_monitor_test.go 740 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package route_test
  2. import (
  3. "context"
  4. "sync"
  5. "testing"
  6. "time"
  7. "github.com/sagernet/sing-box/route"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func TestMonitor(t *testing.T) {
  11. t.Parallel()
  12. var closer myCloser
  13. closer.Add(1)
  14. monitor := route.NewConnectionMonitor()
  15. require.NoError(t, monitor.Start())
  16. ctx, cancel := context.WithTimeout(context.Background(), time.Second)
  17. monitor.Add(ctx, &closer)
  18. done := make(chan struct{})
  19. go func() {
  20. closer.Wait()
  21. close(done)
  22. }()
  23. select {
  24. case <-done:
  25. case <-time.After(time.Second + 100*time.Millisecond):
  26. t.Fatal("timeout")
  27. }
  28. cancel()
  29. require.NoError(t, monitor.Close())
  30. }
  31. type myCloser struct {
  32. sync.WaitGroup
  33. }
  34. func (c *myCloser) Close() error {
  35. c.Done()
  36. return nil
  37. }