ttrss/vendor/jonahgeorge/jaeger-client-php/tests/Jaeger/Mapper/SpanToJaegerMapperTest.php

170 lines
5.4 KiB
PHP

<?php
use Jaeger\Mapper\SpanToJaegerMapper;
use Jaeger\Reporter\NullReporter;
use Jaeger\Sampler\ConstSampler;
use Jaeger\Span;
use Jaeger\SpanContext;
use Jaeger\Thrift\TagType;
use Jaeger\Tracer;
use const Jaeger\SAMPLED_FLAG;
use const OpenTracing\Tags\COMPONENT;
use const OpenTracing\Tags\PEER_HOST_IPV4;
use const OpenTracing\Tags\PEER_PORT;
use const OpenTracing\Tags\PEER_SERVICE;
use const OpenTracing\Tags\SPAN_KIND;
use const OpenTracing\Tags\SPAN_KIND_RPC_CLIENT;
class SpanToJaegerMapperTest extends \PHPUnit\Framework\TestCase
{
private $serviceName = "test-service";
/**
* @var Tracer
*/
private $tracer;
/**
* @var SpanContext
*/
private $context;
/**
* {@inheritdoc}
*/
public function setUp(): void
{
$this->tracer = new Tracer($this->serviceName, new NullReporter, new ConstSampler);
$this->context = new SpanContext(0, 0, 0, SAMPLED_FLAG);
}
/**
* {@inheritdoc}
*/
protected function tearDown(): void
{
$this->tracer = null;
$this->context = null;
}
/** @test */
public function shouldProperlyInitializeAtConstructTime(): void
{
$span = new Span($this->context, $this->tracer, 'test-operation');
$span->setTags([
"tag-bool1" => true,
"tag-bool2" => false,
"tag-int" => 1234567,
"tag-float" => 1.23456,
"tag-string" => "hello-world"
]);
$mapper = new SpanToJaegerMapper();
$thriftSpan = $mapper->mapSpanToJaeger($span);
$index = 0;
$this->assertEquals($thriftSpan->tags[$index]->key, "component");
$this->assertEquals($thriftSpan->tags[$index]->vType, TagType::STRING);
$this->assertEquals($thriftSpan->tags[$index]->vStr, $this->serviceName);
$index++;
$this->assertEquals($thriftSpan->tags[$index]->key, "tag-bool1");
$this->assertEquals($thriftSpan->tags[$index]->vType, TagType::BOOL);
$this->assertEquals($thriftSpan->tags[$index]->vBool, true);
$index++;
$this->assertEquals($thriftSpan->tags[$index]->key, "tag-bool2");
$this->assertEquals($thriftSpan->tags[$index]->vType, TagType::BOOL);
$this->assertEquals($thriftSpan->tags[$index]->vBool, false);
$index++;
$this->assertEquals($thriftSpan->tags[$index]->key, "tag-int");
$this->assertEquals($thriftSpan->tags[$index]->vType, TagType::LONG);
$this->assertEquals($thriftSpan->tags[$index]->vLong, 1234567);
$index++;
$this->assertEquals($thriftSpan->tags[$index]->key, "tag-float");
$this->assertEquals($thriftSpan->tags[$index]->vType, TagType::DOUBLE);
$this->assertEquals($thriftSpan->tags[$index]->vDouble, 1.23456);
$index++;
$this->assertEquals($thriftSpan->tags[$index]->key, "tag-string");
$this->assertEquals($thriftSpan->tags[$index]->vType, TagType::STRING);
$this->assertEquals($thriftSpan->tags[$index]->vStr, "hello-world");
$index++;
}
/**
* @dataProvider specialTagProvider
* @param array<string, mixed> $tags
* @return void
*/
public function testSpecialTagsAreAdded(array $tags): void
{
$span = new Span($this->context, $this->tracer, 'test-operation');
$span->setTags($tags);
// The component tag is always added, even if it's not specified in tags
$expectedTagValues = array_merge([COMPONENT => $this->serviceName], $tags);
$mapper = new SpanToJaegerMapper();
$thriftSpan = $mapper->mapSpanToJaeger($span);
$foundTags = [];
foreach ($thriftSpan->tags as $tag) {
$foundTags[] = $tag->key;
switch ($tag->key) {
case PEER_SERVICE:
case PEER_HOST_IPV4:
case SPAN_KIND:
case COMPONENT:
$this->assertEquals(TagType::STRING, $tag->vType, 'Incorrect tag value type');
$this->assertEquals($expectedTagValues[$tag->key], $tag->vStr, 'Incorrect tag value');
break;
case PEER_PORT:
$this->assertEquals(TagType::LONG, $tag->vType, 'Incorrect tag value type');
$this->assertEquals($expectedTagValues[$tag->key], $tag->vLong, 'Incorrect tag value');
break;
}
}
$this->assertEqualsCanonicalizing(array_keys($expectedTagValues), $foundTags, 'Some of the tags are missing');
}
public function specialTagProvider(): array
{
return [
[
[
'bool_tag' => true,
PEER_SERVICE => 'my_service',
PEER_HOST_IPV4 => '127.0.0.1',
PEER_PORT => 443,
SPAN_KIND => SPAN_KIND_RPC_CLIENT,
COMPONENT => 'grpc',
],
],
[
[
'int_tag' => 5,
PEER_HOST_IPV4 => '192.168.0.1',
PEER_PORT => 80,
],
],
[
[
'string_tag' => 'testing-tag',
PEER_PORT => 80,
COMPONENT => 'grpc',
],
],
[
[
'string_tag' => 'testing-tag',
],
],
];
}
}