package ray_test

import (
	"context"
	"io"
	"testing"

	"v2ray.com/core/common/buf"
	"v2ray.com/core/testing/assert"
	. "v2ray.com/core/transport/ray"
)

func TestStreamIO(t *testing.T) {
	assert := assert.On(t)

	stream := NewStream(context.Background())
	b1 := buf.New()
	b1.AppendBytes('a')
	assert.Error(stream.Write(buf.NewMultiBufferValue(b1))).IsNil()

	_, err := stream.Read()
	assert.Error(err).IsNil()

	stream.Close()
	_, err = stream.Read()
	assert.Error(err).Equals(io.EOF)

	b2 := buf.New()
	b2.AppendBytes('b')
	err = stream.Write(buf.NewMultiBufferValue(b2))
	assert.Error(err).Equals(io.ErrClosedPipe)
}

func TestStreamClose(t *testing.T) {
	assert := assert.On(t)

	stream := NewStream(context.Background())
	b1 := buf.New()
	b1.AppendBytes('a')
	assert.Error(stream.Write(buf.NewMultiBufferValue(b1))).IsNil()

	stream.Close()

	_, err := stream.Read()
	assert.Error(err).IsNil()

	_, err = stream.Read()
	assert.Error(err).Equals(io.EOF)
}
