@@ -123,7 +123,7 @@ func TestNetworkOperation(t *testing.T) {
123123 operation := newMockNetworkOperation ()
124124 vm := & vipManager {
125125 lg : lg ,
126- cfgGetter : newMockConfigGetter (& config. Config { HA : config. HA { VirtualIP : "10.10.10.10/24" , Interface : "eth0" }} ),
126+ cfgGetter : newMockConfigGetter (newMockConfig () ),
127127 operation : operation ,
128128 }
129129 vm .delOnRetire .Store (true )
@@ -149,11 +149,7 @@ func TestNetworkOperation(t *testing.T) {
149149
150150func TestStartAndClose (t * testing.T ) {
151151 lg , _ := logger .CreateLoggerForTest (t )
152- vm , err := NewVIPManager (lg , newMockConfigGetter (& config.Config {
153- Proxy : config.ProxyServer {Addr : "0.0.0.0:6000" },
154- API : config.API {Addr : "0.0.0.0:3080" },
155- HA : config.HA {VirtualIP : "127.0.0.2/24" , Interface : "lo" },
156- }))
152+ vm , err := NewVIPManager (lg , newMockConfigGetter (newMockConfig ()))
157153 if runtime .GOOS != "linux" {
158154 require .Error (t , err )
159155 } else {
@@ -178,3 +174,44 @@ func TestStartAndClose(t *testing.T) {
178174 vm .Close ()
179175 }
180176}
177+
178+ func TestMultiVIP (t * testing.T ) {
179+ if runtime .GOOS != "linux" {
180+ return
181+ }
182+ config1 , config2 := newMockConfig (), newMockConfig ()
183+ config1 .HA .VirtualIP = "127.0.0.2/24"
184+ config2 .HA .VirtualIP = "127.0.0.3/24"
185+ lg , text := logger .CreateLoggerForTest (t )
186+ vm1 , err := NewVIPManager (lg , newMockConfigGetter (config1 ))
187+ // Maybe interface doesn't exist or lack of permission.
188+ if err != nil {
189+ return
190+ }
191+ vm2 , err := NewVIPManager (lg , newMockConfigGetter (config2 ))
192+ require .NoError (t , err )
193+
194+ server , err := etcd .CreateEtcdServer ("0.0.0.0:0" , t .TempDir (), lg )
195+ require .NoError (t , err )
196+ endpoint := server .Clients [0 ].Addr ().String ()
197+ cfg := etcd .ConfigForEtcdTest (endpoint )
198+
199+ certMgr := cert .NewCertManager ()
200+ err = certMgr .Init (cfg , lg , nil )
201+ require .NoError (t , err )
202+ client , err := etcd .InitEtcdClient (lg , cfg , certMgr )
203+ require .NoError (t , err )
204+
205+ err = vm1 .Start (context .Background (), client )
206+ require .NoError (t , err )
207+ err = vm2 .Start (context .Background (), client )
208+ require .NoError (t , err )
209+ require .Eventually (t , func () bool {
210+ return strings .Count (text .String (), "adding VIP success" ) >= 2 ||
211+ strings .Count (text .String (), "ip: command not found" ) >= 2
212+ }, 3 * time .Second , 10 * time .Millisecond )
213+ vm1 .PreClose ()
214+ vm2 .PreClose ()
215+ vm1 .Close ()
216+ vm2 .Close ()
217+ }
0 commit comments