Testing the Agent Core - hilbix/netdata GitHub Wiki
Testing the Core.
A large part of the Netdata Agent Core is not testable, i.e. was never written with testability in mind. There are, however, some parts that are testable, in that they don't have many dependencies on other modules (they are self-contained) and testing them is a straightforward matter. The following page identifies some modules that are particularly easy (or are deemed suitable) for testing, based on their dependencies, whether they've been problematic, whether they have possibly concurrency issues, or whether we intend to extend or replace them etc.
libnetdata
module | action |
---|---|
adaptive_resortable_list | ok to test. |
simple_pattern | investigate |
url | ignore |
socket | ignore, need system call mocking |
buffer | low performance code, we need to test for performance too |
config | probably should test |
avl | no evidence of a bug, won't change it, might be good to test |
dictionary | probably test |
eval | had some problems, should be tested |
health | should be tested |
json | bigger problem, no tests for this. |
locks | replace with libuv. wrapper keeps refcount for debugging race conditions. |
log | had some problems with logs. let's write tests, but concurrency is hard. also: stress testing. see if we can replace it. |
popen | test or replace |
procfile | had some issues with procfile. this is more than proc. we need to test this. |
statistical | we need to test this |
storage_number | move the tests from unit_test.c to something else. |
string | ignore |
threads | replace this libuv threads. |
Additional comments:
Within libnetdata
the following tasks directly affect testability and/or {stability, maintainability} of the code.
- Unify use of json parsing/processing across the netdata daemon
- Getting rid of useless
#ifdefs
- Get rid of thread cancellation because it's buggy.
- Create a mechanism to have our own reliable thread cancellation method.
Consider the testing framework and methodology of libuv as reference for our own testing.