aboutsummaryrefslogtreecommitdiff
path: root/jsonrpc/client/message_dispatcher_test.go
diff options
context:
space:
mode:
authorhozan23 <hozan23@karyontech.net>2024-06-13 06:02:24 +0200
committerhozan23 <hozan23@karyontech.net>2024-06-13 06:02:24 +0200
commit8c2d37e093ca64d591fc0aec15a7e2ed424b2e47 (patch)
treefd9bc62e29087a18e7eb4bdd0a1f587ba63e5dd5 /jsonrpc/client/message_dispatcher_test.go
parenta338905a7f8a2206161cc15f07bda872b9bfc09c (diff)
use message dispatcher to process responses and notifications & spread out comments
Diffstat (limited to 'jsonrpc/client/message_dispatcher_test.go')
-rw-r--r--jsonrpc/client/message_dispatcher_test.go101
1 files changed, 101 insertions, 0 deletions
diff --git a/jsonrpc/client/message_dispatcher_test.go b/jsonrpc/client/message_dispatcher_test.go
new file mode 100644
index 0000000..7cc1366
--- /dev/null
+++ b/jsonrpc/client/message_dispatcher_test.go
@@ -0,0 +1,101 @@
+package client
+
+import (
+ // "sync"
+ // "sync/atomic"
+
+ "sync"
+ "sync/atomic"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestDispatchToChannel(t *testing.T) {
+
+ messageDispatcher := newMessageDispatcher[int, int](10)
+
+ chanKey := 1
+ rx := messageDispatcher.register(chanKey)
+
+ chanKey2 := 2
+ rx2 := messageDispatcher.register(chanKey2)
+
+ var wg sync.WaitGroup
+
+ wg.Add(1)
+ go func() {
+ for i := 0; i < 50; i++ {
+ err := messageDispatcher.disptach(chanKey, i)
+ assert.Nil(t, err)
+ }
+
+ messageDispatcher.unregister(chanKey)
+ wg.Done()
+ }()
+
+ wg.Add(1)
+ go func() {
+ for i := 0; i < 50; i++ {
+ err := messageDispatcher.disptach(chanKey2, i)
+ assert.Nil(t, err)
+ }
+
+ messageDispatcher.unregister(chanKey2)
+ wg.Done()
+ }()
+
+ var receivedItem atomic.Int32
+
+ wg.Add(1)
+ go func() {
+ for range rx {
+ receivedItem.Add(1)
+ }
+ wg.Done()
+ }()
+
+ wg.Add(1)
+ go func() {
+ for range rx2 {
+ receivedItem.Add(1)
+ }
+ wg.Done()
+ }()
+
+ wg.Wait()
+ assert.Equal(t, receivedItem.Load(), int32(100))
+}
+
+func TestUnregisterChannel(t *testing.T) {
+ messageDispatcher := newMessageDispatcher[int, int](1)
+
+ chanKey := 1
+ rx := messageDispatcher.register(chanKey)
+
+ messageDispatcher.unregister(chanKey)
+ assert.Equal(t, messageDispatcher.length(), 0, "channels should be empty")
+
+ _, ok := <-rx
+ assert.False(t, ok, "chan closed")
+
+ err := messageDispatcher.disptach(chanKey, 1)
+ assert.NotNil(t, err)
+}
+
+func TestClearChannels(t *testing.T) {
+
+ messageDispatcher := newMessageDispatcher[int, int](1)
+
+ chanKey := 1
+ rx := messageDispatcher.register(chanKey)
+
+ messageDispatcher.clear()
+ assert.Equal(t, messageDispatcher.length(), 0, "channels should be empty")
+
+ _, ok := <-rx
+ assert.False(t, ok, "chan closed")
+
+ err := messageDispatcher.disptach(chanKey, 1)
+ assert.NotNil(t, err)
+}