mirror of
https://github.com/lukaszraczylo/kportal.git
synced 2026-07-08 06:35:10 +00:00
Fix issue with tests failing due to test-related race conditions.
This commit is contained in:
@@ -154,12 +154,21 @@ func (s *WatchdogTestSuite) TestMultipleWorkers() {
|
|||||||
s.watchdog.RegisterWorker("worker-3", makeCallback("worker-3"))
|
s.watchdog.RegisterWorker("worker-3", makeCallback("worker-3"))
|
||||||
|
|
||||||
// worker-1: Keep sending heartbeats (healthy)
|
// worker-1: Keep sending heartbeats (healthy)
|
||||||
|
// Use a done channel to ensure goroutine exits before test ends
|
||||||
ticker1 := time.NewTicker(50 * time.Millisecond)
|
ticker1 := time.NewTicker(50 * time.Millisecond)
|
||||||
defer ticker1.Stop()
|
done := make(chan struct{})
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
defer ticker1.Stop()
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
<-ticker1.C
|
select {
|
||||||
s.watchdog.Heartbeat("worker-1")
|
case <-ticker1.C:
|
||||||
|
s.watchdog.Heartbeat("worker-1")
|
||||||
|
case <-done:
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@@ -172,6 +181,10 @@ func (s *WatchdogTestSuite) TestMultipleWorkers() {
|
|||||||
// Wait for hung workers to be detected
|
// Wait for hung workers to be detected
|
||||||
time.Sleep(600 * time.Millisecond)
|
time.Sleep(600 * time.Millisecond)
|
||||||
|
|
||||||
|
// Signal goroutine to stop and wait for it
|
||||||
|
close(done)
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
// Check results
|
// Check results
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
defer mu.Unlock()
|
defer mu.Unlock()
|
||||||
|
|||||||
@@ -155,7 +155,8 @@ func (p *Publisher) Stop() {
|
|||||||
// goroutines to exit cleanly. This works around a race condition in the
|
// goroutines to exit cleanly. This works around a race condition in the
|
||||||
// grandcat/zeroconf library where recv4() can access ipv4conn after shutdown()
|
// grandcat/zeroconf library where recv4() can access ipv4conn after shutdown()
|
||||||
// sets it to nil. See: https://github.com/grandcat/zeroconf/issues/95
|
// sets it to nil. See: https://github.com/grandcat/zeroconf/issues/95
|
||||||
const shutdownSettleTime = 50 * time.Millisecond
|
// Note: 100ms is needed for CI environments where timing can be more variable.
|
||||||
|
const shutdownSettleTime = 100 * time.Millisecond
|
||||||
|
|
||||||
// shutdownWithTimeout attempts to shutdown a zeroconf server with a timeout.
|
// shutdownWithTimeout attempts to shutdown a zeroconf server with a timeout.
|
||||||
// If shutdown hangs, it logs a warning and returns anyway.
|
// If shutdown hangs, it logs a warning and returns anyway.
|
||||||
|
|||||||
Reference in New Issue
Block a user