MCPcopy
hub / github.com/prometheus/node_exporter / TestFileDescriptorLeak

Function TestFileDescriptorLeak

node_exporter_test.go:37–80  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

35)
36
37func TestFileDescriptorLeak(t *testing.T) {
38 if _, err := os.Stat(binary); err != nil {
39 t.Skipf("node_exporter binary not available, try to run `make build` first: %s", err)
40 }
41 fs, err := procfs.NewDefaultFS()
42 if err != nil {
43 t.Skipf("proc filesystem is not available, but currently required to read number of open file descriptors: %s", err)
44 }
45 if _, err := fs.Stat(); err != nil {
46 t.Errorf("unable to read process stats: %s", err)
47 }
48
49 exporter := exec.Command(binary, "--web.listen-address", address)
50 test := func(pid int) error {
51 if err := queryExporter(address); err != nil {
52 return err
53 }
54 proc, err := procfs.NewProc(pid)
55 if err != nil {
56 return err
57 }
58 fdsBefore, err := proc.FileDescriptors()
59 if err != nil {
60 return err
61 }
62 for range 5 {
63 if err := queryExporter(address); err != nil {
64 return err
65 }
66 }
67 fdsAfter, err := proc.FileDescriptors()
68 if err != nil {
69 return err
70 }
71 if want, have := len(fdsBefore), len(fdsAfter); want != have {
72 return fmt.Errorf("want %d open file descriptors after metrics scrape, have %d", want, have)
73 }
74 return nil
75 }
76
77 if err := runCommandAndTests(exporter, address, test); err != nil {
78 t.Error(err)
79 }
80}
81
82func TestHandlingOfDuplicatedMetrics(t *testing.T) {
83 if _, err := os.Stat(binary); err != nil {

Callers

nothing calls this directly

Calls 2

queryExporterFunction · 0.85
runCommandAndTestsFunction · 0.85

Tested by

no test coverage detected