10281: Update comment.
[arvados.git] / lib / crunchstat / crunchstat_test.go
1 package crunchstat
2
3 import (
4         "bufio"
5         "io"
6         "log"
7         "os"
8         "regexp"
9         "testing"
10 )
11
12 func bufLogger() (*log.Logger, *bufio.Reader) {
13         r, w := io.Pipe()
14         logger := log.New(w, "", 0)
15         return logger, bufio.NewReader(r)
16 }
17
18 func TestReadAllOrWarnFail(t *testing.T) {
19         logger, rcv := bufLogger()
20         rep := Reporter{Logger: logger}
21
22         done := make(chan bool)
23         var msg []byte
24         var err error
25         go func() {
26                 msg, err = rcv.ReadBytes('\n')
27                 close(done)
28         }()
29         {
30                 // The special file /proc/self/mem can be opened for
31                 // reading, but reading from byte 0 returns an error.
32                 f, err := os.Open("/proc/self/mem")
33                 if err != nil {
34                         t.Fatalf("Opening /proc/self/mem: %s", err)
35                 }
36                 if x, err := rep.readAllOrWarn(f); err == nil {
37                         t.Fatalf("Expected error, got %v", x)
38                 }
39         }
40         <-done
41         if err != nil {
42                 t.Fatal(err)
43         } else if matched, err := regexp.MatchString("^read /proc/self/mem: .*", string(msg)); err != nil || !matched {
44                 t.Fatalf("Expected error message about unreadable file, got \"%s\"", msg)
45         }
46 }
47
48 func TestReadAllOrWarnSuccess(t *testing.T) {
49         rep := Reporter{Logger: log.New(os.Stderr, "", 0)}
50
51         f, err := os.Open("./crunchstat_test.go")
52         if err != nil {
53                 t.Fatalf("Opening ./crunchstat_test.go: %s", err)
54         }
55         data, err := rep.readAllOrWarn(f)
56         if err != nil {
57                 t.Fatalf("got error %s", err)
58         }
59         if matched, err := regexp.MatchString("^package crunchstat\n", string(data)); err != nil || !matched {
60                 t.Fatalf("data failed regexp: err %v, matched %v", err, matched)
61         }
62 }