|
| 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 | + |
0 commit comments