parent
273b0f2f94
commit
bb37d7e2f9
|
@ -0,0 +1,322 @@
|
||||||
|
<?php
|
||||||
|
/* Icinga Web 2 | (c) 2018 Icinga Development Team | GPLv2+ */
|
||||||
|
|
||||||
|
namespace Tests\Icinga\Module\Monitoring\Plugin;
|
||||||
|
|
||||||
|
use Icinga\Test\BaseTestCase;
|
||||||
|
use Icinga\Module\Monitoring\Plugin\ThresholdRange;
|
||||||
|
|
||||||
|
class ThresholdRangeTest extends BaseTestCase
|
||||||
|
{
|
||||||
|
public function testFromStringProperlyParsesDoubleExclusiveRanges()
|
||||||
|
{
|
||||||
|
$outside0And10 = ThresholdRange::fromString('10');
|
||||||
|
$this->assertEquals(
|
||||||
|
0,
|
||||||
|
$outside0And10->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify zero as default minimum for double exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$outside0And10->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit maximum for double exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertFalse(
|
||||||
|
$outside0And10->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies double exclusive ranges as inclusive'
|
||||||
|
);
|
||||||
|
|
||||||
|
$outside10And20 = ThresholdRange::fromString('10:20');
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$outside10And20->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit minimum for double exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
20,
|
||||||
|
$outside10And20->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify twenty as explicit maximum for double exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertFalse(
|
||||||
|
$outside10And20->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies double exclusive ranges as inclusive'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testFromStringProperlyParsesDoubleExclusiveRanges
|
||||||
|
*/
|
||||||
|
public function testContainsCorrectlyEvaluatesDoubleExclusiveRanges()
|
||||||
|
{
|
||||||
|
$outside0And10 = ThresholdRange::fromString('10');
|
||||||
|
$this->assertFalse(
|
||||||
|
$outside0And10->contains(-1),
|
||||||
|
'ThresholdRange::contains() identifies negative values as greater than or equal to zero'
|
||||||
|
);
|
||||||
|
$this->assertFalse(
|
||||||
|
$outside0And10->contains(11),
|
||||||
|
'ThresholdRange::contains() identifies eleven as smaller than or equal to ten'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$outside0And10->contains(10),
|
||||||
|
'ThresholdRange::contains() identifies 10 as outside the range 0..10'
|
||||||
|
);
|
||||||
|
|
||||||
|
$outside10And20 = ThresholdRange::fromString('10:20');
|
||||||
|
$this->assertFalse(
|
||||||
|
$outside10And20->contains(9),
|
||||||
|
'ThresholdRange::contains() identifies nine as greater than or equal to 10'
|
||||||
|
);
|
||||||
|
$this->assertFalse(
|
||||||
|
$outside10And20->contains(21),
|
||||||
|
'ThresholdRange::contains() identifies twenty-one as smaller than or equal to twenty'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$outside10And20->contains(20),
|
||||||
|
'ThresholdRange::contains() identifies 20 as outside the range 10..20'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFromStringProperlyParsesSingleExclusiveRanges()
|
||||||
|
{
|
||||||
|
$smallerThan10 = ThresholdRange::fromString('10:');
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$smallerThan10->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit minimum for single exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertNull(
|
||||||
|
$smallerThan10->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify infinity as default maximum for single exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertFalse(
|
||||||
|
$smallerThan10->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies single exclusive ranges as inclusive'
|
||||||
|
);
|
||||||
|
|
||||||
|
$greaterThan10 = ThresholdRange::fromString('~:10');
|
||||||
|
$this->assertNull(
|
||||||
|
$greaterThan10->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify infinity as explicit minimum for single exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$greaterThan10->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit maximum for single exclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertFalse(
|
||||||
|
$greaterThan10->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies single exclusive ranges as inclusive'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testFromStringProperlyParsesSingleExclusiveRanges
|
||||||
|
*/
|
||||||
|
public function testContainsCorrectlyEvaluatesSingleExclusiveRanges()
|
||||||
|
{
|
||||||
|
$smallerThan10 = ThresholdRange::fromString('10:');
|
||||||
|
$this->assertFalse(
|
||||||
|
$smallerThan10->contains(9),
|
||||||
|
'ThresholdRange::contains() identifies nine as greater than or equal to ten'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$smallerThan10->contains(PHP_INT_MAX),
|
||||||
|
'ThresholdRange::contains() identifies infinity as outside the range 10..~'
|
||||||
|
);
|
||||||
|
|
||||||
|
$greaterThan10 = ThresholdRange::fromString('~:10');
|
||||||
|
$this->assertFalse(
|
||||||
|
$greaterThan10->contains(11),
|
||||||
|
'ThresholdRange::contains() identifies eleven as smaller than or equal to ten'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$greaterThan10->contains(~PHP_INT_MAX),
|
||||||
|
'ThresholdRange::contains() identifies negative infinity as outside the range ~..10'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFromStringProperlyParsesInclusiveRanges()
|
||||||
|
{
|
||||||
|
$inside0And10 = ThresholdRange::fromString('@10');
|
||||||
|
$this->assertEquals(
|
||||||
|
0,
|
||||||
|
$inside0And10->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify zero as default minimum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$inside0And10->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit maximum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$inside0And10->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies inclusive ranges as double exclusive'
|
||||||
|
);
|
||||||
|
|
||||||
|
$inside10And20 = ThresholdRange::fromString('@10:20');
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$inside10And20->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit minimum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
20,
|
||||||
|
$inside10And20->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify twenty as explicit maximum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$inside10And20->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies inclusive ranges as double exclusive'
|
||||||
|
);
|
||||||
|
|
||||||
|
$greaterThan10 = ThresholdRange::fromString('@10:');
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$greaterThan10->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit minimum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertNull(
|
||||||
|
$greaterThan10->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify infinity as default maximum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$greaterThan10->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies inclusive ranges as single exclusive'
|
||||||
|
);
|
||||||
|
|
||||||
|
$smallerThan10 = ThresholdRange::fromString('@~:10');
|
||||||
|
$this->assertNull(
|
||||||
|
$smallerThan10->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify infinity as explicit minimum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
10,
|
||||||
|
$smallerThan10->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify ten as explicit maximum for inclusive ranges'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$smallerThan10->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies inclusive ranges as single exclusive'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testFromStringProperlyParsesInclusiveRanges
|
||||||
|
*/
|
||||||
|
public function testContainsCorrectlyEvaluatesInclusiveRanges()
|
||||||
|
{
|
||||||
|
$inside0And10 = ThresholdRange::fromString('@10');
|
||||||
|
$this->assertFalse(
|
||||||
|
$inside0And10->contains(10),
|
||||||
|
'ThresholdRange::contains() identifies ten as greater than ten'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$inside0And10->contains(11),
|
||||||
|
'ThresholdRange::contains() identifies eleven as smaller than or equal to ten'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$inside0And10->contains(-1),
|
||||||
|
'ThresholdRange::contains() identifies negative values as greater than or equal to zero'
|
||||||
|
);
|
||||||
|
|
||||||
|
$inside10And20 = ThresholdRange::fromString('@10:20');
|
||||||
|
$this->assertFalse(
|
||||||
|
$inside10And20->contains(20),
|
||||||
|
'ThresholdRange::contains() identifies twenty as greater than twenty'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$inside10And20->contains(21),
|
||||||
|
'ThresholdRange::contains() identifies twenty-one as smaller than or equal to twenty'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$inside10And20->contains(9),
|
||||||
|
'ThresholdRange::contains() identifies nine as greater than or equal to ten'
|
||||||
|
);
|
||||||
|
|
||||||
|
$greaterThan10 = ThresholdRange::fromString('@10:');
|
||||||
|
$this->assertFalse(
|
||||||
|
$greaterThan10->contains(PHP_INT_MAX),
|
||||||
|
'ThresholdRange::contains() identifies infinity as smaller than ten'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$greaterThan10->contains(9),
|
||||||
|
'ThresholdRange::contains() identifies nine as greater than or equal to ten'
|
||||||
|
);
|
||||||
|
|
||||||
|
$smallerThan10 = ThresholdRange::fromString('@~:10');
|
||||||
|
$this->assertFalse(
|
||||||
|
$smallerThan10->contains(~PHP_INT_MAX),
|
||||||
|
'ThresholdRange::contains() identifies negative infinity as greater than ten'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$smallerThan10->contains(11),
|
||||||
|
'ThresholdRange::contains() identifies eleven as smaller than or equal to ten'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFromStringProperlyParsesEmptyThresholds()
|
||||||
|
{
|
||||||
|
$emptyThreshold = ThresholdRange::fromString('');
|
||||||
|
$this->assertNull(
|
||||||
|
$emptyThreshold->getMin(),
|
||||||
|
'ThresholdRange::fromString() does not identify negative infinity as implicit minimum for empty strings'
|
||||||
|
);
|
||||||
|
$this->assertNull(
|
||||||
|
$emptyThreshold->getMax(),
|
||||||
|
'ThresholdRange::fromString() does not identify infinity as implicit maximum for empty strings'
|
||||||
|
);
|
||||||
|
$this->assertFalse(
|
||||||
|
$emptyThreshold->isInverted(),
|
||||||
|
'ThresholdRange::fromString() identifies empty strings as inclusive ranges rather than exclusive'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testFromStringProperlyParsesEmptyThresholds
|
||||||
|
*/
|
||||||
|
public function testContainsEvaluatesEverythingToTrueForEmptyThresholds()
|
||||||
|
{
|
||||||
|
$emptyThreshold = ThresholdRange::fromString('');
|
||||||
|
$this->assertTrue(
|
||||||
|
$emptyThreshold->contains(0),
|
||||||
|
'ThresholdRange::contains() does not identify zero as valid without any threshold'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$emptyThreshold->contains(10),
|
||||||
|
'ThresholdRange::contains() does not identify ten as valid without any threshold'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$emptyThreshold->contains(PHP_INT_MAX),
|
||||||
|
'ThresholdRange::contains() does not identify infinity as valid without any threshold'
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
$emptyThreshold->contains(~PHP_INT_MAX),
|
||||||
|
'ThresholdRange::contains() does not identify negative infinity as valid without any threshold'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidThresholdNotationsAreRenderedAsIs()
|
||||||
|
{
|
||||||
|
$this->assertEquals(
|
||||||
|
':',
|
||||||
|
(string) ThresholdRange::fromString(':')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'~:',
|
||||||
|
(string) ThresholdRange::fromString('~:')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'20:10',
|
||||||
|
(string) ThresholdRange::fromString('20:10')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'10@',
|
||||||
|
(string) ThresholdRange::fromString('10@')
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
'foo',
|
||||||
|
(string) ThresholdRange::fromString('foo')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue