github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/golang.org/x/net/proxy/per_host_test.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package proxy
     6  
     7  import (
     8  	"errors"
     9  	"net"
    10  	"reflect"
    11  	"testing"
    12  )
    13  
    14  type recordingProxy struct {
    15  	addrs []string
    16  }
    17  
    18  func (r *recordingProxy) Dial(network, addr string) (net.Conn, error) {
    19  	r.addrs = append(r.addrs, addr)
    20  	return nil, errors.New("recordingProxy")
    21  }
    22  
    23  func TestPerHost(t *testing.T) {
    24  	var def, bypass recordingProxy
    25  	perHost := NewPerHost(&def, &bypass)
    26  	perHost.AddFromString("localhost,*.zone,127.0.0.1,10.0.0.1/8,1000::/16")
    27  
    28  	expectedDef := []string{
    29  		"example.com:123",
    30  		"1.2.3.4:123",
    31  		"[1001::]:123",
    32  	}
    33  	expectedBypass := []string{
    34  		"localhost:123",
    35  		"zone:123",
    36  		"foo.zone:123",
    37  		"127.0.0.1:123",
    38  		"10.1.2.3:123",
    39  		"[1000::]:123",
    40  	}
    41  
    42  	for _, addr := range expectedDef {
    43  		perHost.Dial("tcp", addr)
    44  	}
    45  	for _, addr := range expectedBypass {
    46  		perHost.Dial("tcp", addr)
    47  	}
    48  
    49  	if !reflect.DeepEqual(expectedDef, def.addrs) {
    50  		t.Errorf("Hosts which went to the default proxy didn't match. Got %v, want %v", def.addrs, expectedDef)
    51  	}
    52  	if !reflect.DeepEqual(expectedBypass, bypass.addrs) {
    53  		t.Errorf("Hosts which went to the bypass proxy didn't match. Got %v, want %v", bypass.addrs, expectedBypass)
    54  	}
    55  }