package inputs_disk_test import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/require" "github.com/influxdata/telegraf/config" _ "github.com/influxdata/telegraf/migrations/inputs_disk" // register migration _ "github.com/influxdata/telegraf/plugins/inputs/disk" // register plugin ) func TestNoMigration(t *testing.T) { defaultCfg := []byte(` # Read metrics about disk usage by mount point [[inputs.disk]] ## By default stats will be gathered for all mount points. ## Set mount_points will restrict the stats to only the specified mount points. # mount_points = ["/"] ## Ignore mount points by filesystem type. ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] ## Ignore mount points by mount options. ## The 'mount' command reports options of all mounts in parathesis. ## Bind mounts can be ignored with the special 'bind' option. # ignore_mount_opts = [] `) // Migrate and check that nothing changed output, n, err := config.ApplyMigrations(defaultCfg) require.NoError(t, err) require.NotEmpty(t, output) require.Zero(t, n) require.Equal(t, string(defaultCfg), string(output)) } func TestCases(t *testing.T) { // Get all directories in testdata folders, err := os.ReadDir("testcases") require.NoError(t, err) for _, f := range folders { // Only handle folders if !f.IsDir() { continue } t.Run(f.Name(), func(t *testing.T) { testcasePath := filepath.Join("testcases", f.Name()) inputFile := filepath.Join(testcasePath, "telegraf.conf") expectedFile := filepath.Join(testcasePath, "expected.conf") // Read the expected output expected := config.NewConfig() require.NoError(t, expected.LoadConfig(expectedFile)) require.NotEmpty(t, expected.Inputs) // Read the input data input, remote, err := config.LoadConfigFile(inputFile) require.NoError(t, err) require.False(t, remote) require.NotEmpty(t, input) // Migrate output, n, err := config.ApplyMigrations(input) require.NoError(t, err) require.NotEmpty(t, output) require.GreaterOrEqual(t, n, uint64(1)) actual := config.NewConfig() require.NoError(t, actual.LoadConfigData(output, config.EmptySourcePath)) // Test the output require.Len(t, actual.Inputs, len(expected.Inputs)) actualIDs := make([]string, 0, len(expected.Inputs)) expectedIDs := make([]string, 0, len(expected.Inputs)) for i := range actual.Inputs { actualIDs = append(actualIDs, actual.Inputs[i].ID()) expectedIDs = append(expectedIDs, expected.Inputs[i].ID()) } require.ElementsMatch(t, expectedIDs, actualIDs, string(output)) }) } }