Merge remote-tracking branch 'origin/master' into 4084-log-pane-refresh
[arvados.git] / services / crunchstat / crunchstat_test.go
1 package main
2
3 import (
4         "os"
5         "regexp"
6         "testing"
7 )
8
9 func TestReadAllOrWarnFail(t *testing.T) {
10         logChan = make(chan string)
11         go func() {
12                 defer close(logChan)
13                 // The special file /proc/self/mem can be opened for
14                 // reading, but reading from byte 0 returns an error.
15                 f, err := os.Open("/proc/self/mem")
16                 if err != nil {
17                         t.Fatalf("Opening /proc/self/mem: %s", err)
18                 }
19                 if x, err := ReadAllOrWarn(f); err == nil {
20                         t.Fatalf("Expected error, got %v", x)
21                 }
22         }()
23         if _, ok := <-logChan; !ok {
24                 t.Fatalf("Expected error message about nonexistent file")
25         }
26         if msg, ok := <-logChan; ok {
27                 t.Fatalf("Expected channel to close, got %s", msg)
28         }
29 }
30
31 func TestReadAllOrWarnSuccess(t *testing.T) {
32         logChan = make(chan string)
33         go func() {
34                 defer close(logChan)
35                 f, err := os.Open("./crunchstat_test.go")
36                 if err != nil {
37                         t.Fatalf("Opening ./crunchstat_test.go: %s", err)
38                 }
39                 data, err := ReadAllOrWarn(f)
40                 if err != nil {
41                         t.Fatalf("got error %s", err)
42                 }
43                 if matched, err := regexp.MatchString("^package main\n", string(data)); err != nil || !matched {
44                         t.Fatalf("data failed regexp: %s", err)
45                 }
46         }()
47         if msg, ok := <-logChan; ok {
48                 t.Fatalf("Expected channel to close, got %s", msg)
49         }
50 }