Skip to content

Commit 26544a9

Browse files
committed
test(fvt): fix data race in async rule test
- Use mutex to protect 'final' variable update in TestMulShared/async_run - Fixes flaky test failure where assertion didn't match actual execution order Signed-off-by: Jiyong Huang <[email protected]>
1 parent ac11429 commit 26544a9

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

fvt/rulestate_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,21 +504,26 @@ func (s *RuleStateTestSuite) TestMulShared() {
504504
wg := sync.WaitGroup{}
505505
wg.Add(6)
506506
final := 0
507+
var mu sync.Mutex
507508
go func() {
508509
defer wg.Done()
509510
fmt.Println("start 1")
510511
resp, err := client.StartRule("mul1")
511512
s.Require().NoError(err)
512513
s.Require().Equal(http.StatusOK, resp.StatusCode)
514+
mu.Lock()
513515
final = 0
516+
mu.Unlock()
514517
}()
515518
go func() {
516519
defer wg.Done()
517520
fmt.Println("stop 1")
518521
resp, err := client.StopRule("mul1")
519522
s.Require().NoError(err)
520523
s.Require().Equal(http.StatusOK, resp.StatusCode)
524+
mu.Lock()
521525
final = 1
526+
mu.Unlock()
522527
}()
523528
go func() {
524529
defer wg.Done()
@@ -527,7 +532,9 @@ func (s *RuleStateTestSuite) TestMulShared() {
527532
s.Require().NoError(err)
528533
s.T().Log(GetResponseText(resp))
529534
s.Require().Equal(http.StatusOK, resp.StatusCode)
535+
mu.Lock()
530536
final = 2
537+
mu.Unlock()
531538
}()
532539
go func() {
533540
defer wg.Done()
@@ -536,23 +543,29 @@ func (s *RuleStateTestSuite) TestMulShared() {
536543
s.Require().NoError(err)
537544
s.T().Log(GetResponseText(resp))
538545
s.Require().Equal(http.StatusOK, resp.StatusCode)
546+
mu.Lock()
539547
final = 3
548+
mu.Unlock()
540549
}()
541550
go func() {
542551
defer wg.Done()
543552
fmt.Println("stop 2")
544553
resp, err := client.StopRule("mul1")
545554
s.Require().NoError(err)
546555
s.Require().Equal(http.StatusOK, resp.StatusCode)
556+
mu.Lock()
547557
final = 4
558+
mu.Unlock()
548559
}()
549560
go func() {
550561
defer wg.Done()
551562
fmt.Println("start 2")
552563
resp, err := client.StartRule("mul1")
553564
s.Require().NoError(err)
554565
s.Require().Equal(http.StatusOK, resp.StatusCode)
566+
mu.Lock()
555567
final = 5
568+
mu.Unlock()
556569
}()
557570
wg.Wait()
558571
metrics, err := client.GetRuleStatus("mul2")

0 commit comments

Comments
 (0)