Files
paralus/pkg/leaderelection/election_test.go
nirav-rafay c66bdc25cd restructure rcloud-base as a single base controller (#37)
* restructure rcloud-base as a single base controller
* updated master.rest
* moved sentry from internal to pkg as it is used by relay
* removing unused rpc and it's dependencies
* Fix usermgmt tests
* Don't redefine variables in rest file
Co-authored-by: Abin Simon <abin.simon@rafay.co>
2022-03-03 17:59:06 +05:30

115 lines
1.9 KiB
Go

package leaderelection
import (
"fmt"
"testing"
"time"
)
func TestLeaderElectionRun(t *testing.T) {
lock1, err := NewLock("test-lock", "default", "client-1")
if err != nil {
t.Error(err)
return
}
lock2, err := NewLock("test-lock", "default", "client-2")
if err != nil {
t.Error(err)
return
}
stop1 := make(chan struct{})
stop2 := make(chan struct{})
go func() {
Run(lock1, func(stop <-chan struct{}) {
fmt.Println(lock1.Identity(), " became leader")
loop:
for {
select {
case <-stop:
fmt.Println("stopping ", lock1.Identity())
break loop
}
}
}, stop1)
}()
go func() {
Run(lock2, func(stop <-chan struct{}) {
fmt.Println(lock2.Identity(), " became leader")
loop:
for {
select {
case <-stop:
fmt.Println("stopping ", lock2.Identity())
break loop
}
}
}, stop2)
}()
go func() {
time.Sleep(time.Second * 20)
close(stop1)
}()
go func() {
time.Sleep(time.Second * 20)
close(stop2)
}()
<-stop1
<-stop2
time.Sleep(time.Second * 1)
}
func TestLeaderElectionConfigMapRun(t *testing.T) {
lock1, err := NewConfigMapLock("test-lock", "default", "client-1")
if err != nil {
t.Error(err)
return
}
lock2, err := NewConfigMapLock("test-lock", "default", "client-2")
if err != nil {
t.Error(err)
return
}
stop1 := make(chan struct{})
stop2 := make(chan struct{})
go func() {
Run(lock1, func(stop <-chan struct{}) {
fmt.Println(lock1.Identity(), " became leader")
loop:
for {
select {
case <-stop:
fmt.Println("stopping ", lock1.Identity())
break loop
}
}
}, stop1)
}()
go func() {
Run(lock2, func(stop <-chan struct{}) {
fmt.Println(lock2.Identity(), " became leader")
loop:
for {
select {
case <-stop:
fmt.Println("stopping ", lock2.Identity())
break loop
}
}
}, stop2)
}()
time.Sleep(time.Second * 20)
close(stop2)
time.Sleep(time.Second * 20)
close(stop1)
}