ttrss/vendor/jonahgeorge/jaeger-client-php/tests/Jaeger/ConfigTest.php

258 lines
7.5 KiB
PHP

<?php
namespace Jaeger\Tests;
use Exception;
use Jaeger\Config;
use Jaeger\Reporter\ReporterInterface;
use Jaeger\Sampler\SamplerInterface;
use Jaeger\Tracer;
use OpenTracing\GlobalTracer;
use PHPUnit\Framework\TestCase;
use const Jaeger\SAMPLER_TYPE_CONST;
class ConfigTest extends TestCase
{
/**
* @var Config
*/
private $config;
/**
* @var ReporterInterface
*/
private $reporter;
/**
* @var SamplerInterface
*/
private $sampler;
/**
* @var string
*/
private $serviceName = 'test-service';
function setUp(): void
{
$this->config = new Config([], $this->serviceName);
$this->reporter = $this->createMock(ReporterInterface::class);
$this->sampler = $this->createmock(SamplerInterface::class);
}
function testCreateTracer()
{
$tracer = $this->config->createTracer($this->reporter, $this->sampler);
$this->assertEquals(Tracer::class, get_class($tracer));
$this->assertEquals($this->serviceName, $tracer->getServiceName());
}
function testThrowExceptionWhenServiceNameIsNotDefined()
{
$this->expectException(Exception::class);
$this->expectExceptionMessage('service_name required in the config or param.');
new Config([]);
}
function testSetServiceNameFromConfig()
{
$config = new Config(['service_name' => 'test-service-name-from-config']);
$serviceName = $config->getServiceName();
$this->assertEquals('test-service-name-from-config', $serviceName);
}
/**
* @test
*/
public function shouldSetGlobalTracerAfterInitialize()
{
//given
$config = new Config(['service_name' => 'test-service-name']);
//when
$config->initializeTracer();
//then
$tracer = GlobalTracer::get();
$this->assertInstanceOf(Tracer::class, $tracer);
}
/** @test */
public function shouldThrowExceptionWhenCreatingNotSupportedSampler()
{
$config = new Config(['service_name' => 'test-service-name', 'sampler' => ['type' => 'unsupportedSampler']]);
$this->expectException(Exception::class);
$this->expectExceptionMessage('Unknown sampler type unsupportedSampler');
$config->initializeTracer();
}
/** @test */
public function shouldThrowExceptionWhenCreatingRateLimitingSamplerWithoutCacheComponent()
{
$config = new Config([
'service_name' => 'test-service-name',
'sampler' => ['type' => \Jaeger\SAMPLER_TYPE_RATE_LIMITING]
]);
$this->expectException(Exception::class);
$this->expectExceptionMessage('You cannot use RateLimitingSampler without cache component');
$config->initializeTracer();
}
/** @test */
public function shouldPassDifferentDispatchMode() {
foreach (Config::getAvailableDispatchModes() as $dispatchMode) {
$config = new Config(
[
'sampler' => [
'type' => SAMPLER_TYPE_CONST,
'param' => true,
],
'logging' => false,
"local_agent" => [
"reporting_host" => "localhost",
],
'dispatch_mode' => $dispatchMode,
],
'your-app-name'
);
$config->initializeTracer();
$this->expectNotToPerformAssertions();
}
}
/** @test */
public function shouldPassConfiguredTagsToTracer()
{
$tags = [
'bar' => 'a-value',
'other.tag' => 'foo',
];
$config = new Config([
'sampler' => [
'type' => SAMPLER_TYPE_CONST,
'param' => true,
],
'service_name' => 'test-service-name',
'tags' => $tags,
]);
$tracer = $config->initializeTracer();
$span = $tracer->startSpan('test-span');
$spanTags = $span->getTags();
foreach ($tags as $name => $value) {
$this->assertArrayHasKey($name, $spanTags, "Tag '$name' should be set on span");
$this->assertEquals($value, $spanTags[$name]->value, "Tag '$name' should have configured value");
}
}
/**
* @test
* @dataProvider shouldSetConfigPropertiesFromEnvVarsProvider
*/
public function shouldSetConfigPropertiesFromEnvVars($varName, $varVal, $initialConfig, $valueGetter, $expectedVal)
{
$_ENV[$varName] = $varVal;
$config = new Config([]);
$configProperty = (new \ReflectionObject($config))->getProperty('config');
$configProperty->setAccessible('true');
$configArray = $configProperty->getValue($config);
$this->assertSame($expectedVal, $valueGetter($configArray));
}
/**
* @test
* @dataProvider shouldSetConfigPropertiesFromEnvVarsProvider
*/
public function shouldNotSetConfigPropertiesFromEnvVars($varName, $varVal, $initialConfig, $valueGetter, $expectedVal)
{
$_ENV[$varName] = $varVal;
$config = new Config($initialConfig);
$configProperty = (new \ReflectionObject($config))->getProperty('config');
$configProperty->setAccessible('true');
$configArray = $configProperty->getValue($config);
$this->assertNotEquals($expectedVal, $valueGetter($configArray));
}
/**
* 0 -> varName
* 1 -> varVal
* 2 -> initialConfig
* 3 -> valueGetter
* 4 -> expectedVal
*/
public function shouldSetConfigPropertiesFromEnvVarsProvider() {
return [
[
'JAEGER_SERVICE_NAME',
'some-str',
['service_name' => 'some-other-str'],
function ($a) { return $a['service_name']; },
'some-str',
],
[
'JAEGER_TAGS',
'some-str',
['tags' => 'some-other-str'],
function ($a) { return $a['tags']; },
'some-str',
],
[
'JAEGER_AGENT_HOST',
'some-str',
['local_agent' => ['reporting_host' => 'some-other-str']],
function ($a) { return $a['local_agent']['reporting_host'];},
'some-str',
],
[
'JAEGER_AGENT_PORT',
'2222',
['local_agent' => ['reporting_port' => 1111]],
function ($a) { return $a['local_agent']['reporting_port']; },
2222,
],
[
'JAEGER_REPORTER_LOG_SPANS',
'true',
['logging' => false],
function ($a) { return $a['logging']; },
true,
],
[
'JAEGER_REPORTER_MAX_QUEUE_SIZE',
'2222',
['max_buffer_length' => 1111],
function ($a) { return $a['max_buffer_length']; },
2222,
],
[
'JAEGER_SAMPLER_TYPE',
'some-str',
['sampler' => ['type' => 'some-other-str']],
function ($a) { return $a['sampler']['type']; },
'some-str',
],
[
'JAEGER_SAMPLER_PARAM',
'some-str',
['sampler' => ['param' => 'some-other-str']],
function ($a) { return $a['sampler']['param']; },
'some-str',
],
];
}
}