![]() This PR was created to fix #3414, here I am completing the job initiated by Christopher, among the newest features that we are bring we have JSON inside the core - We are bringing to the core the capacity to work with JSON files, this is available either using the JSON-C library case it is present in the system or using JSMN library that was incorporated to our core. The preference is to have JSON-C, because it is a more complete library, but case the user does not have the library installed we are keeping the JSMN for we do not lose the feature. Health LIST - We are bringing more one command to the Health API, now with the LIST it is possible to get in JSON format the alarms active with Netdata. Health reorganized - Previously we had duplicated code in different files, this PR is fixing this (Thanks @cakrit !), the Health is now better organized. Removing memory leak - The first implementation of the json.c was creating SILENCERS without to link it in anywhere. Now it has been linked properly. Script updated - We are bringing some changes to the script that tests the Health. This PR also fixes the race condition created by the previous new position of the SILENCERS creation, I had to move it to daemon/main.c, because after various tests, it was confirmed that the error could happen in different parts of the code, case it was not initialized before the threads starts. Component Name health directory health-cmd Additional Information Fixes #6356 and #3414 |
||
---|---|---|
.. | ||
backends | ||
health_mgmtapi | ||
installer | ||
k6 | ||
node.d | ||
profile | ||
web | ||
lifecycle.bats | ||
Makefile.am | ||
README.md | ||
stress.sh | ||
updater_checks.bats | ||
updater_checks.sh |
Testing
This readme is a manual on how to get started with unit testing on javascript and nodejs
Original author: BrainDoctor (github), July 2017
Installation
Tested on Linux Mint 18.2 Sara (Ubuntu/debian derivative)
Make sure you are the user who is developer (permissions, except sudo ofc)
sudo apt-get install nodejs npm chromium-browser
cd /path/to/your/netdata
npm install
That should install the necessary node modules.
Other browsers work too (Chrome, Firefox). However, only the Chromium Browser 59 has been tested for headless unit testing.
Versions
The commands above leave me with the following versions (July 2017):
- nodejs: v4.2.6
- npm: 3.5.2
- chromium-browser: 59.0.3071.109
- WebStorm (optional): 2017.1.4
Configuration
NPM
The dependencies are installed in netdata/package.json
. If you install a new NPM module, it gets added here. Future developers just need to execute npm install
and every dep gets added automatically.
Karma
Karma configuration is in tests/web/karma.conf.js
. Documentation is provided via comments.
WebStorm
If you use the JetBrains WebStorm IDE, you can integrate the karma runtime.
for Karma (Client side testing)
Headless Chromium:
- Run > Edit Configurations
- "+" > Karma
-
- Name: Karma Headless Chromium
- Configuration file: /path/to/your/netdata/tests/web/karma.conf.js
- Browsers to start: ChromiumHeadless
- Node interpreter: /usr/bin/nodejs (MUST be absolute, NVM works too)
- Karma package: /path/to/your/netdata/node_modules/karma
GUI Chromium is similar:
- Run > Edit Configurations
- "+" > Karma
-
- Name: Karma Chromium
- Configuration file: /path/to/your/netdata/tests/web/karma.conf.js
- Browsers to start: Chromium
- Node interpreter: /usr/bin/nodejs (MUST be absolute, NVM works too)
- Karma package: /path/to/your/netdata/node_modules/karma
You may add other browsers too (comma separated). With the "Browsers to start" field you can override any settings in karma.conf.js.
Also it is recommended to install WebStorm IDE Extension/Addon to Chrome/Chromium for awesome debugging.
for node.d plugins (nodejs)
- Run > Edit Configurations
- "+" > Node.js
-
- Name: Node.d plugins
- Node interpreter: /usr/bin/nodejs (MUST be absolute, NVM works too)
- JavaScript file: node_modules/jasmine-node/bin/jasmine-node
- Application parameters: --captureExceptions tests/node.d
Running
In WebStorm
Karma
Just run the configured run configurations and they produce nice test trees:
node.js
From CLI
Karma
cd /path/to/your/netdata
nodejs ./node_modules/karma/bin/karma start tests/web/karma.conf.js --single-run=true --browsers=ChromiumHeadless
will start the karma server, start chromium in headless mode and exit.
If a test fails, it produces even a stack trace:
Node.d plugins
cd /path/to/your/netdata
nodejs node_modules/jasmine-node/bin/jasmine-node --captureExceptions tests/node.d
will run the tests in tests/node.d
and produce a stacktrace too on error:
Coverage
Karma
A nice HTML is produced from Karma which shows which code paths were executed. It is located somewhere in /path/to/your/netdata/coverage/
Node.d
Apparently, jasmine-node can produce a junit report with the --junitreport
flag. But that output was not very useful. Maybe it's configurable?
CI
The karma and node.d runners can be integrated in Travis (AFAIK), but that is outside my ability.
Note: Karma is for browser-testing. On a build server, no GUI or browser might by available, unless browsers support headless mode.