From c3d176029d5858e0f343cc91fbed8174f20d1c20 Mon Sep 17 00:00:00 2001 From: Eng Zer Jun Date: Tue, 19 Apr 2022 03:27:59 +0800 Subject: [PATCH] test: use `T.TempDir` to create temporary test directory (#10988) --- internal/rotate/file_writer_test.go | 41 +++++------- logger/logger_test.go | 5 +- plugins/inputs/ceph/ceph_test.go | 7 +-- plugins/inputs/conntrack/conntrack_test.go | 15 ++--- .../directory_monitor_test.go | 63 ++++++------------- .../linux_sysctl_fs/linux_sysctl_fs_test.go | 4 +- plugins/inputs/logparser/logparser_test.go | 10 ++- plugins/inputs/postfix/postfix_test.go | 4 +- plugins/inputs/procstat/procstat_test.go | 6 +- .../socket_listener/socket_listener_test.go | 24 +++---- plugins/inputs/suricata/suricata_test.go | 40 +++--------- plugins/inputs/syslog/nontransparent_test.go | 22 ++----- plugins/inputs/syslog/octetcounting_test.go | 22 ++----- plugins/inputs/syslog/rfc5426_test.go | 19 +++--- plugins/inputs/syslog/syslog_test.go | 5 +- plugins/outputs/file/file_test.go | 20 ++---- plugins/outputs/influxdb/http_test.go | 7 +-- .../socket_writer/socket_writer_test.go | 12 +--- plugins/outputs/sql/sql_test.go | 12 +--- plugins/outputs/sql/sqlite_test.go | 5 +- testutil/socket.go | 32 ++++++++++ 21 files changed, 136 insertions(+), 239 deletions(-) create mode 100644 testutil/socket.go diff --git a/internal/rotate/file_writer_test.go b/internal/rotate/file_writer_test.go index 564e33638..b24ece529 100644 --- a/internal/rotate/file_writer_test.go +++ b/internal/rotate/file_writer_test.go @@ -11,11 +11,10 @@ import ( ) func TestFileWriter_NoRotation(t *testing.T) { - tempDir, err := os.MkdirTemp("", "RotationNo") - require.NoError(t, err) + tempDir := t.TempDir() writer, err := NewFileWriter(filepath.Join(tempDir, "test"), 0, 0, 0) require.NoError(t, err) - defer func() { writer.Close(); os.RemoveAll(tempDir) }() + t.Cleanup(func() { require.NoError(t, writer.Close()) }) _, err = writer.Write([]byte("Hello World")) require.NoError(t, err) @@ -26,12 +25,11 @@ func TestFileWriter_NoRotation(t *testing.T) { } func TestFileWriter_TimeRotation(t *testing.T) { - tempDir, err := os.MkdirTemp("", "RotationTime") - require.NoError(t, err) + tempDir := t.TempDir() interval, _ := time.ParseDuration("10ms") writer, err := NewFileWriter(filepath.Join(tempDir, "test"), interval, 0, -1) require.NoError(t, err) - defer func() { writer.Close(); os.RemoveAll(tempDir) }() + t.Cleanup(func() { require.NoError(t, writer.Close()) }) _, err = writer.Write([]byte("Hello World")) require.NoError(t, err) @@ -43,28 +41,26 @@ func TestFileWriter_TimeRotation(t *testing.T) { } func TestFileWriter_ReopenTimeRotation(t *testing.T) { - tempDir, err := os.MkdirTemp("", "RotationTime") - require.NoError(t, err) + tempDir := t.TempDir() interval, _ := time.ParseDuration("10ms") filePath := filepath.Join(tempDir, "test.log") - err = os.WriteFile(filePath, []byte("Hello World"), 0644) + err := os.WriteFile(filePath, []byte("Hello World"), 0644) time.Sleep(interval) assert.NoError(t, err) writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), interval, 0, -1) require.NoError(t, err) - defer func() { writer.Close(); os.RemoveAll(tempDir) }() + t.Cleanup(func() { require.NoError(t, writer.Close()) }) files, _ := os.ReadDir(tempDir) assert.Equal(t, 2, len(files)) } func TestFileWriter_SizeRotation(t *testing.T) { - tempDir, err := os.MkdirTemp("", "RotationSize") - require.NoError(t, err) + tempDir := t.TempDir() maxSize := int64(9) writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, -1) require.NoError(t, err) - defer func() { writer.Close(); os.RemoveAll(tempDir) }() + t.Cleanup(func() { require.NoError(t, writer.Close()) }) _, err = writer.Write([]byte("Hello World")) require.NoError(t, err) @@ -75,15 +71,14 @@ func TestFileWriter_SizeRotation(t *testing.T) { } func TestFileWriter_ReopenSizeRotation(t *testing.T) { - tempDir, err := os.MkdirTemp("", "RotationSize") - require.NoError(t, err) + tempDir := t.TempDir() maxSize := int64(12) filePath := filepath.Join(tempDir, "test.log") - err = os.WriteFile(filePath, []byte("Hello World"), 0644) + err := os.WriteFile(filePath, []byte("Hello World"), 0644) assert.NoError(t, err) writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, -1) require.NoError(t, err) - defer func() { writer.Close(); os.RemoveAll(tempDir) }() + t.Cleanup(func() { require.NoError(t, writer.Close()) }) _, err = writer.Write([]byte("Hello World Again")) require.NoError(t, err) @@ -96,12 +91,11 @@ func TestFileWriter_DeleteArchives(t *testing.T) { t.Skip("Skipping long test in short mode") } - tempDir, err := os.MkdirTemp("", "RotationDeleteArchives") - require.NoError(t, err) + tempDir := t.TempDir() maxSize := int64(5) writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, 2) require.NoError(t, err) - defer func() { writer.Close(); os.RemoveAll(tempDir) }() + t.Cleanup(func() { require.NoError(t, writer.Close()) }) _, err = writer.Write([]byte("First file")) require.NoError(t, err) @@ -136,14 +130,11 @@ func TestFileWriter_DeleteArchives(t *testing.T) { } func TestFileWriter_CloseRotates(t *testing.T) { - tempDir, err := os.MkdirTemp("", "RotationClose") - require.NoError(t, err) - defer os.RemoveAll(tempDir) + tempDir := t.TempDir() maxSize := int64(9) writer, err := NewFileWriter(filepath.Join(tempDir, "test.log"), 0, maxSize, -1) require.NoError(t, err) - - writer.Close() + require.NoError(t, writer.Close()) files, _ := os.ReadDir(tempDir) assert.Equal(t, 1, len(files)) diff --git a/logger/logger_test.go b/logger/logger_test.go index 20622ad18..571a29c4b 100644 --- a/logger/logger_test.go +++ b/logger/logger_test.go @@ -96,8 +96,7 @@ func TestWriteToTruncatedFile(t *testing.T) { } func TestWriteToFileInRotation(t *testing.T) { - tempDir, err := os.MkdirTemp("", "LogRotation") - require.NoError(t, err) + tempDir := t.TempDir() cfg := createBasicLogConfig(filepath.Join(tempDir, "test.log")) cfg.LogTarget = LogTargetFile cfg.RotationMaxSize = config.Size(30) @@ -105,7 +104,7 @@ func TestWriteToFileInRotation(t *testing.T) { // Close the writer here, otherwise the temp folder cannot be deleted because the current log file is in use. closer, isCloser := writer.(io.Closer) assert.True(t, isCloser) - defer func() { closer.Close(); os.RemoveAll(tempDir) }() + t.Cleanup(func() { require.NoError(t, closer.Close()) }) log.Printf("I! TEST 1") // Writes 31 bytes, will rotate log.Printf("I! TEST") // Writes 29 byes, no rotation expected diff --git a/plugins/inputs/ceph/ceph_test.go b/plugins/inputs/ceph/ceph_test.go index 7915d6dd6..43381662b 100644 --- a/plugins/inputs/ceph/ceph_test.go +++ b/plugins/inputs/ceph/ceph_test.go @@ -112,12 +112,7 @@ func TestGather(t *testing.T) { } func TestFindSockets(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "socktest") - require.NoError(t, err) - defer func() { - err := os.Remove(tmpdir) - require.NoError(t, err) - }() + tmpdir := t.TempDir() c := &Ceph{ CephBinary: "foo", OsdPrefix: "ceph-osd", diff --git a/plugins/inputs/conntrack/conntrack_test.go b/plugins/inputs/conntrack/conntrack_test.go index cb33caec2..790489ccc 100644 --- a/plugins/inputs/conntrack/conntrack_test.go +++ b/plugins/inputs/conntrack/conntrack_test.go @@ -34,13 +34,11 @@ func TestNoFilesFound(t *testing.T) { func TestDefaultsUsed(t *testing.T) { defer restoreDflts(dfltFiles, dfltDirs) - tmpdir, err := os.MkdirTemp("", "tmp1") - require.NoError(t, err) - defer os.Remove(tmpdir) + tmpdir := t.TempDir() tmpFile, err := os.CreateTemp(tmpdir, "ip_conntrack_count") require.NoError(t, err) - defer os.Remove(tmpFile.Name()) + t.Cleanup(func() { require.NoError(t, tmpFile.Close()) }) dfltDirs = []string{tmpdir} fname := path.Base(tmpFile.Name()) @@ -58,16 +56,15 @@ func TestDefaultsUsed(t *testing.T) { func TestConfigsUsed(t *testing.T) { defer restoreDflts(dfltFiles, dfltDirs) - tmpdir, err := os.MkdirTemp("", "tmp1") - require.NoError(t, err) - defer os.Remove(tmpdir) + tmpdir := t.TempDir() cntFile, err := os.CreateTemp(tmpdir, "nf_conntrack_count") require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, cntFile.Close()) }) + maxFile, err := os.CreateTemp(tmpdir, "nf_conntrack_max") require.NoError(t, err) - defer os.Remove(cntFile.Name()) - defer os.Remove(maxFile.Name()) + t.Cleanup(func() { require.NoError(t, maxFile.Close()) }) dfltDirs = []string{tmpdir} cntFname := path.Base(cntFile.Name()) diff --git a/plugins/inputs/directory_monitor/directory_monitor_test.go b/plugins/inputs/directory_monitor/directory_monitor_test.go index 17cddc5f5..87eefc48a 100644 --- a/plugins/inputs/directory_monitor/directory_monitor_test.go +++ b/plugins/inputs/directory_monitor/directory_monitor_test.go @@ -3,11 +3,12 @@ package directory_monitor import ( "bytes" "compress/gzip" - "github.com/stretchr/testify/require" "os" "path/filepath" "testing" + "github.com/stretchr/testify/require" + "github.com/influxdata/telegraf/plugins/parsers" "github.com/influxdata/telegraf/plugins/parsers/csv" "github.com/influxdata/telegraf/testutil" @@ -19,12 +20,8 @@ func TestCSVGZImport(t *testing.T) { testCsvGzFile := "test.csv.gz" // Establish process directory and finished directory. - finishedDirectory, err := os.MkdirTemp("", "finished") - require.NoError(t, err) - processDirectory, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(processDirectory) - defer os.RemoveAll(finishedDirectory) + finishedDirectory := t.TempDir() + processDirectory := t.TempDir() // Init plugin. r := DirectoryMonitor{ @@ -33,7 +30,7 @@ func TestCSVGZImport(t *testing.T) { MaxBufferedMetrics: 1000, FileQueueSize: 100000, } - err = r.Init() + err := r.Init() require.NoError(t, err) r.SetParserFunc(func() (parsers.Parser, error) { @@ -87,12 +84,8 @@ func TestMultipleJSONFileImports(t *testing.T) { testJSONFile := "test.json" // Establish process directory and finished directory. - finishedDirectory, err := os.MkdirTemp("", "finished") - require.NoError(t, err) - processDirectory, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(processDirectory) - defer os.RemoveAll(finishedDirectory) + finishedDirectory := t.TempDir() + processDirectory := t.TempDir() // Init plugin. r := DirectoryMonitor{ @@ -101,7 +94,7 @@ func TestMultipleJSONFileImports(t *testing.T) { MaxBufferedMetrics: 1000, FileQueueSize: 1000, } - err = r.Init() + err := r.Init() require.NoError(t, err) parserConfig := parsers.Config{ @@ -139,12 +132,8 @@ func TestFileTag(t *testing.T) { testJSONFile := "test.json" // Establish process directory and finished directory. - finishedDirectory, err := os.MkdirTemp("", "finished") - require.NoError(t, err) - processDirectory, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(processDirectory) - defer os.RemoveAll(finishedDirectory) + finishedDirectory := t.TempDir() + processDirectory := t.TempDir() // Init plugin. r := DirectoryMonitor{ @@ -154,7 +143,7 @@ func TestFileTag(t *testing.T) { MaxBufferedMetrics: 1000, FileQueueSize: 1000, } - err = r.Init() + err := r.Init() require.NoError(t, err) parserConfig := parsers.Config{ @@ -198,12 +187,8 @@ func TestCSVNoSkipRows(t *testing.T) { testCsvFile := "test.csv" // Establish process directory and finished directory. - finishedDirectory, err := os.MkdirTemp("", "finished") - require.NoError(t, err) - processDirectory, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(processDirectory) - defer os.RemoveAll(finishedDirectory) + finishedDirectory := t.TempDir() + processDirectory := t.TempDir() // Init plugin. r := DirectoryMonitor{ @@ -212,7 +197,7 @@ func TestCSVNoSkipRows(t *testing.T) { MaxBufferedMetrics: 1000, FileQueueSize: 100000, } - err = r.Init() + err := r.Init() require.NoError(t, err) r.SetParserFunc(func() (parsers.Parser, error) { @@ -270,12 +255,8 @@ func TestCSVSkipRows(t *testing.T) { testCsvFile := "test.csv" // Establish process directory and finished directory. - finishedDirectory, err := os.MkdirTemp("", "finished") - require.NoError(t, err) - processDirectory, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(processDirectory) - defer os.RemoveAll(finishedDirectory) + finishedDirectory := t.TempDir() + processDirectory := t.TempDir() // Init plugin. r := DirectoryMonitor{ @@ -284,7 +265,7 @@ func TestCSVSkipRows(t *testing.T) { MaxBufferedMetrics: 1000, FileQueueSize: 100000, } - err = r.Init() + err := r.Init() require.NoError(t, err) r.SetParserFunc(func() (parsers.Parser, error) { @@ -344,12 +325,8 @@ func TestCSVMultiHeader(t *testing.T) { testCsvFile := "test.csv" // Establish process directory and finished directory. - finishedDirectory, err := os.MkdirTemp("", "finished") - require.NoError(t, err) - processDirectory, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(processDirectory) - defer os.RemoveAll(finishedDirectory) + finishedDirectory := t.TempDir() + processDirectory := t.TempDir() // Init plugin. r := DirectoryMonitor{ @@ -358,7 +335,7 @@ func TestCSVMultiHeader(t *testing.T) { MaxBufferedMetrics: 1000, FileQueueSize: 100000, } - err = r.Init() + err := r.Init() require.NoError(t, err) r.SetParserFunc(func() (parsers.Parser, error) { diff --git a/plugins/inputs/linux_sysctl_fs/linux_sysctl_fs_test.go b/plugins/inputs/linux_sysctl_fs/linux_sysctl_fs_test.go index 8b76b266b..8928b1de1 100644 --- a/plugins/inputs/linux_sysctl_fs/linux_sysctl_fs_test.go +++ b/plugins/inputs/linux_sysctl_fs/linux_sysctl_fs_test.go @@ -9,9 +9,7 @@ import ( ) func TestSysctlFSGather(t *testing.T) { - td, err := os.MkdirTemp("", "") - require.NoError(t, err) - defer os.RemoveAll(td) + td := t.TempDir() require.NoError(t, os.WriteFile(td+"/aio-nr", []byte("100\n"), 0644)) require.NoError(t, os.WriteFile(td+"/aio-max-nr", []byte("101\n"), 0644)) diff --git a/plugins/inputs/logparser/logparser_test.go b/plugins/inputs/logparser/logparser_test.go index a2f780afd..f9c094191 100644 --- a/plugins/inputs/logparser/logparser_test.go +++ b/plugins/inputs/logparser/logparser_test.go @@ -109,9 +109,17 @@ func TestGrokParseLogFiles(t *testing.T) { } func TestGrokParseLogFilesAppearLater(t *testing.T) { + // TODO: t.TempDir will fail on Windows because it could not remove + // test.a.log file. This seems like an issue with the tail package, it + // is not closing the os.File properly on Stop. + // === RUN TestGrokParseLogFilesAppearLater + //2022/04/16 11:05:13 D! [] Tail added for file: C:\Users\circleci\AppData\Local\Temp\TestGrokParseLogFilesAppearLater3687440534\001\test_a.log + //2022/04/16 11:05:13 D! [] Tail dropped for file: C:\Users\circleci\AppData\Local\Temp\TestGrokParseLogFilesAppearLater3687440534\001\test_a.log + // testing.go:1090: TempDir RemoveAll cleanup: CreateFile C:\Users\circleci\AppData\Local\Temp\TestGrokParseLogFilesAppearLater3687440534\001: Access is denied. + //--- FAIL: TestGrokParseLogFilesAppearLater (1.68s) emptydir, err := os.MkdirTemp("", "TestGrokParseLogFilesAppearLater") - defer os.RemoveAll(emptydir) require.NoError(t, err) + defer os.RemoveAll(emptydir) logparser := &LogParserPlugin{ Log: testutil.Logger{}, diff --git a/plugins/inputs/postfix/postfix_test.go b/plugins/inputs/postfix/postfix_test.go index e3032469c..5215fe291 100644 --- a/plugins/inputs/postfix/postfix_test.go +++ b/plugins/inputs/postfix/postfix_test.go @@ -14,9 +14,7 @@ import ( ) func TestGather(t *testing.T) { - td, err := os.MkdirTemp("", "") - require.NoError(t, err) - defer os.RemoveAll(td) + td := t.TempDir() for _, q := range []string{"active", "hold", "incoming", "maildrop", "deferred/0/0", "deferred/F/F"} { require.NoError(t, os.MkdirAll(filepath.FromSlash(td+"/"+q), 0755)) diff --git a/plugins/inputs/procstat/procstat_test.go b/plugins/inputs/procstat/procstat_test.go index 5b6723215..b42356eeb 100644 --- a/plugins/inputs/procstat/procstat_test.go +++ b/plugins/inputs/procstat/procstat_test.go @@ -386,10 +386,8 @@ func TestGather_cgroupPIDs(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("no cgroups in windows") } - td, err := os.MkdirTemp("", "") - require.NoError(t, err) - defer os.RemoveAll(td) - err = os.WriteFile(filepath.Join(td, "cgroup.procs"), []byte("1234\n5678\n"), 0644) + td := t.TempDir() + err := os.WriteFile(filepath.Join(td, "cgroup.procs"), []byte("1234\n5678\n"), 0644) require.NoError(t, err) p := Procstat{ diff --git a/plugins/inputs/socket_listener/socket_listener_test.go b/plugins/inputs/socket_listener/socket_listener_test.go index 1d363d850..91062c626 100644 --- a/plugins/inputs/socket_listener/socket_listener_test.go +++ b/plugins/inputs/socket_listener/socket_listener_test.go @@ -7,7 +7,6 @@ import ( "log" "net" "os" - "path/filepath" "runtime" "testing" "time" @@ -69,10 +68,7 @@ func TestSocketListener_tcp_tls(t *testing.T) { } func TestSocketListener_unix_tls(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "sl.TestSocketListener_unix_tls.sock") + sock := testutil.TempSocket(t) sl := newSocketListener() sl.Log = testutil.Logger{} @@ -80,7 +76,7 @@ func TestSocketListener_unix_tls(t *testing.T) { sl.ServerConfig = *pki.TLSServerConfig() acc := &testutil.Accumulator{} - err = sl.Start(acc) + err := sl.Start(acc) require.NoError(t, err) defer sl.Stop() @@ -135,10 +131,7 @@ func TestSocketListener_udp(t *testing.T) { } func TestSocketListener_unix(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "sl.TestSocketListener_unix.sock") + sock := testutil.TempSocket(t) testEmptyLog := prepareLog(t) defer testEmptyLog() @@ -151,7 +144,7 @@ func TestSocketListener_unix(t *testing.T) { sl.ReadBufferSize = config.Size(1024) acc := &testutil.Accumulator{} - err = sl.Start(acc) + err := sl.Start(acc) require.NoError(t, err) defer sl.Stop() @@ -166,16 +159,15 @@ func TestSocketListener_unixgram(t *testing.T) { t.Skip("Skipping on Windows, as unixgram sockets are not supported") } - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "sl.TestSocketListener_unixgram.sock") + sock := testutil.TempSocket(t) testEmptyLog := prepareLog(t) defer testEmptyLog() - _, err = os.Create(sock) + f, err := os.Create(sock) require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, f.Close()) }) + sl := newSocketListener() sl.Log = testutil.Logger{} sl.ServiceAddress = "unixgram://" + sock diff --git a/plugins/inputs/suricata/suricata_test.go b/plugins/inputs/suricata/suricata_test.go index cd13676cf..997475de6 100644 --- a/plugins/inputs/suricata/suricata_test.go +++ b/plugins/inputs/suricata/suricata_test.go @@ -21,9 +21,7 @@ var ex2 = `{"timestamp":"2017-03-06T07:43:39.000397+0000","event_type":"stats"," var ex3 = `{"timestamp":"2017-03-06T07:43:39.000397+0000","event_type":"stats","stats":{"threads": { "W#05-wlp4s0": { "capture":{"kernel_packets":905344474,"kernel_drops":78355440}}}}}` func TestSuricataLarge(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) + dir := t.TempDir() tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) s := Suricata{ @@ -61,9 +59,7 @@ func TestSuricataLarge(t *testing.T) { } func TestSuricataAlerts(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) + dir := t.TempDir() tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) s := Suricata{ @@ -116,9 +112,7 @@ func TestSuricataAlerts(t *testing.T) { } func TestSuricata(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) + dir := t.TempDir() tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) s := Suricata{ @@ -162,9 +156,7 @@ func TestSuricata(t *testing.T) { } func TestThreadStats(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) + dir := t.TempDir() tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) s := Suricata{ @@ -212,9 +204,7 @@ func TestThreadStats(t *testing.T) { } func TestSuricataInvalid(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) + dir := t.TempDir() tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) s := Suricata{ @@ -254,10 +244,7 @@ func TestSuricataInvalidPath(t *testing.T) { } func TestSuricataTooLongLine(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) - tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) + tmpfn := testutil.TempSocket(t) s := Suricata{ Source: tmpfn, @@ -282,10 +269,7 @@ func TestSuricataTooLongLine(t *testing.T) { } func TestSuricataEmptyJSON(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) - tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) + tmpfn := testutil.TempSocket(t) s := Suricata{ Source: tmpfn, @@ -309,10 +293,7 @@ func TestSuricataEmptyJSON(t *testing.T) { } func TestSuricataDisconnectSocket(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) - tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) + tmpfn := testutil.TempSocket(t) s := Suricata{ Source: tmpfn, @@ -345,10 +326,7 @@ func TestSuricataDisconnectSocket(t *testing.T) { } func TestSuricataStartStop(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - require.NoError(t, err) - defer os.RemoveAll(dir) - tmpfn := filepath.Join(dir, fmt.Sprintf("t%d", rand.Int63())) + tmpfn := testutil.TempSocket(t) s := Suricata{ Source: tmpfn, diff --git a/plugins/inputs/syslog/nontransparent_test.go b/plugins/inputs/syslog/nontransparent_test.go index 7782ad968..76f8c7081 100644 --- a/plugins/inputs/syslog/nontransparent_test.go +++ b/plugins/inputs/syslog/nontransparent_test.go @@ -3,8 +3,6 @@ package syslog import ( "crypto/tls" "net" - "os" - "path/filepath" "testing" "time" @@ -269,33 +267,21 @@ func TestNonTransparentStrictWithZeroKeepAlive_tcp_tls(t *testing.T) { } func TestNonTransparentStrict_unix(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestStrict_unix.sock") + sock := testutil.TempSocket(t) testStrictNonTransparent(t, "unix", sock, false, nil) } func TestNonTransparentBestEffort_unix(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestBestEffort_unix.sock") + sock := testutil.TempSocket(t) testBestEffortNonTransparent(t, "unix", sock, false) } func TestNonTransparentStrict_unix_tls(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestStrict_unix_tls.sock") + sock := testutil.TempSocket(t) testStrictNonTransparent(t, "unix", sock, true, nil) } func TestNonTransparentBestEffort_unix_tls(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestBestEffort_unix_tls.sock") + sock := testutil.TempSocket(t) testBestEffortNonTransparent(t, "unix", sock, true) } diff --git a/plugins/inputs/syslog/octetcounting_test.go b/plugins/inputs/syslog/octetcounting_test.go index 1c0cc0245..0d24b83a3 100644 --- a/plugins/inputs/syslog/octetcounting_test.go +++ b/plugins/inputs/syslog/octetcounting_test.go @@ -4,8 +4,6 @@ import ( "crypto/tls" "fmt" "net" - "os" - "path/filepath" "testing" "time" @@ -469,33 +467,21 @@ func TestOctetCountingStrictWithZeroKeepAlive_tcp_tls(t *testing.T) { } func TestOctetCountingStrict_unix(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestStrict_unix.sock") + sock := testutil.TempSocket(t) testStrictOctetCounting(t, "unix", sock, false, nil) } func TestOctetCountingBestEffort_unix(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestBestEffort_unix.sock") + sock := testutil.TempSocket(t) testBestEffortOctetCounting(t, "unix", sock, false) } func TestOctetCountingStrict_unix_tls(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestStrict_unix_tls.sock") + sock := testutil.TempSocket(t) testStrictOctetCounting(t, "unix", sock, true, nil) } func TestOctetCountingBestEffort_unix_tls(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestBestEffort_unix_tls.sock") + sock := testutil.TempSocket(t) testBestEffortOctetCounting(t, "unix", sock, true) } diff --git a/plugins/inputs/syslog/rfc5426_test.go b/plugins/inputs/syslog/rfc5426_test.go index 5bcb847b3..32aea6b98 100644 --- a/plugins/inputs/syslog/rfc5426_test.go +++ b/plugins/inputs/syslog/rfc5426_test.go @@ -4,7 +4,6 @@ import ( "fmt" "net" "os" - "path/filepath" "runtime" "sync/atomic" "testing" @@ -289,12 +288,11 @@ func TestBestEffort_unixgram(t *testing.T) { t.Skip("Skipping on Windows, as unixgram sockets are not supported") } - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestBestEffort_unixgram.sock") - _, err = os.Create(sock) + sock := testutil.TempSocket(t) + f, err := os.Create(sock) require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, f.Close()) }) + testRFC5426(t, "unixgram", sock, true) } @@ -303,12 +301,11 @@ func TestStrict_unixgram(t *testing.T) { t.Skip("Skipping on Windows, as unixgram sockets are not supported") } - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "syslog.TestStrict_unixgram.sock") - _, err = os.Create(sock) + sock := testutil.TempSocket(t) + f, err := os.Create(sock) require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, f.Close()) }) + testRFC5426(t, "unixgram", sock, false) } diff --git a/plugins/inputs/syslog/syslog_test.go b/plugins/inputs/syslog/syslog_test.go index 00146fde9..4985286d6 100644 --- a/plugins/inputs/syslog/syslog_test.go +++ b/plugins/inputs/syslog/syslog_test.go @@ -1,7 +1,6 @@ package syslog import ( - "os" "path/filepath" "runtime" "strings" @@ -45,9 +44,7 @@ func TestAddress(t *testing.T) { require.EqualError(t, err, "unknown protocol 'unsupported' in 'example.com:6514'") require.Error(t, err) - tmpdir, err := os.MkdirTemp("", "telegraf") - defer os.RemoveAll(tmpdir) - require.NoError(t, err) + tmpdir := t.TempDir() sock := filepath.Join(tmpdir, "syslog.TestAddress.sock") if runtime.GOOS != "windows" { diff --git a/plugins/outputs/file/file_test.go b/plugins/outputs/file/file_test.go index 36706c4dc..73639db8f 100644 --- a/plugins/outputs/file/file_test.go +++ b/plugins/outputs/file/file_test.go @@ -21,7 +21,6 @@ const ( func TestFileExistingFile(t *testing.T) { fh := createFile(t) - defer os.Remove(fh.Name()) s, _ := serializers.NewInfluxSerializer() f := File{ Files: []string{fh.Name()}, @@ -43,7 +42,6 @@ func TestFileExistingFile(t *testing.T) { func TestFileNewFile(t *testing.T) { s, _ := serializers.NewInfluxSerializer() fh := tmpFile(t) - defer os.Remove(fh) f := File{ Files: []string{fh}, serializer: s, @@ -63,11 +61,8 @@ func TestFileNewFile(t *testing.T) { func TestFileExistingFiles(t *testing.T) { fh1 := createFile(t) - defer os.Remove(fh1.Name()) fh2 := createFile(t) - defer os.Remove(fh2.Name()) fh3 := createFile(t) - defer os.Remove(fh3.Name()) s, _ := serializers.NewInfluxSerializer() f := File{ @@ -92,11 +87,8 @@ func TestFileExistingFiles(t *testing.T) { func TestFileNewFiles(t *testing.T) { s, _ := serializers.NewInfluxSerializer() fh1 := tmpFile(t) - defer os.Remove(fh1) fh2 := tmpFile(t) - defer os.Remove(fh2) fh3 := tmpFile(t) - defer os.Remove(fh3) f := File{ Files: []string{fh1, fh2, fh3}, serializer: s, @@ -118,9 +110,7 @@ func TestFileNewFiles(t *testing.T) { func TestFileBoth(t *testing.T) { fh1 := createFile(t) - defer os.Remove(fh1.Name()) fh2 := tmpFile(t) - defer os.Remove(fh2) s, _ := serializers.NewInfluxSerializer() f := File{ @@ -183,8 +173,11 @@ func TestFileStdout(t *testing.T) { } func createFile(t *testing.T) *os.File { - f, err := os.CreateTemp("", "") + f, err := os.CreateTemp(t.TempDir(), "") require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, f.Close()) + }) _, err = f.WriteString("cpu,cpu=cpu0 value=100 1455312810012459582\n") require.NoError(t, err) @@ -192,10 +185,7 @@ func createFile(t *testing.T) *os.File { } func tmpFile(t *testing.T) string { - d, err := os.MkdirTemp("", "") - require.NoError(t, err) - - return d + internal.RandomString(10) + return t.TempDir() + internal.RandomString(10) } func validateFile(t *testing.T, fileName, expS string) { diff --git a/plugins/outputs/influxdb/http_test.go b/plugins/outputs/influxdb/http_test.go index ba4dd2d81..ec0ba7590 100644 --- a/plugins/outputs/influxdb/http_test.go +++ b/plugins/outputs/influxdb/http_test.go @@ -12,7 +12,6 @@ import ( "net/http" "net/http/httptest" "net/url" - "os" "path" "testing" "time" @@ -618,11 +617,7 @@ func TestHTTP_WriteContentEncodingGzip(t *testing.T) { } func TestHTTP_UnixSocket(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf-test") - if err != nil { - require.NoError(t, err) - } - defer os.RemoveAll(tmpdir) + tmpdir := t.TempDir() sock := path.Join(tmpdir, "test.sock") listener, err := net.Listen("unix", sock) diff --git a/plugins/outputs/socket_writer/socket_writer_test.go b/plugins/outputs/socket_writer/socket_writer_test.go index d1283a411..a10f71489 100644 --- a/plugins/outputs/socket_writer/socket_writer_test.go +++ b/plugins/outputs/socket_writer/socket_writer_test.go @@ -3,8 +3,6 @@ package socket_writer import ( "bufio" "net" - "os" - "path/filepath" "runtime" "sync" "testing" @@ -45,10 +43,7 @@ func TestSocketWriter_udp(t *testing.T) { } func TestSocketWriter_unix(t *testing.T) { - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "sw.TestSocketWriter_unix.sock") + sock := testutil.TempSocket(t) listener, err := net.Listen("unix", sock) require.NoError(t, err) @@ -70,10 +65,7 @@ func TestSocketWriter_unixgram(t *testing.T) { t.Skip("Skipping on Windows, as unixgram sockets are not supported") } - tmpdir, err := os.MkdirTemp("", "telegraf") - require.NoError(t, err) - defer os.RemoveAll(tmpdir) - sock := filepath.Join(tmpdir, "sw.TSW_unixgram.sock") + sock := testutil.TempSocket(t) listener, err := net.ListenPacket("unixgram", sock) require.NoError(t, err) diff --git a/plugins/outputs/sql/sql_test.go b/plugins/outputs/sql/sql_test.go index da8fc3ef5..e065de812 100644 --- a/plugins/outputs/sql/sql_test.go +++ b/plugins/outputs/sql/sql_test.go @@ -169,9 +169,7 @@ func TestMysqlIntegration(t *testing.T) { const username = "root" password := pwgen(32) - outDir, err := os.MkdirTemp("", "tg-mysql-*") - require.NoError(t, err) - defer os.RemoveAll(outDir) + outDir := t.TempDir() ctx := context.Background() req := testcontainers.GenericContainerRequest{ @@ -259,9 +257,7 @@ func TestPostgresIntegration(t *testing.T) { const username = "postgres" password := pwgen(32) - outDir, err := os.MkdirTemp("", "tg-postgres-*") - require.NoError(t, err) - defer os.RemoveAll(outDir) + outDir := t.TempDir() ctx := context.Background() req := testcontainers.GenericContainerRequest{ @@ -361,9 +357,7 @@ func TestClickHouseIntegration(t *testing.T) { // default username for clickhouse is default const username = "default" - outDir, err := os.MkdirTemp("", "tg-clickhouse-*") - require.NoError(t, err) - defer os.RemoveAll(outDir) + outDir := t.TempDir() ctx := context.Background() req := testcontainers.GenericContainerRequest{ diff --git a/plugins/outputs/sql/sqlite_test.go b/plugins/outputs/sql/sqlite_test.go index 7707f9d08..ddb76f884 100644 --- a/plugins/outputs/sql/sqlite_test.go +++ b/plugins/outputs/sql/sqlite_test.go @@ -7,7 +7,6 @@ package sql import ( gosql "database/sql" - "os" "path/filepath" "testing" "time" @@ -17,9 +16,7 @@ import ( ) func TestSqlite(t *testing.T) { - outDir, err := os.MkdirTemp("", "tg-sqlite-*") - require.NoError(t, err) - defer os.RemoveAll(outDir) + outDir := t.TempDir() dbfile := filepath.Join(outDir, "db") diff --git a/testutil/socket.go b/testutil/socket.go new file mode 100644 index 000000000..9d897da75 --- /dev/null +++ b/testutil/socket.go @@ -0,0 +1,32 @@ +package testutil + +import ( + "os" + "path/filepath" + "runtime" + "testing" + + "github.com/stretchr/testify/require" +) + +func TempSocket(tb testing.TB) string { + // On MacOS, the maximum path length of Unix domain socket is 104 + // characters. (https://unix.stackexchange.com/a/367012/376279) + // + // On MacOS, tb.TempDir() returns e.g. + // /var/folders/bl/wbxjgtzx7j5_mjsmfr3ynlc00000gp/T//001/socket.sock + // + // If the name of the test is long, the path length could exceed 104 + // characters, and this would result in listen unix ...: bind: invalid argument + if runtime.GOOS == "darwin" { + sock := filepath.Join("/tmp", "sock") + + tb.Cleanup(func() { + require.NoError(tb, os.RemoveAll(sock)) + }) + + return sock + } + + return filepath.Join(tb.TempDir(), "sock") +}