| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- // Author: simon
- // Author: ynwdlxm@163.com
- // Date: 2025/1/26 16:53
- // Desc:
- package main
- import (
- "bytes"
- "fmt"
- "os"
- "path/filepath"
- "strings"
- "testing"
- )
- func TestRun(t *testing.T) {
- testCases := []struct {
- name string
- root string
- cfg config
- expected string
- }{
- {name: "NoFilter", root: "testdata", cfg: config{ext: "", size: 0, list: true}, expected: "testdata/dir.log\ntestdata/dir2/script.sh\n"},
- {"FilterExtensionMatch", "testdata", config{ext: ".log", size: 0, list: true}, "testdata/dir.log\n"},
- {"FilterExtensionSizeMatch", "testdata", config{ext: ".log", size: 10, list: true}, "testdata/dir.log\n"},
- {"FilterExtensionSizeNoMatch", "testdata", config{ext: ".log", size: 20, list: true}, ""},
- {"FilterExtensionNoMatch", "testdata", config{ext: ".gz", size: 0, list: true}, ""}}
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- var buffer bytes.Buffer
- if err := run(tc.root, &buffer, tc.cfg); err != nil {
- t.Fatal(err)
- }
- res := buffer.String()
- if tc.expected != res {
- t.Errorf("Expected %q, got %q instead\n", tc.expected, res)
- }
- })
- }
- }
- func TestRunDelExtension(t *testing.T) {
- testCases := []struct {
- name string
- cfg config
- extNoDelete string
- nDelete int
- nNoDelete int
- expected string
- }{
- {"DeleteExtensionNoMatch", config{ext: ".log", del: true}, ".gz", 10, 0, ""},
- {"DeleteExtensionMatch", config{ext: ".log", del: true}, "", 10, 0, ""},
- {"DeleteExtensionMixed", config{ext: ".log", del: true}, ".gz", 5, 5, ""},
- }
- // Execute RunDel test cases
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- var buffer bytes.Buffer
- var logBuffer bytes.Buffer
- tc.cfg.wLog = &logBuffer
- tempDir, cleanup := createTempDir(t, map[string]int{
- tc.cfg.ext: tc.nDelete,
- tc.extNoDelete: tc.nNoDelete,
- })
- defer cleanup()
- if err := run(tempDir, &buffer, tc.cfg); err != nil {
- t.Fatal(err)
- }
- res := buffer.String()
- if tc.expected != res {
- t.Errorf("Expected %q, got %q instead\n", tc.expected, res)
- }
- filesLeft, err := os.ReadDir(tempDir)
- if err != nil {
- t.Error(err)
- }
- if len(filesLeft) != tc.nNoDelete {
- t.Errorf("Expected %d files left, got %d instead\n", tc.nNoDelete, len(filesLeft))
- }
- expLogLines := tc.nDelete + 1
- lines := bytes.Split(logBuffer.Bytes(), []byte("\n"))
- if len(lines) != expLogLines {
- t.Errorf("Expected %d log lines, got %d instead\n", expLogLines, len(lines))
- }
- })
- }
- }
- func TestRunArchive(t *testing.T) {
- // Archiving test cases
- testCases := []struct {
- name string
- cfg config
- extNoArchive string
- nArchive int
- nNoArchive int
- }{
- {name: "ArchiveExtensionNoMatch", cfg: config{ext: ".log"}, extNoArchive: ".gz", nArchive: 0, nNoArchive: 10},
- {name: "ArchiveExtensionMatch", cfg: config{ext: ".log"}, extNoArchive: "", nArchive: 10, nNoArchive: 0},
- {name: "ArchiveExtensionMixed", cfg: config{ext: ".log"}, extNoArchive: ".gz", nArchive: 5, nNoArchive: 5},
- }
- // Execute RunArchive test cases
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- var buffer bytes.Buffer
- // Create temp dirs for RunArchive test
- tempDir, cleanup := createTempDir(t, map[string]int{
- tc.cfg.ext: tc.nArchive,
- tc.extNoArchive: tc.nNoArchive,
- })
- defer cleanup()
- archiveDir, cleanupArchive := createTempDir(t, nil)
- defer cleanupArchive()
- tc.cfg.archive = archiveDir
- if err := run(tempDir, &buffer, tc.cfg); err != nil {
- t.Fatal(err)
- }
- pattern := filepath.Join(tempDir, fmt.Sprintf("*%s", tc.cfg.ext))
- expFiles, err := filepath.Glob(pattern)
- if err != nil {
- t.Fatal(err)
- }
- expOut := strings.Join(expFiles, "\n")
- res := strings.TrimSpace(buffer.String())
- if expOut != res {
- t.Errorf("Expected %q, got %q instead\n", expOut, res)
- }
- // Validate the number of files archived
- filesArchived, err := os.ReadDir(archiveDir)
- if err != nil {
- t.Fatal(err)
- }
- if len(filesArchived) != tc.nArchive {
- t.Errorf("Expected %d files archived, got %d instead\n", tc.nNoArchive, len(filesArchived))
- }
- })
- }
- }
- func createTempDir(t *testing.T, files map[string]int) (dirname string, cleanup func()) {
- tempDir, err := os.MkdirTemp("", "walktest")
- if err != nil {
- t.Fatal(err)
- }
- for k, n := range files {
- for j := 1; j <= n; j++ {
- fName := fmt.Sprintf("field%d%s", j, k)
- fPath := filepath.Join(tempDir, fName)
- if err := os.WriteFile(fPath, []byte("dummy"), 0644); err != nil {
- t.Fatal(err)
- }
- }
- }
- return tempDir, func() { _ = os.RemoveAll(tempDir) }
- }
|