Browse Source

Add unit test for outbound handler

yuhan6665 5 years ago
parent
commit
cef1836f5a
2 changed files with 70 additions and 2 deletions
  1. 67 0
      app/proxyman/outbound/handler_test.go
  2. 3 2
      context.go

+ 67 - 0
app/proxyman/outbound/handler_test.go

@@ -1,13 +1,80 @@
 package outbound_test
 
 import (
+	"context"
 	"testing"
 
+	"v2ray.com/core"
+	"v2ray.com/core/app/policy"
 	. "v2ray.com/core/app/proxyman/outbound"
+	"v2ray.com/core/app/stats"
+	"v2ray.com/core/common/net"
+	"v2ray.com/core/common/serial"
 	"v2ray.com/core/features/outbound"
+	"v2ray.com/core/proxy/freedom"
+	"v2ray.com/core/transport/internet"
 )
 
 func TestInterfaces(t *testing.T) {
 	_ = (outbound.Handler)(new(Handler))
 	_ = (outbound.Manager)(new(Manager))
 }
+
+const v2rayKey core.V2rayKey = 1
+
+func TestOutboundWithoutStatCounter(t *testing.T) {
+	config := &core.Config{
+		App: []*serial.TypedMessage{
+			serial.ToTypedMessage(&stats.Config{}),
+			serial.ToTypedMessage(&policy.Config{
+				System: &policy.SystemPolicy{
+					Stats: &policy.SystemPolicy_Stats{
+						InboundUplink: true,
+					},
+				},
+			}),
+		},
+	}
+
+	v, _ := core.New(config)
+	v.AddFeature((outbound.Manager)(new(Manager)))
+	ctx := context.WithValue(context.Background(), v2rayKey, v)
+	h, _ := NewHandler(ctx, &core.OutboundHandlerConfig{
+		Tag:           "tag",
+		ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
+	})
+	conn, _ := h.(*Handler).Dial(ctx, net.TCPDestination(net.DomainAddress("localhost"), 13146))
+	_, ok := conn.(*internet.StatCouterConnection)
+	if ok {
+		t.Errorf("Expected conn to not be StatCouterConnection")
+	}
+}
+
+func TestOutboundWithStatCounter(t *testing.T) {
+	config := &core.Config{
+		App: []*serial.TypedMessage{
+			serial.ToTypedMessage(&stats.Config{}),
+			serial.ToTypedMessage(&policy.Config{
+				System: &policy.SystemPolicy{
+					Stats: &policy.SystemPolicy_Stats{
+						OutboundUplink: true,
+						OutboundDownlink: true,
+					},
+				},
+			}),
+		},
+	}
+
+	v, _ := core.New(config)
+	v.AddFeature((outbound.Manager)(new(Manager)))
+	ctx := context.WithValue(context.Background(), v2rayKey, v)
+	h, _ := NewHandler(ctx, &core.OutboundHandlerConfig{
+		Tag:           "tag",
+		ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
+	})
+	conn, _ := h.(*Handler).Dial(ctx, net.TCPDestination(net.DomainAddress("localhost"), 13146))
+	_, ok := conn.(*internet.StatCouterConnection)
+	if !ok {
+		t.Errorf("Expected conn to be StatCouterConnection")
+	}
+}

+ 3 - 2
context.go

@@ -6,9 +6,10 @@ import (
 	"context"
 )
 
-type key int
+// V2rayKey is the key type of Instance in Context, exported for test.
+type V2rayKey int
 
-const v2rayKey key = 1
+const v2rayKey V2rayKey = 1
 
 // FromContext returns an Instance from the given context, or nil if the context doesn't contain one.
 func FromContext(ctx context.Context) *Instance {