X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/964ab3dd90ff1508efc0c77378cde2b3a4da1029..c4fa80c6ed2445e1e384455944eb6c4108906cad:/services/crunchstat/crunchstat_test.go diff --git a/services/crunchstat/crunchstat_test.go b/services/crunchstat/crunchstat_test.go index 48988a1367..e3c3a597ea 100644 --- a/services/crunchstat/crunchstat_test.go +++ b/services/crunchstat/crunchstat_test.go @@ -1,6 +1,8 @@ package main import ( + "bufio" + "io" "os" "regexp" "testing" @@ -48,3 +50,30 @@ func TestReadAllOrWarnSuccess(t *testing.T) { t.Fatalf("Expected channel to close, got %s", msg) } } + +// Test that if CopyPipeToChan reads a line longer than +// bufio.MaxScanTokenSize, it emits an error to the output channel. +func TestCopyPipeToChanLongLines(t *testing.T) { + logChan := make(chan string) + control := make(chan bool) + + pipeIn, pipeOut := io.Pipe() + go CopyPipeToChan(pipeIn, logChan, control) + + go func() { + long_line := make([]byte, bufio.MaxScanTokenSize+1) + for i := range long_line { + long_line[i] = byte('x') + } + pipeOut.Write(long_line) + }() + + // Expect error message from logChan. + + errmsg := <-logChan + if matched, err := regexp.MatchString("^crunchstat: line buffering error:.*token too long", errmsg); err != nil || !matched { + t.Fatalf("expected CopyPipeToChan error, got %s", errmsg) + } + + <-control +}