github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/iprocbusmem/impl_test.go (about) 1 /* 2 * Copyright (c) 2021-present unTill Pro, Ltd. 3 */ 4 5 package iprocbusmem 6 7 import ( 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestBasicUsage(t *testing.T) { 14 require := require.New(t) 15 pb := Provide([]ChannelGroup{ 16 { 17 NumChannels: 10, 18 ChannelBufferSize: 1, 19 }, 20 { 21 NumChannels: 1, 22 ChannelBufferSize: 0, 23 }, 24 }) 25 26 // chan buffer 1 -> no reader required 27 require.True(pb.Submit(0, 3, 42)) 28 mes := <-pb.ServiceChannel(0, 3) 29 require.Equal(42, mes) 30 31 // no reader -> false 32 require.False(pb.Submit(1, 0, 43)) 33 34 done := make(chan interface{}) 35 // start reader 36 go func() { 37 mes := <-pb.ServiceChannel(1, 0) 38 require.Equal(44, mes) 39 done <- nil 40 }() 41 // submit until somebody read 42 for !pb.Submit(1, 0, 44) { 43 } 44 <-done 45 } 46 47 func TestErrors(t *testing.T) { 48 require := require.New(t) 49 pb := Provide([]ChannelGroup{ 50 { 51 NumChannels: 10, 52 ChannelBufferSize: 1, 53 }, 54 { 55 NumChannels: 1, 56 ChannelBufferSize: 0, 57 }, 58 }) 59 60 require.Panics(func() { pb.ServiceChannel(2, 2) }) // wrong groupIdx 61 require.Panics(func() { pb.ServiceChannel(1, 2) }) // wrong channelIdx 62 require.Panics(func() { pb.Submit(2, 2, nil) }) // wrong groupIdx 63 require.Panics(func() { pb.Submit(1, 2, nil) }) // wrong channelIdx 64 }