github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/chooser/ip_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 TestIPChooser(t *testing.T) {
    16  	ipc := chooser.NewIPChooser(&chooser.IPChooserConfig{
    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(5, 6, 7, 8)}, &chooser.ChooseOptions{
    26  		Domain: "www.qiniu.com",
    27  	})
    28  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)})
    29  
    30  	ipc.FeedbackBad(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)}, &chooser.FeedbackOptions{
    31  		Domain: "www.qiniu.com",
    32  	})
    33  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)}, &chooser.ChooseOptions{
    34  		Domain: "www.qiniu.com",
    35  	})
    36  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)})
    37  	ipc.FeedbackGood(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4)}, &chooser.FeedbackOptions{
    38  		Domain: "www.qiniu.com",
    39  	})
    40  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)}, &chooser.ChooseOptions{
    41  		Domain: "www.qiniu.com",
    42  	})
    43  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4)})
    44  
    45  	time.Sleep(2 * time.Second)
    46  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)}, &chooser.ChooseOptions{
    47  		Domain: "www.qiniu.com",
    48  	})
    49  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)})
    50  
    51  	ipc.FeedbackBad(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4)}, &chooser.FeedbackOptions{
    52  		Domain: "www.qiniu.com",
    53  	})
    54  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)}, &chooser.ChooseOptions{
    55  		Domain: "www.qiniu.com",
    56  	})
    57  	assertIPs(t, ips, []net.IP{net.IPv4(5, 6, 7, 8)})
    58  
    59  	ipc.FeedbackGood(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4)}, &chooser.FeedbackOptions{
    60  		Domain: "www.qiniu.com",
    61  	})
    62  	ips = ipc.Choose(context.Background(), []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)}, &chooser.ChooseOptions{
    63  		Domain: "www.qiniu.com",
    64  	})
    65  	assertIPs(t, ips, []net.IP{net.IPv4(1, 2, 3, 4), net.IPv4(5, 6, 7, 8)})
    66  }