Files
poseidon/pkg/nullio/nullio_test.go
2023-09-11 13:44:29 +02:00

61 lines
1.3 KiB
Go

package nullio
import (
"context"
"github.com/openHPI/poseidon/tests"
"github.com/stretchr/testify/suite"
"io"
"testing"
"time"
)
type MainTestSuite struct {
tests.MemoryLeakTestSuite
}
func TestMainTestSuite(t *testing.T) {
suite.Run(t, new(MainTestSuite))
}
func (s *MainTestSuite) TestReader_Read() {
read := func(reader io.Reader, ret chan<- bool) {
p := make([]byte, 0, 5)
_, err := reader.Read(p)
s.ErrorIs(io.EOF, err)
close(ret)
}
s.Run("WithContext_DoesNotReturnImmediately", func() {
readingContext, cancel := context.WithCancel(context.Background())
defer cancel()
readerReturned := make(chan bool)
go read(&Reader{readingContext}, readerReturned)
select {
case <-readerReturned:
s.Fail("The reader returned before the timeout was reached")
case <-time.After(tests.ShortTimeout):
}
})
s.Run("WithoutContext_DoesReturnImmediately", func() {
readerReturned := make(chan bool)
go read(&Reader{}, readerReturned)
select {
case <-readerReturned:
case <-time.After(tests.ShortTimeout):
s.Fail("The reader returned before the timeout was reached")
}
})
}
func (s *MainTestSuite) TestReadWriterWritesEverything() {
readWriter := &ReadWriter{}
p := []byte{1, 2, 3}
n, err := readWriter.Write(p)
s.NoError(err)
s.Equal(len(p), n)
}