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  }