1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
17 "github.com/sirupsen/logrus"
21 func Test(t *testing.T) {
25 var _ = Suite(&suite{})
29 func bufLogger() (*log.Logger, *bufio.Reader) {
31 logger := log.New(w, "", 0)
32 return logger, bufio.NewReader(r)
35 func (s *suite) TestReadAllOrWarnFail(c *C) {
36 logger, rcv := bufLogger()
37 rep := Reporter{Logger: logger}
39 done := make(chan bool)
43 msg, err = rcv.ReadBytes('\n')
47 // The special file /proc/self/mem can be opened for
48 // reading, but reading from byte 0 returns an error.
49 f, err := os.Open("/proc/self/mem")
51 c.Fatalf("Opening /proc/self/mem: %s", err)
53 if x, err := rep.readAllOrWarn(f); err == nil {
54 c.Fatalf("Expected error, got %v", x)
60 } else if matched, err := regexp.MatchString("^warning: read /proc/self/mem: .*", string(msg)); err != nil || !matched {
61 c.Fatalf("Expected error message about unreadable file, got \"%s\"", msg)
65 func (s *suite) TestReadAllOrWarnSuccess(c *C) {
66 rep := Reporter{Logger: log.New(os.Stderr, "", 0)}
68 f, err := os.Open("./crunchstat_test.go")
70 c.Fatalf("Opening ./crunchstat_test.go: %s", err)
72 data, err := rep.readAllOrWarn(f)
74 c.Fatalf("got error %s", err)
76 if matched, err := regexp.MatchString("\npackage crunchstat\n", string(data)); err != nil || !matched {
77 c.Fatalf("data failed regexp: err %v, matched %v", err, matched)
81 func (s *suite) TestReportPIDs(c *C) {
82 var logbuf bytes.Buffer
83 logger := logrus.New()
87 CgroupRoot: "/sys/fs/cgroup",
88 PollPeriod: time.Second,
91 r.ReportPID("init", 1)
92 r.ReportPID("test_process", os.Getpid())
93 r.ReportPID("nonexistent", 12345) // should be silently ignored/omitted
94 for deadline := time.Now().Add(10 * time.Second); ; time.Sleep(time.Millisecond) {
95 if time.Now().After(deadline) {
99 if regexp.MustCompile(`(!?ms).*procmem \d+ init \d+ test_process.*`).MatchString(logbuf.String()) {
103 c.Logf("%s", logbuf.String())