Skip to content

Commit 5898715

Browse files
committed
buncha tests
1 parent 4d9c5ec commit 5898715

36 files changed

Lines changed: 3043 additions & 0 deletions

src/Health/HealthCheck.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public function __construct(
5656
string $ServiceID = '',
5757
string $ServiceName = '',
5858
array $ServiceTags = [],
59+
string $Type = '',
5960
string $Namespace = '',
6061
string $Partition = '',
6162
int $ExposedPort = 0,
@@ -73,6 +74,7 @@ public function __construct(
7374
$this->ServiceID = $ServiceID;
7475
$this->ServiceName = $ServiceName;
7576
$this->setServiceTags(...$ServiceTags);
77+
$this->Type = $Type;
7678
$this->Namespace = $Namespace;
7779
$this->Partition = $Partition;
7880
$this->ExposedPort = $ExposedPort;
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DCarbone\PHPConsulAPITests\Unit\Coordinate;
6+
7+
use DCarbone\PHPConsulAPI\Coordinate\CoordinateConfig;
8+
use DCarbone\PHPConsulAPI\Metrics\Label;
9+
use PHPUnit\Framework\TestCase;
10+
11+
/**
12+
* @internal
13+
*/
14+
final class CoordinateConfigTest extends TestCase
15+
{
16+
public function testConstructorDefaults(): void
17+
{
18+
$c = new CoordinateConfig();
19+
self::assertSame(CoordinateConfig::DefaultDimensionality, $c->getDimensionality());
20+
self::assertSame(CoordinateConfig::DefaultVivaldiErrorMax, $c->getVivaldiErrorMax());
21+
self::assertSame(CoordinateConfig::DefaultVivaldiCE, $c->getVivaldiCE());
22+
self::assertSame(CoordinateConfig::DefaultVivaldiCC, $c->getVivaldiCC());
23+
self::assertSame(CoordinateConfig::DefaultAdjustmentWindowSize, $c->getAdjustmentWindowSize());
24+
self::assertSame(CoordinateConfig::DefaultHeightMin, $c->getHeightMin());
25+
self::assertSame(CoordinateConfig::DefaultLatencyFilterSize, $c->getLatencyFilterSize());
26+
self::assertSame(CoordinateConfig::DefaultGravityRho, $c->getGravityRho());
27+
self::assertSame([], $c->getMetricsLabels());
28+
}
29+
30+
public function testConstructorWithValues(): void
31+
{
32+
$label = new Label(Name: 'env', Value: 'test');
33+
$c = new CoordinateConfig(
34+
Dimensionality: 4,
35+
VivaldiErrorMax: 2.0,
36+
VivaldiCE: 0.5,
37+
VivaldiCC: 0.5,
38+
AdjustmentWindowSize: 10,
39+
HeightMin: 1.0e-5,
40+
LatencyFilterSize: 5,
41+
GravityRho: 100.0,
42+
MetricsLabels: [$label],
43+
);
44+
self::assertSame(4, $c->getDimensionality());
45+
self::assertSame(2.0, $c->getVivaldiErrorMax());
46+
self::assertSame(0.5, $c->getVivaldiCE());
47+
self::assertSame(0.5, $c->getVivaldiCC());
48+
self::assertSame(10, $c->getAdjustmentWindowSize());
49+
self::assertSame(1.0e-5, $c->getHeightMin());
50+
self::assertSame(5, $c->getLatencyFilterSize());
51+
self::assertSame(100.0, $c->getGravityRho());
52+
self::assertCount(1, $c->getMetricsLabels());
53+
self::assertSame('env', $c->getMetricsLabels()[0]->getName());
54+
}
55+
56+
public function testFluentSetters(): void
57+
{
58+
$c = new CoordinateConfig();
59+
$result = $c
60+
->setDimensionality(3)
61+
->setVivaldiErrorMax(1.0)
62+
->setVivaldiCE(0.1)
63+
->setVivaldiCC(0.2)
64+
->setAdjustmentWindowSize(15)
65+
->setHeightMin(5.0e-6)
66+
->setLatencyFilterSize(2)
67+
->setGravityRho(50.0)
68+
->setMetricsLabels(new Label(Name: 'k', Value: 'v'));
69+
self::assertSame($c, $result);
70+
self::assertSame(3, $c->getDimensionality());
71+
self::assertCount(1, $c->getMetricsLabels());
72+
}
73+
74+
public function testDeprecatedDefault(): void
75+
{
76+
$c = CoordinateConfig::Default();
77+
self::assertSame(CoordinateConfig::DefaultDimensionality, $c->getDimensionality());
78+
}
79+
80+
public function testJsonSerialize(): void
81+
{
82+
$c = new CoordinateConfig(Dimensionality: 4);
83+
$out = $c->jsonSerialize();
84+
self::assertInstanceOf(\stdClass::class, $out);
85+
self::assertSame(4, $out->Dimensionality);
86+
}
87+
88+
public function testJsonUnserialize(): void
89+
{
90+
$labelObj = new \stdClass();
91+
$labelObj->Name = 'test';
92+
$labelObj->Value = 'val';
93+
94+
$decoded = new \stdClass();
95+
$decoded->Dimensionality = 6;
96+
$decoded->VivaldiErrorMax = 1.0;
97+
$decoded->VivaldiCE = 0.3;
98+
$decoded->VivaldiCC = 0.4;
99+
$decoded->AdjustmentWindowSize = 25;
100+
$decoded->HeightMin = 2.0e-6;
101+
$decoded->LatencyFilterSize = 4;
102+
$decoded->GravityRho = 200.0;
103+
$decoded->MetricsLabels = [$labelObj];
104+
105+
$c = CoordinateConfig::jsonUnserialize($decoded);
106+
self::assertSame(6, $c->getDimensionality());
107+
self::assertSame(1.0, $c->getVivaldiErrorMax());
108+
self::assertCount(1, $c->getMetricsLabels());
109+
self::assertInstanceOf(Label::class, $c->getMetricsLabels()[0]);
110+
self::assertSame('test', $c->getMetricsLabels()[0]->getName());
111+
}
112+
113+
public function testJsonRoundTrip(): void
114+
{
115+
$original = new CoordinateConfig(Dimensionality: 5, VivaldiErrorMax: 2.5);
116+
$restored = CoordinateConfig::jsonUnserialize($original->jsonSerialize());
117+
self::assertSame($original->getDimensionality(), $restored->getDimensionality());
118+
self::assertSame($original->getVivaldiErrorMax(), $restored->getVivaldiErrorMax());
119+
}
120+
}
121+
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DCarbone\PHPConsulAPITests\Unit\Coordinate;
6+
7+
use DCarbone\PHPConsulAPI\Coordinate\Coordinate;
8+
use DCarbone\PHPConsulAPI\Coordinate\CoordinateDatacenterMap;
9+
use DCarbone\PHPConsulAPI\Coordinate\CoordinateEntry;
10+
use PHPUnit\Framework\TestCase;
11+
12+
/**
13+
* @internal
14+
*/
15+
final class CoordinateDatacenterMapTest extends TestCase
16+
{
17+
public function testConstructorDefaults(): void
18+
{
19+
$m = new CoordinateDatacenterMap();
20+
self::assertSame('', $m->getDatacenter());
21+
self::assertSame('', $m->getAreaID());
22+
self::assertSame([], $m->getCoordinates());
23+
}
24+
25+
public function testConstructorWithValues(): void
26+
{
27+
$entry = new CoordinateEntry(Node: 'n1', Coord: new Coordinate(Vec: [1.0]));
28+
$m = new CoordinateDatacenterMap(Datacenter: 'dc1', AreaID: 'area-1', Coordinates: [$entry]);
29+
self::assertSame('dc1', $m->getDatacenter());
30+
self::assertSame('area-1', $m->getAreaID());
31+
self::assertCount(1, $m->getCoordinates());
32+
self::assertSame('n1', $m->getCoordinates()[0]->getNode());
33+
}
34+
35+
public function testFluentSetters(): void
36+
{
37+
$m = new CoordinateDatacenterMap();
38+
$result = $m
39+
->setDatacenter('dc2')
40+
->setAreaID('a2')
41+
->setCoordinates(new CoordinateEntry(Node: 'n'));
42+
self::assertSame($m, $result);
43+
self::assertSame('dc2', $m->getDatacenter());
44+
self::assertSame('a2', $m->getAreaID());
45+
self::assertCount(1, $m->getCoordinates());
46+
}
47+
48+
public function testJsonSerialize(): void
49+
{
50+
$m = new CoordinateDatacenterMap(Datacenter: 'dc1', AreaID: 'area');
51+
$out = $m->jsonSerialize();
52+
self::assertInstanceOf(\stdClass::class, $out);
53+
self::assertSame('dc1', $out->Datacenter);
54+
self::assertSame('area', $out->AreaID);
55+
}
56+
57+
public function testJsonUnserialize(): void
58+
{
59+
$coordObj = new \stdClass();
60+
$coordObj->Vec = [0.5];
61+
$coordObj->Error = 0.0;
62+
$coordObj->Adjustment = 0.0;
63+
$coordObj->Height = 0.0;
64+
65+
$entryObj = new \stdClass();
66+
$entryObj->Node = 'json-n';
67+
$entryObj->Segment = '';
68+
$entryObj->Coord = $coordObj;
69+
70+
$decoded = new \stdClass();
71+
$decoded->Datacenter = 'dc-json';
72+
$decoded->AreaID = 'area-json';
73+
$decoded->Coordinates = [$entryObj];
74+
75+
$m = CoordinateDatacenterMap::jsonUnserialize($decoded);
76+
self::assertSame('dc-json', $m->getDatacenter());
77+
self::assertSame('area-json', $m->getAreaID());
78+
self::assertCount(1, $m->getCoordinates());
79+
self::assertInstanceOf(CoordinateEntry::class, $m->getCoordinates()[0]);
80+
self::assertSame('json-n', $m->getCoordinates()[0]->getNode());
81+
}
82+
83+
public function testJsonRoundTrip(): void
84+
{
85+
$original = new CoordinateDatacenterMap(Datacenter: 'dc1', AreaID: 'a1');
86+
$restored = CoordinateDatacenterMap::jsonUnserialize($original->jsonSerialize());
87+
self::assertSame($original->getDatacenter(), $restored->getDatacenter());
88+
self::assertSame($original->getAreaID(), $restored->getAreaID());
89+
}
90+
}
91+
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DCarbone\PHPConsulAPITests\Unit\Coordinate;
6+
7+
use DCarbone\PHPConsulAPI\Coordinate\Coordinate;
8+
use DCarbone\PHPConsulAPI\Coordinate\CoordinateEntry;
9+
use PHPUnit\Framework\TestCase;
10+
11+
/**
12+
* @internal
13+
*/
14+
final class CoordinateEntryTest extends TestCase
15+
{
16+
public function testConstructorDefaults(): void
17+
{
18+
$e = new CoordinateEntry();
19+
self::assertSame('', $e->getNode());
20+
self::assertSame('', $e->getSegment());
21+
self::assertSame('', $e->getPartition());
22+
self::assertNull($e->getCoord());
23+
}
24+
25+
public function testConstructorWithValues(): void
26+
{
27+
$coord = new Coordinate(Vec: [1.0, 2.0], Error: 0.1);
28+
$e = new CoordinateEntry(Node: 'node-1', Segment: 'seg', Partition: 'part', Coord: $coord);
29+
self::assertSame('node-1', $e->getNode());
30+
self::assertSame('seg', $e->getSegment());
31+
self::assertSame('part', $e->getPartition());
32+
self::assertNotNull($e->getCoord());
33+
self::assertSame([1.0, 2.0], $e->getCoord()->getVec());
34+
}
35+
36+
public function testFluentSetters(): void
37+
{
38+
$e = new CoordinateEntry();
39+
$coord = new Coordinate(Vec: [0.5]);
40+
$result = $e->setNode('n')->setSegment('s')->setPartition('p')->setCoord($coord);
41+
self::assertSame($e, $result);
42+
self::assertSame('n', $e->getNode());
43+
self::assertSame('s', $e->getSegment());
44+
self::assertSame('p', $e->getPartition());
45+
self::assertNotNull($e->getCoord());
46+
}
47+
48+
public function testJsonSerialize(): void
49+
{
50+
$e = new CoordinateEntry(Node: 'n1', Segment: 's1', Coord: new Coordinate(Vec: [1.0]));
51+
$out = $e->jsonSerialize();
52+
self::assertInstanceOf(\stdClass::class, $out);
53+
self::assertSame('n1', $out->Node);
54+
self::assertSame('s1', $out->Segment);
55+
self::assertObjectNotHasProperty('Partition', $out);
56+
}
57+
58+
public function testJsonSerializeIncludesNonEmptyPartition(): void
59+
{
60+
$e = new CoordinateEntry(Node: 'n1', Partition: 'p1');
61+
$out = $e->jsonSerialize();
62+
self::assertSame('p1', $out->Partition);
63+
}
64+
65+
public function testJsonUnserialize(): void
66+
{
67+
$coordObj = new \stdClass();
68+
$coordObj->Vec = [1.5, 2.5];
69+
$coordObj->Error = 0.3;
70+
$coordObj->Adjustment = 0.0;
71+
$coordObj->Height = 0.0;
72+
73+
$decoded = new \stdClass();
74+
$decoded->Node = 'json-node';
75+
$decoded->Segment = 'json-seg';
76+
$decoded->Partition = '';
77+
$decoded->Coord = $coordObj;
78+
79+
$e = CoordinateEntry::jsonUnserialize($decoded);
80+
self::assertSame('json-node', $e->getNode());
81+
self::assertSame('json-seg', $e->getSegment());
82+
self::assertNotNull($e->getCoord());
83+
self::assertSame([1.5, 2.5], $e->getCoord()->getVec());
84+
}
85+
86+
public function testJsonRoundTrip(): void
87+
{
88+
$original = new CoordinateEntry(Node: 'rt', Segment: 's', Coord: new Coordinate(Vec: [0.1, 0.2]));
89+
$json = json_encode($original);
90+
$decoded = json_decode($json, false);
91+
$restored = CoordinateEntry::jsonUnserialize($decoded);
92+
self::assertSame($original->getNode(), $restored->getNode());
93+
self::assertSame($original->getSegment(), $restored->getSegment());
94+
self::assertNotNull($restored->getCoord());
95+
self::assertSame($original->getCoord()->getVec(), $restored->getCoord()->getVec());
96+
}
97+
}
98+

0 commit comments

Comments
 (0)