From 276c2c0fa7b5828806a4145030f235dcf47a9953 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Tue, 20 Aug 2024 01:02:44 +0200 Subject: [PATCH] some more tests added. --- .../iowrappers/channelreadwriter_test.go | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/pkg/support/iowrappers/channelreadwriter_test.go b/pkg/support/iowrappers/channelreadwriter_test.go index c1efe7a..cc68f88 100644 --- a/pkg/support/iowrappers/channelreadwriter_test.go +++ b/pkg/support/iowrappers/channelreadwriter_test.go @@ -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)