handler_test.go 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package outbound_test
  2. import (
  3. "context"
  4. "testing"
  5. _ "unsafe"
  6. "github.com/v2fly/v2ray-core/v5/common/environment/systemnetworkimpl"
  7. "github.com/v2fly/v2ray-core/v5/common/environment"
  8. "github.com/v2fly/v2ray-core/v5/common/environment/envctx"
  9. "github.com/v2fly/v2ray-core/v5/common/environment/transientstorageimpl"
  10. "google.golang.org/protobuf/types/known/anypb"
  11. core "github.com/v2fly/v2ray-core/v5"
  12. "github.com/v2fly/v2ray-core/v5/app/policy"
  13. . "github.com/v2fly/v2ray-core/v5/app/proxyman/outbound"
  14. "github.com/v2fly/v2ray-core/v5/app/stats"
  15. "github.com/v2fly/v2ray-core/v5/common/net"
  16. "github.com/v2fly/v2ray-core/v5/common/serial"
  17. "github.com/v2fly/v2ray-core/v5/features/outbound"
  18. "github.com/v2fly/v2ray-core/v5/proxy/freedom"
  19. "github.com/v2fly/v2ray-core/v5/transport/internet"
  20. )
  21. func TestInterfaces(t *testing.T) {
  22. _ = (outbound.Handler)(new(Handler))
  23. _ = (outbound.Manager)(new(Manager))
  24. }
  25. //go:linkname toContext github.com/v2fly/v2ray-core/v5.toContext
  26. func toContext(ctx context.Context, v *core.Instance) context.Context
  27. func TestOutboundWithoutStatCounter(t *testing.T) {
  28. config := &core.Config{
  29. App: []*anypb.Any{
  30. serial.ToTypedMessage(&stats.Config{}),
  31. serial.ToTypedMessage(&policy.Config{
  32. System: &policy.SystemPolicy{
  33. Stats: &policy.SystemPolicy_Stats{
  34. InboundUplink: true,
  35. },
  36. },
  37. }),
  38. },
  39. }
  40. v, _ := core.New(config)
  41. v.AddFeature((outbound.Manager)(new(Manager)))
  42. ctx := toContext(context.Background(), v)
  43. defaultNetworkImpl := systemnetworkimpl.NewSystemNetworkDefault()
  44. rootEnv := environment.NewRootEnvImpl(ctx, transientstorageimpl.NewScopedTransientStorageImpl(), defaultNetworkImpl.Dialer(), defaultNetworkImpl.Listener())
  45. proxyEnvironment := rootEnv.ProxyEnvironment("o")
  46. ctx = envctx.ContextWithEnvironment(ctx, proxyEnvironment)
  47. h, _ := NewHandler(ctx, &core.OutboundHandlerConfig{
  48. Tag: "tag",
  49. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  50. })
  51. conn, _ := h.(*Handler).Dial(ctx, net.TCPDestination(net.DomainAddress("localhost"), 13146))
  52. _, ok := conn.(*internet.StatCouterConnection)
  53. if ok {
  54. t.Errorf("Expected conn to not be StatCouterConnection")
  55. }
  56. }
  57. func TestOutboundWithStatCounter(t *testing.T) {
  58. config := &core.Config{
  59. App: []*anypb.Any{
  60. serial.ToTypedMessage(&stats.Config{}),
  61. serial.ToTypedMessage(&policy.Config{
  62. System: &policy.SystemPolicy{
  63. Stats: &policy.SystemPolicy_Stats{
  64. OutboundUplink: true,
  65. OutboundDownlink: true,
  66. },
  67. },
  68. }),
  69. },
  70. }
  71. v, _ := core.New(config)
  72. v.AddFeature((outbound.Manager)(new(Manager)))
  73. ctx := toContext(context.Background(), v)
  74. defaultNetworkImpl := systemnetworkimpl.NewSystemNetworkDefault()
  75. rootEnv := environment.NewRootEnvImpl(ctx, transientstorageimpl.NewScopedTransientStorageImpl(), defaultNetworkImpl.Dialer(), defaultNetworkImpl.Listener())
  76. proxyEnvironment := rootEnv.ProxyEnvironment("o")
  77. ctx = envctx.ContextWithEnvironment(ctx, proxyEnvironment)
  78. h, _ := NewHandler(ctx, &core.OutboundHandlerConfig{
  79. Tag: "tag",
  80. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  81. })
  82. conn, _ := h.(*Handler).Dial(ctx, net.TCPDestination(net.DomainAddress("localhost"), 13146))
  83. _, ok := conn.(*internet.StatCouterConnection)
  84. if !ok {
  85. t.Errorf("Expected conn to be StatCouterConnection")
  86. }
  87. }