diff --git a/system/utils.go b/system/utils.go index f556b9f..94f00b5 100644 --- a/system/utils.go +++ b/system/utils.go @@ -22,7 +22,7 @@ var ( // The maximum size of the buffer used to send output over the console to // clients. Once this length is reached, the line will be truncated and sent // as is. -const maxBufferSize = 64 * 1024 +var maxBufferSize = 64 * 1024 // FirstNotEmpty returns the first string passed in that is not an empty value. func FirstNotEmpty(v ...string) string { diff --git a/system/utils_test.go b/system/utils_test.go new file mode 100644 index 0000000..b05019f --- /dev/null +++ b/system/utils_test.go @@ -0,0 +1,41 @@ +package system + +import ( + "strings" + "testing" + + . "github.com/franela/goblin" +) + +func TestScanReader(t *testing.T) { + g := Goblin(t) + + g.Describe("ScanReader", func() { + g.BeforeEach(func() { + maxBufferSize = 10 + }) + + g.It("should truncate and return long lines", func() { + reader := strings.NewReader("hello world this is a long line\nof text that should be truncated\nnot here\nbut definitely on this line") + + var lines []string + err := ScanReader(reader, func(line []byte) { + lines = append(lines, string(line)) + }) + + g.Assert(err).IsNil() + g.Assert(lines).Equal([]string{"hello worl", "of text th", "not here", "but defini"}) + }) + + g.It("should replace cariage returns with newlines", func() { + reader := strings.NewReader("test\rstring\r\nanother\rline\nhodor\r\r\rheld the door\nmaterial gourl\n") + var lines []string + err := ScanReader(reader, func(line []byte) { + lines = append(lines, string(line)) + }) + + g.Assert(err).IsNil() + g.Assert(lines).Equal([]string{"test\rstrin", "another\rli", "hodor\r\r\rhe", "material g"}) + }) + }) +}