mirror of
https://github.com/paralus/paralus.git
synced 2026-05-09 01:46:57 +00:00
* 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>
115 lines
1.9 KiB
Go
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)
|
|
|
|
}
|