-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathnut-qa.html
446 lines (443 loc) · 15.4 KB
/
nut-qa.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Network UPS Tools - NUT Quality Assurance</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 10.2.0" />
<meta name="description" content="Power Devices support" />
<meta name="keywords" content="NUT, Network UPS Tools, Eaton, APC, Free Software, UPS, Uninterruptible Power Supplies, PDU, Power Distributions Units, Solar Controllers, power, power devices, control, monitor, Linux, Unix, Windows, Mac OS X" />
<meta name="format-detection" content="telephone=no" />
<link rel="stylesheet" href="css/xhtml11.css" type="text/css" />
<link rel="stylesheet" href="css/xhtml11-quirks.css" type="text/css" />
<link rel="stylesheet" href="css/web-layout.css" type="text/css" />
<link rel="shortcut icon" href="faviconut.ico" />
<link rel="icon" type="image/png" href="faviconut.png" />
<script type="text/javascript" src="./scripts/asciidoc.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
asciidoc.install();
/*]]>*/
</script>
<!--[if lte IE 7]>
<link rel="stylesheet" href="css/ie-overrides.css" type="text/css" />
<![endif]-->
<!--[if lte IE 6]>
<script type="text/javascript" src="./scripts/filter_png.js"></script>
<![endif]-->
</head>
<body>
<div id="layout-banner-box">
<div id="layout-banner">
<div id="layout-logo"><img src="images/nut-logo.png" alt="NUT logo" /></div>
<div id="layout-title">Network UPS Tools</div>
<div id="layout-description">Power Devices support</div>
</div>
</div>
<div id="layout-menu-box">
<ul id="layout-menu">
<li><a href="index.html">Home</a></li>
<li><a href="download.html">Download</a></li>
<li><a href="projects.html">Related projects</a></li>
<li><a href="stable-hcl.html">Compatibility</a></li>
<li><a href="features.html">Features</a></li>
<li><a href="documentation.html">Documentation</a></li>
<li><a href="support.html">Support</a></li>
<li>* <a href="https://alioth-lists.debian.net/pipermail/nut-upsuser/">NUT UPS User archive</a></li>
<li>* <a href="https://alioth-lists.debian.net/pipermail/nut-upsdev/">NUT UPS Dev archive</a></li>
<li>* <a href="https://github.com/networkupstools/nut/">GitHub</a>:<a
href="https://github.com/networkupstools/nut/issues">issues</a>,<a
href="https://github.com/networkupstools/nut/wiki">wiki</a>
and more</li>
<li><a href="/historic/index.html">Sub-sites for historic releases</a></li>
<li><a href="https://opencollective.com/networkupstools/">Sponsor NUT</a></li>
</ul>
<!-- div id="sponsor"><span>Hosted by<br/></span>
<a href="http://sponsor.com"><img src="images/sponsor-logo.png" alt="Sponsor" /></a>
</div -->
</div>
<div id="layout-content-box">
<div id="layout-content">
<div id="header">
<h1>NUT Quality Assurance</h1>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>Recognizing the critical nature of NUT, the NUT Quality Assurance (NQA) effort
has been established to improve NUT where necessary, and to maintain software
quality as high as it should be.</p></div>
<div class="paragraph"><p>NQA is present in many aspects and areas of NUT.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_documentation">Documentation</h2>
<div class="sectionbody">
<div class="paragraph"><p>The documentation toolchain uses
<a href="https://asciidoc.org/">AsciiDoc</a> to output both HTML pages and
manual pages (troff). This single point of control fills many gaps,
suppresses many redundancies, and optimizes documentation management in
general.</p></div>
<div class="ulist"><ul>
<li>
<p>
The NUT website and HTML documentation are tested for W3C XHTML 1.1 and CSS
compliance. This can be counter verified by clicking the W3C XHTML 1.1 and CSS
icons, at the bottom of each page.
</p>
</li>
</ul></div>
<div class="ulist"><ul>
<li>
<p>
Documentation source files are spell checked, using
<a href="http://aspell.net">Aspell</a>, both interactively (using
<em>make spellcheck-interactive</em>) and automatically in Buildbot (using
<em>make spellcheck</em>).
</p>
</li>
</ul></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<img src="./images/note.png" alt="Note" />
</td>
<td class="content">A NUT dictionary is also available (docs/nut.dict), providing a
glossary of terms related to power devices and management, as well as
partial terms, technical jargon and author names.</td>
</tr></table>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_source_code">Source code</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_use_of_standards">Use of standards</h3><div style="clear:left"></div>
<div class="paragraph"><p>NUT promotes and uses many standards, such as:</p></div>
<div class="ulist"><ul>
<li>
<p>
the variable names standard used in NUT,
</p>
</li>
<li>
<p>
the coding rules and best practices for developers,
</p>
</li>
<li>
<p>
the use of a software architecture limiting developments to the very minimum,
</p>
</li>
<li>
<p>
the use of standard Free and OpenSource Software components, like:
</p>
<div class="ulist"><ul>
<li>
<p>
the USB library,
</p>
</li>
<li>
<p>
the Net SNMP project,
</p>
</li>
<li>
<p>
the Neon library,
</p>
</li>
<li>
<p>
the OpenSSL library (to be replaced by NSS, which is more license compliant
with NUT and can be FIPS 140 certified),
</p>
</li>
<li>
<p>
the TCP Wrappers library.
</p>
</li>
</ul></div>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_qa_tools_and_metrics">QA tools and metrics</h3><div style="clear:left"></div>
<div class="paragraph"><p>NUT’s quality is constantly monitored using many tools, like:</p></div>
<div class="ulist"><ul>
<li>
<p>
a Revision Control System (<a href="https://github.com/networkupstools/nut">Git</a>) to
track development and ease regression fixes.
</p>
</li>
</ul></div>
<div class="ulist"><ul>
<li>
<p>
<a href="http://buildbot.networkupstools.org/public/nut/">Buildbot</a>
for older take on multi-platform builds, and the
</p>
</li>
<li>
<p>
new dedicated Jenkins incarnation of the NUT CI Farm with "legacy UI"
for <a href="https://ci.networkupstools.org/job/nut/job/nut/job/master/">main branch</a>
and <a href="https://ci.networkupstools.org/job/nut/job/nut/view/change-requests/">PRs</a>,
also accessible at the slower but slicker-looking Blue Ocean user interface for
<a href="https://ci.networkupstools.org/blue/organizations/jenkins/nut%2Fnut/activity/">activity</a>,
<a href="https://ci.networkupstools.org/blue/organizations/jenkins/nut%2Fnut/branches/">branches</a>
and <a href="https://ci.networkupstools.org/blue/organizations/jenkins/nut%2Fnut/pr/">PRs</a>,
are all used to automate the compile/test cycle, using numerous platforms,
target distributions, C/C++ revisions, compiler toolkits and make program
implementations. Any build failure is caught early, and fixed quickly.
Also we get to see if incoming pull requests (as well as Git branch HEADs)
do not have code (or recipe) that is instantly faulty and can not build on
one of the platforms we track even with relaxed warnings.
</p>
</li>
</ul></div>
<div class="ulist"><ul>
<li>
<p>
a project portal with trackers for bugs, feature request, patches and tasks
</p>
</li>
<li>
<p>
LGTM.COM automatically checking C/C++ and Python code
</p>
</li>
<li>
<p>
Static code analysis:
</p>
<div class="ulist"><ul>
<li>
<p>
<a href="https://scan.coverity.com/projects/networkupstools-nut">Coverity Scan overview of NUT</a>
</p>
</li>
<li>
<p>
status: <span class="image">
<img src="https://scan.coverity.com/projects/8829/badge.svg" alt="Coverity Scan Build Status" />
</span>
</p>
</li>
<li>
<p>
cppcheck as part of NUT CI farm builds and reports
</p>
</li>
</ul></div>
</li>
</ul></div>
<div class="paragraph"><p>NUT QA also relies on external tools and trackers, like:</p></div>
<div class="ulist"><ul>
<li>
<p>
Clang
</p>
</li>
<li>
<p>
the Debian QA tools, available through the <a href="https://tracker.debian.org/pkg/nut">NUT Package Tracking System</a>:
</p>
<div class="ulist"><ul>
<li>
<p>
Lintian general QA checks,
</p>
</li>
<li>
<p>
<a href="http://piuparts.debian.org/sid/source/n/nut.html">piuparts</a> automates
the installation, upgrade and removal testing processes.
</p>
</li>
</ul></div>
</li>
<li>
<p>
a runtime testing suite, which automates the inter-layer communication testing
(driver — upsd — upsmon / clients), that is part of Ubuntu.
<a href="https://git.launchpad.net/ubuntu/+source/nut/tree/debian/tests/test-nut.py">The NUT testing script</a>
is available in the <a href="https://code.edge.launchpad.net/qa-regression-testing">Ubuntu QA Regression Testing suite</a>.
</p>
<div class="paragraph"><p>It installs NUT packages, configures it with the dummy-ups driver, changes
a few data points and checks that these are well propagated with upsc.</p></div>
</li>
<li>
<p>
similar approach is explored in NIT (NUT Integration Testing) suite,
which is part of the codebase and automated with <code>make check-NIT</code>;
it can also be added to default <code>make check</code> activities by running
<code>configure --enable-check-NIT</code>
</p>
<div class="ulist"><ul>
<li>
<p>
Note that developers updating components which directly impact NIT runs
may benefit from <code>make check-NIT-devel</code> target, to rebuild the <code>upsd</code>,
<code>dummy-ups</code>, <code>cppnit</code> and other programs used in the test as they iterate.
</p>
</li>
</ul></div>
</li>
<li>
<p>
<a href="https://bugzilla.redhat.com/buglist.cgi?component=nut">Redhat / Fedora Bug tracker</a>
</p>
</li>
<li>
<p>
<a href="https://www.openhub.net/p/nut">Black Duck Open Hub</a> (formerly Ohloh.net)
provides metrics on NUT source code base and activity.
</p>
</li>
</ul></div>
</div>
<div class="sect2">
<h3 id="_runtime_quality">Runtime quality</h3><div style="clear:left"></div>
<div class="ulist"><ul>
<li>
<p>
NUT provides many <a href="user-manual.html#NUT_Security">security features</a> to
ensure a maximum runtime security level.
</p>
</li>
<li>
<p>
Packages use several <a href="http://wiki.debian.org/Hardening">Hardening methods</a>
to protect NUT binaries.
</p>
</li>
</ul></div>
</div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Version nut:v2.8.2.2393-2393+gb8894898e ddl:v2.8.2-20-gd0dc96d384 web:v2.8.2-248-gc32aafca-master<br />
Last updated 2025-03-15 20:09:24
</div>
<div id="footer-badges">
<a href="https://github.com/networkupstools/nut">
<img style="border:0;height:20"
src="https://img.shields.io/github/checks-status/networkupstools/nut/master"
alt="Latest GitHub checks status: master branch"/>
</a>
<!--
<a href="https://travis-ci.org/github/networkupstools/nut">
<img style="border:0;height:20"
src="https://api.travis-ci.org/networkupstools/nut.svg?branch=master"
alt="Latest Travis CI build status: master branch"/>
</a>
-->
<a href="https://ci.networkupstools.org/job/nut/job/nut/job/master/">
<img style="border:0;height:20"
src="https://ci.networkupstools.org/buildStatus/icon?job=nut%2Fnut%2Fmaster"
alt="Latest NUT CI build status: master branch"/>
</a>
<!-- MacOS, maybe later Windows builds: -->
<a href="https://app.circleci.com/pipelines/github/networkupstools">
<img style="border:0;height:20"
src="https://circleci.com/gh/networkupstools/nut/tree/master.svg?style=svg"
alt="Latest Circle CI build status: master branch"/>
</a>
<!-- Windows, maybe later MacOS builds: -->
<a href="https://ci.appveyor.com/project/nut-travis/nut/build/artifacts">
<img style="border:0;height:20"
src="https://ci.appveyor.com/api/projects/status/vrhkatid9hr7lq7r/branch/master?svg=true&failingText=Windows-FAIL&passingText=Windows-OK&pendingText-Windows-PENDING"
alt="Latest AppVeyor build status (NUT for Windows iterations)"/>
</a>
<!--
<a href="https://ci.networkupstools.org/job/nut/job/nut/job/fightwarn/">
<img style="border:0;height:20"
src="https://ci.networkupstools.org/buildStatus/icon?job=nut%2Fnut%2Ffightwarn&subject=Fightwarn%20Branch"
alt="Latest NUT CI build status: fightwarn branch"/>
</a>
-->
<!--
<a href="https://github.com/networkupstools/nut/releases">
<img style="border:0;height:20"
src="https://img.shields.io/github/v/release/networkupstools/nut"
alt="Latest GitHub drafted NUT source release"/>
</a>
-->
<a href="https://github.com/networkupstools/nut/releases">
<img style="border:0;height:20"
src="https://img.shields.io/github/v/tag/networkupstools/nut?sort=semver"
alt="Latest Git-tagged NUT source release"/>
</a>
<!-- Maintainer note: for the counter below to work, a git tag
is not sufficient -- a release must be drafted and published
at https://github.com/networkupstools/nut/releases
Counter URL may also be .../latest/BRANCHNAME -->
<a href="https://github.com/networkupstools/nut">
<img style="border:0;height:20"
src="https://img.shields.io/github/commits-since/networkupstools/nut/latest.svg"
alt="Commits on master branch since latest release on GitHub"/>
</a>
<!-- See also:
// https://web.archive.org/web/20200731075618/http://www.methods.co.nz/asciidoc/
// https://github.com/asciidoc-py/asciidoc-py
-->
<a href="https://asciidoc.org/">
<img style="border:0;width:88px;height:31px"
src="images/asciidoc.png"
alt="Powered by AsciiDoc"/>
</a>
<a href="https://validator.w3.org/check?uri=referer">
<img style="border:0;width:88px;height:31px"
src="https://www.w3.org/Icons/valid-xhtml11-blue"
alt="Valid XHTML 1.1"/>
</a>
<a href="https://jigsaw.w3.org/css-validator/check?uri=referer">
<img style="border:0;width:88px;height:31px"
src="https://jigsaw.w3.org/css-validator/images/vcss-blue"
alt="Valid CSS!"/>
</a>
<a href="https://www.gandi.net/">
<img style="border:0;height:38px;"
src="images/gandi-ar21.svg"
alt="DNS, redirection and related services Hoster"/>
</a>
<!--
// FH web site defunct since ~Apr 2024
<a href="https://fosshost.org/">
<img style="border:0;width:112px;height:38px;"
src="images/ci/fosshost.org_Host_Light_38px.png"
alt="Dedicated Hosting for NUT CI"/>
</a>
-->
<a href="https://www.digitalocean.com/?refcode=d2fbf2b9e082&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge">
<img style="border:0;height:38px;"
src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/PoweredByDO/DO_Powered_by_Badge_blue.svg"
alt="Dedicated Hosting for NUT CI"/>
</a>
</div>
</div>
</div>
</div>
<!-- Google Analytics integration -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-9664272-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>