telegraf/plugins/inputs/filecount/filecount_test.go

144 lines
4.3 KiB
Go
Raw Normal View History

2018-07-31 22:05:55 +00:00
package filecount
import (
"os"
"path/filepath"
"runtime"
"strings"
"testing"
"time"
"github.com/influxdata/telegraf/internal"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/require"
)
func TestNoFilters(t *testing.T) {
2018-12-13 20:25:49 +00:00
fc := getNoFilterFileCount()
matches := []string{"foo", "bar", "baz", "qux",
"subdir/", "subdir/quux", "subdir/quuz",
"subdir/nested2", "subdir/nested2/qux"}
fileCountEquals(t, fc, len(matches), 9084)
}
func TestNoFiltersOnChildDir(t *testing.T) {
fc := getNoFilterFileCount()
fc.Directories = []string{getTestdataDir() + "/*"}
matches := []string{"subdir/quux", "subdir/quuz",
"subdir/nested2/qux", "subdir/nested2"}
2018-12-13 20:25:49 +00:00
tags := map[string]string{"directory": getTestdataDir() + "/subdir"}
acc := testutil.Accumulator{}
acc.GatherError(fc.Gather)
2018-12-13 20:25:49 +00:00
require.True(t, acc.HasPoint("filecount", tags, "count", int64(len(matches))))
require.True(t, acc.HasPoint("filecount", tags, "size_bytes", int64(4542)))
}
2018-12-13 20:25:49 +00:00
func TestNoRecursiveButSuperMeta(t *testing.T) {
fc := getNoFilterFileCount()
fc.Recursive = false
fc.Directories = []string{getTestdataDir() + "/**"}
matches := []string{"subdir/quux", "subdir/quuz", "subdir/nested2"}
2018-12-13 20:25:49 +00:00
tags := map[string]string{"directory": getTestdataDir() + "/subdir"}
acc := testutil.Accumulator{}
acc.GatherError(fc.Gather)
2018-12-13 20:25:49 +00:00
require.True(t, acc.HasPoint("filecount", tags, "count", int64(len(matches))))
require.True(t, acc.HasPoint("filecount", tags, "size_bytes", int64(4096)))
2018-07-31 22:05:55 +00:00
}
func TestNameFilter(t *testing.T) {
2018-12-13 20:25:49 +00:00
fc := getNoFilterFileCount()
2018-07-31 22:05:55 +00:00
fc.Name = "ba*"
matches := []string{"bar", "baz"}
2018-12-13 20:25:49 +00:00
fileCountEquals(t, fc, len(matches), 0)
2018-07-31 22:05:55 +00:00
}
func TestNonRecursive(t *testing.T) {
2018-12-13 20:25:49 +00:00
fc := getNoFilterFileCount()
2018-07-31 22:05:55 +00:00
fc.Recursive = false
matches := []string{"foo", "bar", "baz", "qux", "subdir"}
2018-12-13 20:25:49 +00:00
fileCountEquals(t, fc, len(matches), 4542)
}
func TestDoubleAndSimpleStar(t *testing.T) {
fc := getNoFilterFileCount()
fc.Directories = []string{getTestdataDir() + "/**/*"}
matches := []string{"qux"}
tags := map[string]string{"directory": getTestdataDir() + "/subdir/nested2"}
acc := testutil.Accumulator{}
acc.GatherError(fc.Gather)
2018-12-13 20:25:49 +00:00
require.True(t, acc.HasPoint("filecount", tags, "count", int64(len(matches))))
require.True(t, acc.HasPoint("filecount", tags, "size_bytes", int64(446)))
2018-07-31 22:05:55 +00:00
}
func TestRegularOnlyFilter(t *testing.T) {
2018-12-13 20:25:49 +00:00
fc := getNoFilterFileCount()
2018-07-31 22:05:55 +00:00
fc.RegularOnly = true
matches := []string{
"foo", "bar", "baz", "qux", "subdir/quux", "subdir/quuz",
2018-12-13 20:25:49 +00:00
"subdir/nested2/qux"}
fileCountEquals(t, fc, len(matches), 892)
2018-07-31 22:05:55 +00:00
}
func TestSizeFilter(t *testing.T) {
2018-12-13 20:25:49 +00:00
fc := getNoFilterFileCount()
fc.Size = internal.Size{Size: -100}
2018-12-13 20:25:49 +00:00
matches := []string{"foo", "bar", "baz",
"subdir/quux", "subdir/quuz"}
fileCountEquals(t, fc, len(matches), 0)
2018-07-31 22:05:55 +00:00
fc.Size = internal.Size{Size: 100}
2018-12-13 20:25:49 +00:00
matches = []string{"qux", "subdir/nested2//qux"}
fileCountEquals(t, fc, len(matches), 892)
2018-07-31 22:05:55 +00:00
}
func TestMTimeFilter(t *testing.T) {
2018-12-13 20:25:49 +00:00
oldFile := filepath.Join(getTestdataDir(), "baz")
2018-07-31 22:05:55 +00:00
mtime := time.Date(1979, time.December, 14, 18, 25, 5, 0, time.UTC)
if err := os.Chtimes(oldFile, mtime, mtime); err != nil {
t.Skip("skipping mtime filter test.")
}
fileAge := time.Since(mtime) - (60 * time.Second)
2018-12-13 20:25:49 +00:00
fc := getNoFilterFileCount()
2018-07-31 22:05:55 +00:00
fc.MTime = internal.Duration{Duration: -fileAge}
2018-12-13 20:25:49 +00:00
matches := []string{"foo", "bar", "qux",
"subdir/", "subdir/quux", "subdir/quuz",
"sbudir/nested2", "subdir/nested2/qux"}
fileCountEquals(t, fc, len(matches), 9084)
2018-07-31 22:05:55 +00:00
fc.MTime = internal.Duration{Duration: fileAge}
matches = []string{"baz"}
2018-12-13 20:25:49 +00:00
fileCountEquals(t, fc, len(matches), 0)
2018-07-31 22:05:55 +00:00
}
2018-12-13 20:25:49 +00:00
func getNoFilterFileCount() FileCount {
2018-07-31 22:05:55 +00:00
return FileCount{
2018-12-13 20:25:49 +00:00
Directories: []string{getTestdataDir()},
2018-07-31 22:05:55 +00:00
Name: "*",
Recursive: true,
RegularOnly: false,
Size: internal.Size{Size: 0},
2018-07-31 22:05:55 +00:00
MTime: internal.Duration{Duration: 0},
fileFilters: nil,
}
}
2018-12-13 20:25:49 +00:00
func getTestdataDir() string {
2018-07-31 22:05:55 +00:00
_, filename, _, _ := runtime.Caller(1)
2018-12-13 20:25:49 +00:00
return strings.Replace(filename, "filecount_test.go", "testdata", 1)
2018-07-31 22:05:55 +00:00
}
2018-12-13 20:25:49 +00:00
func fileCountEquals(t *testing.T, fc FileCount, expectedCount int, expectedSize int) {
tags := map[string]string{"directory": getTestdataDir()}
acc := testutil.Accumulator{}
acc.GatherError(fc.Gather)
require.True(t, acc.HasPoint("filecount", tags, "count", int64(expectedCount)))
require.True(t, acc.HasPoint("filecount", tags, "size_bytes", int64(expectedSize)))
2018-07-31 22:05:55 +00:00
}