"bufio"
"fmt"
"io"
- "log"
"net"
"os"
+ "path/filepath"
"runtime"
"sync"
"testing"
}
}
-func startServer(n, la string, done chan<- string) (addr string, sock io.Closer, wg *sync.WaitGroup) {
+func startServer(t *testing.T, n, la string, done chan<- string) (addr string, sock io.Closer, wg *sync.WaitGroup) {
if n == "udp" || n == "tcp" {
la = "127.0.0.1:0"
} else {
- // unix and unixgram: choose an address if none given
+ // unix and unixgram: choose an address if none given.
if la == "" {
- // use os.CreateTemp to get a name that is unique
- f, err := os.CreateTemp("", "syslogtest")
+ // The address must be short to fit in the sun_path field of the
+ // sockaddr_un passed to the underlying system calls, so we use
+ // os.MkdirTemp instead of t.TempDir: t.TempDir generally includes all or
+ // part of the test name in the directory, which can be much more verbose
+ // and risks running up against the limit.
+ dir, err := os.MkdirTemp("", "")
if err != nil {
- log.Fatal("TempFile: ", err)
+ t.Fatal(err)
}
- f.Close()
- la = f.Name()
+ t.Cleanup(func() {
+ if err := os.RemoveAll(dir); err != nil {
+ t.Errorf("failed to remove socket temp directory: %v", err)
+ }
+ })
+ la = filepath.Join(dir, "sock")
}
- os.Remove(la)
}
wg = new(sync.WaitGroup)
if n == "udp" || n == "unixgram" {
l, e := net.ListenPacket(n, la)
if e != nil {
- log.Fatalf("startServer failed: %v", e)
+ t.Helper()
+ t.Fatalf("startServer failed: %v", e)
}
addr = l.LocalAddr().String()
sock = l
} else {
l, e := net.Listen(n, la)
if e != nil {
- log.Fatalf("startServer failed: %v", e)
+ t.Helper()
+ t.Fatalf("startServer failed: %v", e)
}
addr = l.Addr().String()
sock = l
func TestWithSimulated(t *testing.T) {
t.Parallel()
+
msg := "Test 123"
- var transport []string
- for _, n := range []string{"unix", "unixgram", "udp", "tcp"} {
- if testableNetwork(n) {
- transport = append(transport, n)
+ for _, tr := range []string{"unix", "unixgram", "udp", "tcp"} {
+ if !testableNetwork(tr) {
+ continue
}
- }
- for _, tr := range transport {
- done := make(chan string)
- addr, sock, srvWG := startServer(tr, "", done)
- defer srvWG.Wait()
- defer sock.Close()
- if tr == "unix" || tr == "unixgram" {
- defer os.Remove(addr)
- }
- s, err := Dial(tr, addr, LOG_INFO|LOG_USER, "syslog_test")
- if err != nil {
- t.Fatalf("Dial() failed: %v", err)
- }
- err = s.Info(msg)
- if err != nil {
- t.Fatalf("log failed: %v", err)
- }
- check(t, msg, <-done, tr)
- s.Close()
+ tr := tr
+ t.Run(tr, func(t *testing.T) {
+ t.Parallel()
+
+ done := make(chan string)
+ addr, sock, srvWG := startServer(t, tr, "", done)
+ defer srvWG.Wait()
+ defer sock.Close()
+ if tr == "unix" || tr == "unixgram" {
+ defer os.Remove(addr)
+ }
+ s, err := Dial(tr, addr, LOG_INFO|LOG_USER, "syslog_test")
+ if err != nil {
+ t.Fatalf("Dial() failed: %v", err)
+ }
+ err = s.Info(msg)
+ if err != nil {
+ t.Fatalf("log failed: %v", err)
+ }
+ check(t, msg, <-done, tr)
+ s.Close()
+ })
}
}
}
done := make(chan string)
- addr, sock, srvWG := startServer(net, "", done)
+ addr, sock, srvWG := startServer(t, net, "", done)
defer srvWG.Wait()
defer os.Remove(addr)
defer sock.Close()
check(t, msg, <-done, net)
// restart the server
- _, sock2, srvWG2 := startServer(net, addr, done)
+ if err := os.Remove(addr); err != nil {
+ t.Fatal(err)
+ }
+ _, sock2, srvWG2 := startServer(t, net, addr, done)
defer srvWG2.Wait()
defer sock2.Close()
func TestWrite(t *testing.T) {
t.Parallel()
+
tests := []struct {
pri Priority
pre string
} else {
for _, test := range tests {
done := make(chan string)
- addr, sock, srvWG := startServer("udp", "", done)
+ addr, sock, srvWG := startServer(t, "udp", "", done)
defer srvWG.Wait()
defer sock.Close()
l, err := Dial("udp", addr, test.pri, test.pre)
}
func TestConcurrentWrite(t *testing.T) {
- addr, sock, srvWG := startServer("udp", "", make(chan string, 1))
+ addr, sock, srvWG := startServer(t, "udp", "", make(chan string, 1))
defer srvWG.Wait()
defer sock.Close()
w, err := Dial("udp", addr, LOG_USER|LOG_ERR, "how's it going?")
}
}
done := make(chan string, N*M)
- addr, sock, srvWG := startServer(net, "", done)
+ addr, sock, srvWG := startServer(t, net, "", done)
if net == "unix" {
defer os.Remove(addr)
}