package listenbuffer

import (
	"io/ioutil"
	"net"
	"testing"
)

func TestListenBufferAllowsAcceptingWhenActivated(t *testing.T) {
	lock := make(chan struct{})
	buffer, err := NewListenBuffer("tcp", "", lock)
	if err != nil {
		t.Fatal("Unable to create listen buffer: ", err)
	}

	go func() {
		conn, err := net.Dial("tcp", buffer.Addr().String())
		if err != nil {
			t.Fatal("Client failed to establish connection to server: ", err)
		}

		conn.Write([]byte("ping"))
		conn.Close()
	}()

	close(lock)

	client, err := buffer.Accept()
	if err != nil {
		t.Fatal("Failed to accept client: ", err)
	}

	response, err := ioutil.ReadAll(client)
	if err != nil {
		t.Fatal("Failed to read from client: ", err)
	}

	if string(response) != "ping" {
		t.Fatal("Expected to receive ping from client, received: ", string(response))
	}
}