1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
15 "github.com/sirupsen/logrus"
19 func Test(t *testing.T) {
23 var _ = Suite(&suite{})
27 func (s *suite) TestReadAllOrWarnFail(c *C) {
28 var logger bytes.Buffer
29 rep := Reporter{Logger: log.New(&logger, "", 0)}
31 // The special file /proc/self/mem can be opened for
32 // reading, but reading from byte 0 returns an error.
33 f, err := os.Open("/proc/self/mem")
36 _, err = rep.readAllOrWarn(f)
38 c.Check(logger.String(), Matches, "^warning: read /proc/self/mem: .*\n")
41 func (s *suite) TestReadAllOrWarnSuccess(c *C) {
42 var logbuf bytes.Buffer
43 rep := Reporter{Logger: log.New(&logbuf, "", 0)}
45 f, err := os.Open("./crunchstat_test.go")
48 data, err := rep.readAllOrWarn(f)
50 c.Check(string(data), Matches, "(?ms).*\npackage crunchstat\n.*")
51 c.Check(logbuf.String(), Equals, "")
54 func (s *suite) TestReportPIDs(c *C) {
55 var logbuf bytes.Buffer
56 logger := logrus.New()
60 CgroupRoot: "/sys/fs/cgroup",
61 PollPeriod: time.Second,
64 r.ReportPID("init", 1)
65 r.ReportPID("test_process", os.Getpid())
66 r.ReportPID("nonexistent", 12345) // should be silently ignored/omitted
67 for deadline := time.Now().Add(10 * time.Second); ; time.Sleep(time.Millisecond) {
68 if time.Now().After(deadline) {
72 if regexp.MustCompile(`(?ms).*procmem \d+ init \d+ test_process.*`).MatchString(logbuf.String()) {
76 c.Logf("%s", logbuf.String())