From e47f36b86441f064b1ed7cc23502f47fa3ae60da Mon Sep 17 00:00:00 2001 From: ROKUMATE Date: Sat, 25 Jul 2026 17:03:46 +0530 Subject: [PATCH] pkg/channel: add tests for the channel WriteCloser Fixes: #29281 Signed-off-by: ROKUMATE --- pkg/channel/writer_test.go | 82 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 pkg/channel/writer_test.go diff --git a/pkg/channel/writer_test.go b/pkg/channel/writer_test.go new file mode 100644 index 0000000000..5901aa0b30 --- /dev/null +++ b/pkg/channel/writer_test.go @@ -0,0 +1,82 @@ +package channel + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestNewWriterWriteQueuesMessage(t *testing.T) { + ch := make(chan []byte, 1) + w := NewWriter(ch) + + n, err := w.Write([]byte("hello")) + require.NoError(t, err) + assert.Equal(t, 5, n) + assert.Equal(t, []byte("hello"), <-ch) +} + +func TestWriterChanReturnsUnderlyingChannel(t *testing.T) { + ch := make(chan []byte, 1) + w := NewWriter(ch) + + _, err := w.Write([]byte("data")) + require.NoError(t, err) + assert.Equal(t, []byte("data"), <-w.Chan()) +} + +func TestWriterWriteCopiesInput(t *testing.T) { + ch := make(chan []byte, 1) + w := NewWriter(ch) + + input := []byte("abc") + _, err := w.Write(input) + require.NoError(t, err) + + // Mutating the caller's buffer after Write must not affect the queued message. + input[0] = 'x' + assert.Equal(t, []byte("abc"), <-ch) +} + +func TestWriterPreservesMessageOrder(t *testing.T) { + ch := make(chan []byte, 3) + w := NewWriter(ch) + + for _, msg := range []string{"one", "two", "three"} { + _, err := w.Write([]byte(msg)) + require.NoError(t, err) + } + assert.Equal(t, []byte("one"), <-ch) + assert.Equal(t, []byte("two"), <-ch) + assert.Equal(t, []byte("three"), <-ch) +} + +func TestWriterCloseClosesChannel(t *testing.T) { + ch := make(chan []byte, 1) + w := NewWriter(ch) + + require.NoError(t, w.Close()) + + _, ok := <-ch + assert.False(t, ok, "channel should be closed after Close") +} + +func TestWriterWriteAfterCloseFails(t *testing.T) { + ch := make(chan []byte, 1) + w := NewWriter(ch) + require.NoError(t, w.Close()) + + n, err := w.Write([]byte("data")) + assert.Equal(t, 0, n) + require.Error(t, err) + assert.Contains(t, err.Error(), "channel is closed for Write") +} + +func TestWriterWriteNilReceiverFails(t *testing.T) { + var w *writeCloser + n, err := w.Write([]byte("data")) + assert.Equal(t, 0, n) + require.Error(t, err) + assert.Contains(t, err.Error(), "channel.NewWriter()") +}