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 }