github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/chooser/subnet_chooser_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package chooser_test
     5  
     6  import (
     7  	"context"
     8  	"net"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/qiniu/go-sdk/v7/storagev2/chooser"
    13  )
    14  
    15  func TestSubnetChooser(t *testing.T) {
    16  	ipc := chooser.NewSubnetChooser(&chooser.SubnetChooserConfig{
    17  		FreezeDuration: 2 * time.Second,
    18  	})
    19  
    20  	ips := ipc.Choose(context.Background(), nil, &chooser.ChooseOptions{
    21  		Domain: "www.qiniu.com",
    22  	})
    23  	assertIPs(t, ips, []net.IP{})
    24  
    25  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.ChooseOptions{
    26  		Domain: "www.qiniu.com",
    27  	})
    28  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5)})
    29  
    30  	ipc.FeedbackBad(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.FeedbackOptions{
    31  		Domain: "www.qiniu.com",
    32  	})
    33  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.ChooseOptions{
    34  		Domain: "www.qiniu.com",
    35  	})
    36  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5)})
    37  
    38  	ipc.FeedbackGood(context.Background(), []net.IP{net.IPv4(5, 6, 7, 8)}, &chooser.FeedbackOptions{
    39  		Domain: "www.qiniu.com",
    40  	})
    41  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.ChooseOptions{
    42  		Domain: "www.qiniu.com",
    43  	})
    44  	assertIPs(t, ips, []net.IP{net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)})
    45  
    46  	time.Sleep(2 * time.Second)
    47  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.ChooseOptions{
    48  		Domain: "www.qiniu.com",
    49  	})
    50  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5)})
    51  
    52  	ipc.FeedbackBad(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.FeedbackOptions{
    53  		Domain: "www.qiniu.com",
    54  	})
    55  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.ChooseOptions{
    56  		Domain: "www.qiniu.com",
    57  	})
    58  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5)})
    59  
    60  	ipc.FeedbackGood(context.Background(), []net.IP{net.IPv4(5, 6, 7, 8)}, &chooser.FeedbackOptions{
    61  		Domain: "www.qiniu.com",
    62  	})
    63  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.ChooseOptions{
    64  		Domain: "www.qiniu.com",
    65  	})
    66  	assertIPs(t, ips, []net.IP{net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)})
    67  
    68  	time.Sleep(2 * time.Second)
    69  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5), net.IPv4(5, 6, 7, 8), net.IPv4(5, 6, 7, 9)}, &chooser.ChooseOptions{
    70  		Domain: "www.qiniu.com",
    71  	})
    72  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(1, 2, 3, 5)})
    73  }