some more tests added.

This commit is contained in:
Erik Brakkee 2024-08-20 01:02:44 +02:00
parent 45595a34aa
commit b3f5eead9b

View File

@ -4,6 +4,7 @@ import (
"context"
"github.com/stretchr/testify/suite"
"log"
"strings"
"sync"
"testing"
"time"
@ -67,44 +68,60 @@ func (suite *ChannelReadWriterTestSuite) runAndWait(functions ...TestFunc) []any
func (suite *ChannelReadWriterTestSuite) Test_SuccessfulCommunication() {
tests := []struct {
name string
data string
data []string
chunkSizes []int
chunks []string
}{
{
name: "buffer_large_enough",
data: "hello",
data: []string{"hello"},
chunkSizes: []int{10},
chunks: []string{"hello"},
},
{
name: "two_reads_required",
data: "hello",
data: []string{"hello"},
chunkSizes: []int{3, 10},
chunks: []string{"hel", "lo"},
},
{
name: "many_reads_required",
data: "hello",
data: []string{"hello"},
chunkSizes: []int{1, 1, 1, 1, 1},
chunks: []string{"h", "e", "l", "l", "o"},
},
{
name: "buffer_large_enough_multiple_writes",
data: []string{"hel", "lo"},
chunkSizes: []int{3, 2},
chunks: []string{"hel", "lo"},
},
{ // NOTE: no intelligence in the reader to fill up the read buffer when it is not full
// therefore, the second read will have only 1 char since the first channel read returned
// 3 of which 2 where returned in the first read call to the ChannelReadWriter.
name: "buffer_too_small_multiple_writes",
data: []string{"hel", "lo"},
chunkSizes: []int{2, 2, 2},
chunks: []string{"he", "l", "lo"},
},
}
for _, test := range tests {
suite.Run(test.name, func() {
suite.runAndWait(
func() any {
select {
case <-suite.ctx.Done():
suite.FailNow("deadline reached")
log.Println("Write deadline exceeded")
case suite.toChannel <- []byte(test.data):
for _, d := range test.data {
select {
case <-suite.ctx.Done():
suite.FailNow("deadline reached")
log.Println("Write deadline exceeded")
case suite.toChannel <- []byte(d):
}
}
return nil
},
func() any {
remainder := test.data
remainder := strings.Join(test.data, "")
for i, chunkSize := range test.chunkSizes {
buf := make([]byte, chunkSize)
n, err := suite.conn.Read(buf)