12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package trace
- import (
- "bytes"
- "io"
- "log"
- "net"
- "os"
- "testing"
- "github.com/stretchr/testify/assert"
- )
- func newServer(w io.Writer, network, address string) (func() error, error) {
- lis, err := net.Listen(network, address)
- if err != nil {
- return nil, err
- }
- done := make(chan struct{})
- go func() {
- conn, err := lis.Accept()
- if err != nil {
- lis.Close()
- log.Fatal(err)
- }
- io.Copy(w, conn)
- conn.Close()
- done <- struct{}{}
- }()
- return func() error {
- <-done
- return lis.Close()
- }, nil
- }
- func TestReportTCP(t *testing.T) {
- buf := &bytes.Buffer{}
- cancel, err := newServer(buf, "tcp", "127.0.0.1:6077")
- if err != nil {
- t.Fatal(err)
- }
- report := newReport("tcp", "127.0.0.1:6077", 0, 0).(*connReport)
- data := []byte("hello, world")
- report.writePackage(data)
- if err := report.Close(); err != nil {
- t.Error(err)
- }
- cancel()
- assert.Equal(t, data, buf.Bytes(), "receive data")
- }
- func newUnixgramServer(w io.Writer, address string) (func() error, error) {
- conn, err := net.ListenPacket("unixgram", address)
- if err != nil {
- return nil, err
- }
- done := make(chan struct{})
- go func() {
- p := make([]byte, 4096)
- n, _, err := conn.ReadFrom(p)
- if err != nil {
- log.Fatal(err)
- }
- w.Write(p[:n])
- done <- struct{}{}
- }()
- return func() error {
- <-done
- return conn.Close()
- }, nil
- }
- func TestReportUnixgram(t *testing.T) {
- os.Remove("/tmp/trace.sock")
- buf := &bytes.Buffer{}
- cancel, err := newUnixgramServer(buf, "/tmp/trace.sock")
- if err != nil {
- t.Fatal(err)
- }
- report := newReport("unixgram", "/tmp/trace.sock", 0, 0).(*connReport)
- data := []byte("hello, world")
- report.writePackage(data)
- if err := report.Close(); err != nil {
- t.Error(err)
- }
- cancel()
- assert.Equal(t, data, buf.Bytes(), "receive data")
- }
|