telegraf/plugins/inputs/filestat/filestat_test.go

214 lines
6.5 KiB
Go
Raw Normal View History

2020-11-23 23:40:32 +08:00
// +build !windows
// TODO: Windows - should be enabled for Windows when super asterisk is fixed on Windows
// https://github.com/influxdata/telegraf/issues/6248
2016-04-21 09:51:25 +08:00
package filestat
import (
2020-11-23 23:40:32 +08:00
"os"
"path/filepath"
2016-04-21 09:51:25 +08:00
"testing"
"github.com/stretchr/testify/require"
2016-04-21 09:51:25 +08:00
"github.com/influxdata/telegraf/testutil"
2020-11-23 23:40:32 +08:00
)
var (
testdataDir = getTestdataDir()
2016-04-21 09:51:25 +08:00
)
func TestGatherNoMd5(t *testing.T) {
fs := NewFileStat()
fs.Log = testutil.Logger{}
2016-04-21 09:51:25 +08:00
fs.Files = []string{
2020-11-23 23:40:32 +08:00
filepath.Join(testdataDir, "log1.log"),
filepath.Join(testdataDir, "log2.log"),
filepath.Join(testdataDir, "non_existent_file"),
2016-04-21 09:51:25 +08:00
}
acc := testutil.Accumulator{}
require.NoError(t, acc.GatherError(fs.Gather))
2016-04-21 09:51:25 +08:00
tags1 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log1.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
2016-04-21 09:51:25 +08:00
tags2 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log2.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
2016-04-21 09:51:25 +08:00
tags3 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "non_existent_file"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags3, "exists", int64(0)))
2016-04-21 09:51:25 +08:00
}
func TestGatherExplicitFiles(t *testing.T) {
fs := NewFileStat()
fs.Log = testutil.Logger{}
2016-04-21 09:51:25 +08:00
fs.Md5 = true
fs.Files = []string{
2020-11-23 23:40:32 +08:00
filepath.Join(testdataDir, "log1.log"),
filepath.Join(testdataDir, "log2.log"),
filepath.Join(testdataDir, "non_existent_file"),
2016-04-21 09:51:25 +08:00
}
acc := testutil.Accumulator{}
require.NoError(t, acc.GatherError(fs.Gather))
2016-04-21 09:51:25 +08:00
tags1 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log1.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
require.True(t, acc.HasPoint("filestat", tags1, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
2016-04-21 09:51:25 +08:00
tags2 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log2.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
require.True(t, acc.HasPoint("filestat", tags2, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
2016-04-21 09:51:25 +08:00
tags3 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "non_existent_file"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags3, "exists", int64(0)))
2016-04-21 09:51:25 +08:00
}
func TestNonExistentFile(t *testing.T) {
fs := NewFileStat()
fs.Log = testutil.Logger{}
fs.Md5 = true
fs.Files = []string{
"/non/existant/file",
}
acc := testutil.Accumulator{}
require.NoError(t, acc.GatherError(fs.Gather))
acc.AssertContainsFields(t, "filestat", map[string]interface{}{"exists": int64(0)})
require.False(t, acc.HasField("filestat", "error"))
require.False(t, acc.HasField("filestat", "md5_sum"))
require.False(t, acc.HasField("filestat", "size_bytes"))
require.False(t, acc.HasField("filestat", "modification_time"))
}
2016-04-21 09:51:25 +08:00
func TestGatherGlob(t *testing.T) {
fs := NewFileStat()
fs.Log = testutil.Logger{}
2016-04-21 09:51:25 +08:00
fs.Md5 = true
fs.Files = []string{
2020-11-23 23:40:32 +08:00
filepath.Join(testdataDir, "*.log"),
2016-04-21 09:51:25 +08:00
}
acc := testutil.Accumulator{}
require.NoError(t, acc.GatherError(fs.Gather))
2016-04-21 09:51:25 +08:00
tags1 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log1.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
require.True(t, acc.HasPoint("filestat", tags1, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
2016-04-21 09:51:25 +08:00
tags2 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log2.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
require.True(t, acc.HasPoint("filestat", tags2, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
2016-04-21 09:51:25 +08:00
}
func TestGatherSuperAsterisk(t *testing.T) {
fs := NewFileStat()
fs.Log = testutil.Logger{}
2016-04-21 09:51:25 +08:00
fs.Md5 = true
fs.Files = []string{
2020-11-23 23:40:32 +08:00
filepath.Join(testdataDir, "**"),
2016-04-21 09:51:25 +08:00
}
acc := testutil.Accumulator{}
require.NoError(t, acc.GatherError(fs.Gather))
2016-04-21 09:51:25 +08:00
tags1 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log1.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
require.True(t, acc.HasPoint("filestat", tags1, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
2016-04-21 09:51:25 +08:00
tags2 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log2.log"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
require.True(t, acc.HasPoint("filestat", tags2, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
2016-04-21 09:51:25 +08:00
tags3 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "test.conf"),
2016-04-21 09:51:25 +08:00
}
require.True(t, acc.HasPoint("filestat", tags3, "size_bytes", int64(104)))
require.True(t, acc.HasPoint("filestat", tags3, "exists", int64(1)))
require.True(t, acc.HasPoint("filestat", tags3, "md5_sum", "5a7e9b77fa25e7bb411dbd17cf403c1f"))
}
func TestModificationTime(t *testing.T) {
fs := NewFileStat()
fs.Log = testutil.Logger{}
fs.Files = []string{
2020-11-23 23:40:32 +08:00
filepath.Join(testdataDir, "log1.log"),
}
acc := testutil.Accumulator{}
require.NoError(t, acc.GatherError(fs.Gather))
tags1 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "log1.log"),
}
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
require.True(t, acc.HasInt64Field("filestat", "modification_time"))
}
func TestNoModificationTime(t *testing.T) {
fs := NewFileStat()
fs.Log = testutil.Logger{}
fs.Files = []string{
2020-11-23 23:40:32 +08:00
filepath.Join(testdataDir, "non_existent_file"),
}
acc := testutil.Accumulator{}
require.NoError(t, acc.GatherError(fs.Gather))
tags1 := map[string]string{
2020-11-23 23:40:32 +08:00
"file": filepath.Join(testdataDir, "non_existent_file"),
}
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(0)))
require.False(t, acc.HasInt64Field("filestat", "modification_time"))
2016-04-21 09:51:25 +08:00
}
func TestGetMd5(t *testing.T) {
2020-11-23 23:40:32 +08:00
md5, err := getMd5(filepath.Join(testdataDir, "test.conf"))
require.NoError(t, err)
require.Equal(t, "5a7e9b77fa25e7bb411dbd17cf403c1f", md5)
2016-04-21 09:51:25 +08:00
md5, err = getMd5("/tmp/foo/bar/fooooo")
require.Error(t, err)
2016-04-21 09:51:25 +08:00
}
func getTestdataDir() string {
2020-11-23 23:40:32 +08:00
dir, err := os.Getwd()
if err != nil {
// if we cannot even establish the test directory, further progress is meaningless
panic(err)
}
return filepath.Join(dir, "testdata")
2016-04-21 09:51:25 +08:00
}