mirror of
https://github.com/lukaszraczylo/kportal.git
synced 2026-06-05 23:03:40 +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"))
|
||||
|
||||
// worker-1: Keep sending heartbeats (healthy)
|
||||
// Use a done channel to ensure goroutine exits before test ends
|
||||
ticker1 := time.NewTicker(50 * time.Millisecond)
|
||||
defer ticker1.Stop()
|
||||
done := make(chan struct{})
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
defer ticker1.Stop()
|
||||
for i := 0; i < 10; i++ {
|
||||
<-ticker1.C
|
||||
s.watchdog.Heartbeat("worker-1")
|
||||
select {
|
||||
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
|
||||
time.Sleep(600 * time.Millisecond)
|
||||
|
||||
// Signal goroutine to stop and wait for it
|
||||
close(done)
|
||||
wg.Wait()
|
||||
|
||||
// Check results
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
@@ -155,7 +155,8 @@ func (p *Publisher) Stop() {
|
||||
// goroutines to exit cleanly. This works around a race condition in the
|
||||
// grandcat/zeroconf library where recv4() can access ipv4conn after shutdown()
|
||||
// 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.
|
||||
// If shutdown hangs, it logs a warning and returns anyway.
|
||||
|
||||
Reference in New Issue
Block a user