X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/db4eb863a36acbacde64f7d356065b3b9cbfb342..37f07a3f9f202f66a88eb70dcd0002713889a9b0:/lib/crunchstat/crunchstat_test.go diff --git a/lib/crunchstat/crunchstat_test.go b/lib/crunchstat/crunchstat_test.go new file mode 100644 index 0000000000..864a3e3456 --- /dev/null +++ b/lib/crunchstat/crunchstat_test.go @@ -0,0 +1,59 @@ +package crunchstat + +import ( + "bufio" + "io" + "log" + "os" + "regexp" + "testing" +) + +func bufLogger() (*log.Logger, *bufio.Reader) { + r, w := io.Pipe() + logger := log.New(w, "", 0) + return logger, bufio.NewReader(r) +} + +func TestReadAllOrWarnFail(t *testing.T) { + logger, rcv := bufLogger() + rep := Reporter{Logger: logger} + + var msg []byte + var err error + go func() { + msg, err = rcv.ReadBytes('\n') + }() + { + // The special file /proc/self/mem can be opened for + // reading, but reading from byte 0 returns an error. + f, err := os.Open("/proc/self/mem") + if err != nil { + t.Fatalf("Opening /proc/self/mem: %s", err) + } + if x, err := rep.readAllOrWarn(f); err == nil { + t.Fatalf("Expected error, got %v", x) + } + } + if err != nil { + t.Fatal(err) + } else if matched, err := regexp.MatchString("^read /proc/self/mem: .*", string(msg)); err != nil || !matched { + t.Fatalf("Expected error message about unreadable file, got \"%s\"", msg) + } +} + +func TestReadAllOrWarnSuccess(t *testing.T) { + rep := Reporter{Logger: log.New(os.Stderr, "", 0)} + + f, err := os.Open("./crunchstat_test.go") + if err != nil { + t.Fatalf("Opening ./crunchstat_test.go: %s", err) + } + data, err := rep.readAllOrWarn(f) + if err != nil { + t.Fatalf("got error %s", err) + } + if matched, err := regexp.MatchString("^package crunchstat\n", string(data)); err != nil || !matched { + t.Fatalf("data failed regexp: err %v, matched %v", err, matched) + } +}