From de6316d4e2b7487bf9ffe1109be302bca24fbc48 Mon Sep 17 00:00:00 2001 From: Anton Litvinov Date: Mon, 25 Mar 2024 16:32:21 +0400 Subject: [PATCH] Test simplifiedEventBus.bus for a data race Signed-off-by: Anton Litvinov --- eventbus/event_bus_test.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/eventbus/event_bus_test.go b/eventbus/event_bus_test.go index 7a789edd1b..337e4c59ba 100644 --- a/eventbus/event_bus_test.go +++ b/eventbus/event_bus_test.go @@ -18,7 +18,10 @@ package eventbus import ( + "sync" + "sync/atomic" "testing" + "time" "github.com/stretchr/testify/assert" ) @@ -69,3 +72,34 @@ func TestUnsubscribeMethod(t *testing.T) { assert.Equal(t, 1, h.val) assert.Equal(t, 7, h2.val) } + +func Test_simplifiedEventBus_Publish_DataRace(t *testing.T) { + eventBus := New() + + fn := func(data string) {} + + active := new(atomic.Bool) + active.Store(true) + + var wg sync.WaitGroup + wg.Add(2) + + go func() { + defer wg.Done() + + for i := 0; i < 100; i++ { + eventBus.SubscribeWithUID("topic", "1", fn) + eventBus.Publish("topic", "test data") + time.Sleep(time.Millisecond) + } + active.Store(false) + }() + go func() { + defer wg.Done() + for active.Load() == true { + eventBus.UnsubscribeWithUID("topic", "1", fn) + time.Sleep(time.Millisecond) + } + }() + wg.Wait() +}