We should improve the overall test coverage present in NPD.
Currently, NPD's unit test coverage is 46.0% of 2299 statements. There are important packages, such as the custom plugin monitor, that have close to no test coverage at all.
Recent PRs such as #1322 and #1323 showed real headroom to make NPD faster and memory effecient, and more optimization work like that is worth pursuing. NPD also stands to benefit from agent-assisted development which can help us unlock more performance and reliability improvements over time. This type of work is only safe on top of reliable test infrastructure.
The table below are packages worth targeting in a first round of unit test improvement due to their importance in NPD workloads:
| Package |
Coverage |
Planned work |
pkg/exporters/k8sexporter |
0.0% |
export test with the fake problem client |
pkg/exporters/prometheusexporter |
0.0% |
export test |
pkg/custompluginmonitor |
0.8% |
table test for generateStatus |
pkg/healthchecker |
20.6% |
tests for getRepairFunc, getUptimeFunc, checkForPattern |
pkg/systemlogmonitor/logwatchers/journald |
23.2% |
tests for the watch loop |
pkg/systemstatsmonitor |
45.2% |
fixture test for the OS feature collector |
Every other measured package is in the collapsed table. A lot of the remaining 0% rows are thin wrappers, build-time metadata, or type declarations where a unit test would not help us much immediately.
Full package test coverage
| Package |
Coverage |
pkg/exporters/stackdriver/gce |
0.0% |
pkg/systemlogmonitor/logwatchers |
0.0% |
pkg/systemlogmonitor/logwatchers/testing |
0.0% |
pkg/version |
0.0% |
cmd/healthchecker |
0.0% |
cmd/logcounter |
0.0% |
cmd/logcounter/options |
0.0% |
pkg/exporters/stackdriver |
3.3% |
pkg/exporters/k8sexporter/problemclient |
5.4% |
pkg/problemdetector |
23.3% |
cmd/healthchecker/options |
26.5% |
cmd/nodeproblemdetector |
36.4% |
pkg/util/metrics |
44.2% |
pkg/problemdaemon |
45.0% |
pkg/systemlogmonitor |
52.2% |
cmd/options |
55.9% |
pkg/exporters |
56.2% |
pkg/logcounter |
57.9% |
pkg/util |
62.5% |
pkg/systemstatsmonitor/types |
67.6% |
pkg/util/metrics/system |
77.9% |
pkg/systemlogmonitor/logwatchers/filelog |
78.6% |
pkg/exporters/k8sexporter/condition |
78.9% |
pkg/systemlogmonitor/logwatchers/kmsg |
79.7% |
pkg/custompluginmonitor/plugin |
83.5% |
pkg/problemmetrics |
85.3% |
pkg/custompluginmonitor/types |
94.8% |
pkg/healthchecker/types |
95.6% |
pkg/exporters/stackdriver/config |
100.0% |
pkg/util/tomb |
100.0% |
pkg/types |
no tests |
pkg/systemlogmonitor/types |
no tests |
pkg/systemlogmonitor/logwatchers/types |
no tests |
pkg/logcounter/types |
no tests |
cmd/nodeproblemdetector/exporterplugins |
no tests |
cmd/nodeproblemdetector/problemdaemonplugins |
no tests |
The largest gaps exist in the custom plugin monitor, the current exporters, and the health checker, and we should target those first.
/sig node
/kind cleanup
We should improve the overall test coverage present in NPD.
Currently, NPD's unit test coverage is 46.0% of 2299 statements. There are important packages, such as the custom plugin monitor, that have close to no test coverage at all.
Recent PRs such as #1322 and #1323 showed real headroom to make NPD faster and memory effecient, and more optimization work like that is worth pursuing. NPD also stands to benefit from agent-assisted development which can help us unlock more performance and reliability improvements over time. This type of work is only safe on top of reliable test infrastructure.
The table below are packages worth targeting in a first round of unit test improvement due to their importance in NPD workloads:
pkg/exporters/k8sexporterpkg/exporters/prometheusexporterpkg/custompluginmonitorgenerateStatuspkg/healthcheckergetRepairFunc,getUptimeFunc,checkForPatternpkg/systemlogmonitor/logwatchers/journaldpkg/systemstatsmonitorEvery other measured package is in the collapsed table. A lot of the remaining 0% rows are thin wrappers, build-time metadata, or type declarations where a unit test would not help us much immediately.
Full package test coverage
pkg/exporters/stackdriver/gcepkg/systemlogmonitor/logwatcherspkg/systemlogmonitor/logwatchers/testingpkg/versioncmd/healthcheckercmd/logcountercmd/logcounter/optionspkg/exporters/stackdriverpkg/exporters/k8sexporter/problemclientpkg/problemdetectorcmd/healthchecker/optionscmd/nodeproblemdetectorpkg/util/metricspkg/problemdaemonpkg/systemlogmonitorcmd/optionspkg/exporterspkg/logcounterpkg/utilpkg/systemstatsmonitor/typespkg/util/metrics/systempkg/systemlogmonitor/logwatchers/filelogpkg/exporters/k8sexporter/conditionpkg/systemlogmonitor/logwatchers/kmsgpkg/custompluginmonitor/pluginpkg/problemmetricspkg/custompluginmonitor/typespkg/healthchecker/typespkg/exporters/stackdriver/configpkg/util/tombpkg/typespkg/systemlogmonitor/typespkg/systemlogmonitor/logwatchers/typespkg/logcounter/typescmd/nodeproblemdetector/exporterpluginscmd/nodeproblemdetector/problemdaemonpluginsThe largest gaps exist in the custom plugin monitor, the current exporters, and the health checker, and we should target those first.
/sig node
/kind cleanup