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 }