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 := NewLine(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 codec, _ := encoding.Plain(file) readConfig := reader.LogFileReaderConfig{ CloseOlder: 500 * time.Millisecond, BackoffDuration: 100 * time.Millisecond, MaxBackoffDuration: 1 * time.Second, BackoffFactor: 2, } r, _ := createLineProcessor(source.File{readFile}, codec, 100, 1000, readConfig, nil, nil, nil) // Read third line _, text, bytesread, _, err := readLine(r) fmt.Printf("received line: '%s'\n", text) assert.Nil(t, err) assert.Equal(t, text, firstLineString[0:len(firstLineString)-1]) assert.Equal(t, bytesread, len(firstLineString)) // read second line _, text, bytesread, _, err = readLine(r) fmt.Printf("received line: '%s'\n", text) assert.Equal(t, text, secondLineString[0:len(secondLineString)-1]) assert.Equal(t, bytesread, len(secondLineString)) assert.Nil(t, err) // Read third line, which doesn't exist _, text, bytesread, _, err = readLine(r) fmt.Printf("received line: '%s'\n", text) assert.Equal(t, "", text) assert.Equal(t, bytesread, 0) assert.Equal(t, err, reader.ErrInactive) }
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, _ := encoding.NewLineReader(timedIn, codec, 100) // Read third line text, bytesread, err := readLine(reader, &timedIn.lastReadTime) assert.Nil(t, err) assert.Equal(t, text, firstLineString[0:len(firstLineString)-1]) assert.Equal(t, bytesread, len(firstLineString)) // read second line text, bytesread, err = readLine(reader, &timedIn.lastReadTime) assert.Equal(t, text, secondLineString[0:len(secondLineString)-1]) assert.Equal(t, bytesread, len(secondLineString)) assert.Nil(t, err) // Read third line, which doesn't exist text, bytesread, err = readLine(reader, &timedIn.lastReadTime) assert.Equal(t, "", text) assert.Equal(t, bytesread, 0) assert.Equal(t, err, io.EOF) }