* test: add the PHP 8.1 unit-test harness
Same harness as #773 and #788, with gmp added to the image so the 64-bit
counter arithmetic can be tested exactly.
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* fix(thold): correct the counter delta and the percent denominator
A previous counter reading of exactly zero was treated as no reading at all,
so the first interval after a device reboot reported a rate of zero. The wrap
modulus was 2^32-1 and 2^64-1 rather than 2^32 and 2^64, losing one count per
wrap, and the 64-bit literal exceeded PHP_INT_MAX so it was parsed as a float
and lost about eleven bits before the subtraction.
The percent-of denominator was cast to int, so a denominator below one
truncated to zero and forced the result to zero, keeping any configured low
threshold in permanent breach.
Refs #785
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* fix(daemon): store the previous reading in oldvalue, not a timestamp
When a data source produced no sample this cycle the daemon wrote
$currenttime - $rrd_step into oldvalue, so the next poll computed a delta
against a Unix timestamp, took the overflow branch and fabricated a rate in
the billions. The non-daemon path already carries the previous oldvalue
forward; this matches it.
Refs #785
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* test: follow Cacti's test layout and composer scripts
Adopts the conventions from Cacti core: tests/bootstrap-unit.php, tests/Helpers
for the stubs, a phpunit.xml carrying error_reporting -1 and
CACTI_TEST_BOOTSTRAP, and composer lint / test / test:coverage scripts so CI
runs the same commands a developer does. The dev toolchain is Cacti's, pinned
to the same platform php 8.1.0.
Cacti core runs Pest and this suite does not, because pest ^2 does not resolve
on PHP 8.1 -- the platform Cacti's own composer.json pins. Releases up to
v2.36.0 conflict with phpunit 10.5.62 and later, every earlier 10.x release is
blocked by advisory PKSA-z3gr-8qht-p93v, and v2.36.1, which does resolve,
requires PHP 8.2. The stack installs on 8.2 and above; 8.1 is the floor this
plugin's CI matrix targets. The tests are written in the plain PHPUnit class
style that Cacti's tests/Pest.php explicitly supports, so they run unchanged
under Pest wherever it is installable.
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* ci: keep plugin PR integration checks on pinned Cacti
* fix(counter): handle non-integer 64-bit readings safely
* ci: bound package index refreshes
---------
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* ci: pin integration tests to Cacti 1.2.31
* Guard optional PHPStan configuration
* Guard optional Composer vendor binaries
* Skip unavailable Composer quality scripts
* ci: keep watching Cacti develop alongside the pinned release
Pinning the checkout makes the suite exercise the compatibility contract the
plugin declares, but it also means a regression in Cacti develop stops being
visible here. One advisory job restores that signal: it builds against develop
and is marked continue-on-error, so it reports without turning the plugin's own
pull requests red.
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* ci: address workflow review feedback
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* ci: run plugin tests with Cacti Pest
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
* test: pin Cacti harness expectations
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
---------
Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>