From fe2c7dfae0c74ed46db6d3ddfee728b9713b074a Mon Sep 17 00:00:00 2001 From: Pavel Zavora Date: Thu, 9 Jul 2020 06:13:00 +0200 Subject: [PATCH] chore(pkg/csv2lp): improve Test_CsvToLineProtocol_RowSkipped --- pkg/csv2lp/csv2lp_test.go | 54 +++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/pkg/csv2lp/csv2lp_test.go b/pkg/csv2lp/csv2lp_test.go index dfbc960f0c..4f091efb51 100644 --- a/pkg/csv2lp/csv2lp_test.go +++ b/pkg/csv2lp/csv2lp_test.go @@ -204,38 +204,66 @@ func Test_CsvToLineProtocol_SkipRowOnError(t *testing.T) { require.Equal(t, messages, 2) } -// Test_CsvToLineProtocol_RowSkipped tests that error rows are reported to configured RowSkippedListener +// Test_CsvToLineProtocol_RowSkipped tests that error rows are reported to configured RowSkipped listener func Test_CsvToLineProtocol_RowSkipped(t *testing.T) { var buf bytes.Buffer log.SetOutput(&buf) oldFlags := log.Flags() log.SetFlags(0) - oldPrefix := log.Prefix() - prefix := "::PREFIX::" - log.SetPrefix(prefix) defer func() { log.SetOutput(os.Stderr) log.SetFlags(oldFlags) - log.SetPrefix(oldPrefix) }() + type ActualArguments = struct { + src *CsvToLineReader + err error + row []string + } + type ExpectedArguments = struct { + errorString string + row []string + } + csv := "sep=;\n_measurement;a|long:strict\n;1\ncpu;2.1\ncpu;3a\n" + calledArgs := []ActualArguments{} + expectedArgs := []ExpectedArguments{ + { + "line 3: column '_measurement': no measurement supplied", + []string{"", "1"}, + }, + { + "line 4: column 'a': '2.1' cannot fit into long data type", + []string{"cpu", "2.1"}, + }, + { + "line 5: column 'a': strconv.ParseInt:", + []string{"cpu", "3a"}, + }, + } reader := CsvToLineProtocol(strings.NewReader(csv)).SkipRowOnError(true) reader.RowSkipped = func(src *CsvToLineReader, err error, _row []string) { - log.Println(err, string(src.Comma())) + // make a copy of _row + row := make([]string, len(_row)) + copy(row, _row) + // remember for comparison + calledArgs = append(calledArgs, ActualArguments{ + src, err, row, + }) } // read all the data ioutil.ReadAll(reader) out := buf.String() - // fmt.Println(out, string(';')) - // ::PREFIX::line 3: column '_measurement': no measurement supplied - // ::PREFIX::line 4: column 'a': '2.1' cannot fit into long data type - // ::PREFIX::line 5: column 'a': strconv.ParseInt: parsing "3a": invalid syntax - messages := strings.Count(out, prefix) - require.Equal(t, 3, messages) - require.Equal(t, 3, strings.Count(out, ";")) + require.Empty(t, out, "No log messages expected because RowSkipped handler is set") + + require.Len(t, calledArgs, 3) + for i, expected := range expectedArgs { + require.Equal(t, reader, calledArgs[i].src) + require.Contains(t, calledArgs[i].err.Error(), expected.errorString) + require.Equal(t, expected.row, calledArgs[i].row) + } } // Test_CsvLineError tests CsvLineError error format