opentelemetry-php/tests/Integration/SDK/AlwaysOffSamplerTest.php

67 lines
2.2 KiB
PHP

<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Integration\SDK;
use OpenTelemetry\API\Trace as API;
use OpenTelemetry\API\Trace\NonRecordingSpan;
use OpenTelemetry\API\Trace\SpanContext;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Context\ContextInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOffSampler;
use OpenTelemetry\SDK\Trace\SamplingResult;
use PHPUnit\Framework\Attributes\CoversNothing;
use PHPUnit\Framework\TestCase;
#[CoversNothing]
class AlwaysOffSamplerTest extends TestCase
{
public function test_always_off_sampler(): void
{
$parentTraceState = $this->createMock(API\TraceStateInterface::class);
$sampler = new AlwaysOffSampler();
$decision = $sampler->shouldSample(
$this->createParentContext(true, false, $parentTraceState),
'4bf92f3577b34da6a3ce929d0e0e4736',
'test.opentelemetry.io',
API\SpanKind::KIND_INTERNAL,
Attributes::create([]),
[],
);
$this->assertEquals(SamplingResult::DROP, $decision->getDecision());
$this->assertEquals($parentTraceState, $decision->getTraceState());
}
public function test_always_off_sampler_description(): void
{
$sampler = new AlwaysOffSampler();
$this->assertEquals('AlwaysOffSampler', $sampler->getDescription());
}
private function createParentContext(bool $sampled, bool $isRemote, ?API\TraceStateInterface $traceState = null): ContextInterface
{
$traceFlag = $sampled ? API\TraceFlags::SAMPLED : API\TraceFlags::DEFAULT;
if ($isRemote) {
$spanContext = SpanContext::createFromRemoteParent(
'4bf92f3577b34da6a3ce929d0e0e4736',
'00f067aa0ba902b7',
$traceFlag,
$traceState
);
} else {
$spanContext = SpanContext::create(
'4bf92f3577b34da6a3ce929d0e0e4736',
'00f067aa0ba902b7',
$traceFlag,
$traceState
);
}
return Context::getRoot()->withContextValue(new NonRecordingSpan($spanContext));
}
}