19563: Clean up tests.
[arvados.git] / lib / crunchstat / crunchstat_test.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package crunchstat
6
7 import (
8         "bytes"
9         "log"
10         "os"
11         "regexp"
12         "testing"
13         "time"
14
15         "github.com/sirupsen/logrus"
16         . "gopkg.in/check.v1"
17 )
18
19 func Test(t *testing.T) {
20         TestingT(t)
21 }
22
23 var _ = Suite(&suite{})
24
25 type suite struct{}
26
27 func (s *suite) TestReadAllOrWarnFail(c *C) {
28         var logger bytes.Buffer
29         rep := Reporter{Logger: log.New(&logger, "", 0)}
30
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")
34         c.Assert(err, IsNil)
35         defer f.Close()
36         _, err = rep.readAllOrWarn(f)
37         c.Check(err, NotNil)
38         c.Check(logger.String(), Matches, "^warning: read /proc/self/mem: .*\n")
39 }
40
41 func (s *suite) TestReadAllOrWarnSuccess(c *C) {
42         var logbuf bytes.Buffer
43         rep := Reporter{Logger: log.New(&logbuf, "", 0)}
44
45         f, err := os.Open("./crunchstat_test.go")
46         c.Assert(err, IsNil)
47         defer f.Close()
48         data, err := rep.readAllOrWarn(f)
49         c.Check(err, IsNil)
50         c.Check(string(data), Matches, "(?ms).*\npackage crunchstat\n.*")
51         c.Check(logbuf.String(), Equals, "")
52 }
53
54 func (s *suite) TestReportPIDs(c *C) {
55         var logbuf bytes.Buffer
56         logger := logrus.New()
57         logger.Out = &logbuf
58         r := Reporter{
59                 Logger:     logger,
60                 CgroupRoot: "/sys/fs/cgroup",
61                 PollPeriod: time.Second,
62         }
63         r.Start()
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) {
69                         c.Error("timed out")
70                         break
71                 }
72                 if regexp.MustCompile(`(?ms).*procmem \d+ init \d+ test_process.*`).MatchString(logbuf.String()) {
73                         break
74                 }
75         }
76         c.Logf("%s", logbuf.String())
77 }