// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package net

import (
	"bytes"
	"io"
	"testing"
)

func checkPipeWrite(t *testing.T, w io.Writer, data []byte, c chan int) {
	n, err := w.Write(data)
	if err != nil {
		t.Error(err)
	}
	if n != len(data) {
		t.Errorf("short write: %d != %d", n, len(data))
	}
	c <- 0
}

func checkPipeRead(t *testing.T, r io.Reader, data []byte, wantErr error) {
	buf := make([]byte, len(data)+10)
	n, err := r.Read(buf)
	if err != wantErr {
		t.Error(err)
		return
	}
	if n != len(data) || !bytes.Equal(buf[0:n], data) {
		t.Errorf("bad read: got %q", buf[0:n])
		return
	}
}

// TestPipe tests a simple read/write/close sequence.
// Assumes that the underlying io.Pipe implementation
// is solid and we're just testing the net wrapping.
func TestPipe(t *testing.T) {
	c := make(chan int)
	cli, srv := Pipe()
	go checkPipeWrite(t, cli, []byte("hello, world"), c)
	checkPipeRead(t, srv, []byte("hello, world"), nil)
	<-c
	go checkPipeWrite(t, srv, []byte("line 2"), c)
	checkPipeRead(t, cli, []byte("line 2"), nil)
	<-c
	go checkPipeWrite(t, cli, []byte("a third line"), c)
	checkPipeRead(t, srv, []byte("a third line"), nil)
	<-c
	go srv.Close()
	checkPipeRead(t, cli, nil, io.EOF)
	cli.Close()
}
