func testReadLines(t *testing.T, inputLines [][]byte) { var inputStream []byte for _, line := range inputLines { inputStream = append(inputStream, line...) } // initialize reader buffer := bytes.NewBuffer(inputStream) codec, _ := encoding.Plain(buffer) reader, err := newLineReader(buffer, codec, buffer.Len()) if err != nil { t.Fatalf("Error initializing reader: %v", err) } // read lines var lines [][]byte for range inputLines { bytes, _, err := reader.next() if err != nil { t.Fatalf("failed to read all lines from test: %v", err) } lines = append(lines, bytes) } // validate for i := range inputLines { assert.Equal(t, len(inputLines[i]), len(lines[i])) assert.Equal(t, inputLines[i], lines[i]) } }
func TestReadLine(t *testing.T) { absPath, err := filepath.Abs("../tests/files/logs/") // All files starting with tmp are ignored logFile := absPath + "/tmp" + strconv.Itoa(rand.Int()) + ".log" assert.NotNil(t, absPath) assert.Nil(t, err) if err != nil { t.Fatalf("Error creating the absolute path: %s", absPath) } file, err := os.Create(logFile) defer file.Close() defer os.Remove(logFile) assert.Nil(t, err) assert.NotNil(t, file) firstLineString := "9Characte\n" secondLineString := "This is line 2\n" length, err := file.WriteString(firstLineString) assert.Nil(t, err) assert.NotNil(t, length) length, err = file.WriteString(secondLineString) assert.Nil(t, err) assert.NotNil(t, length) file.Sync() // Open file for reading readFile, err := os.Open(logFile) defer readFile.Close() assert.Nil(t, err) h := Harvester{} assert.NotNil(t, h) // Read only 10 bytes which is not the end of the file timedIn := newTimedReader(readFile) codec, _ := encoding.Plain(file) reader, _ := newLineReader(timedIn, codec, 100) // Read third line text, bytesread, isPartial, err := readLine(reader, &timedIn.lastReadTime, 0) assert.Equal(t, text, firstLineString[0:len(firstLineString)-1]) assert.Equal(t, bytesread, len(firstLineString)) assert.Nil(t, err) assert.False(t, isPartial) // read second line text, bytesread, isPartial, err = readLine(reader, &timedIn.lastReadTime, 0) assert.Equal(t, text, secondLineString[0:len(secondLineString)-1]) assert.Equal(t, bytesread, len(secondLineString)) assert.Nil(t, err) assert.False(t, isPartial) // Read third line, which doesn't exist text, bytesread, isPartial, err = readLine(reader, &timedIn.lastReadTime, 0) assert.Equal(t, "", text) assert.Equal(t, bytesread, 0) assert.Equal(t, err, io.EOF) assert.False(t, isPartial) }