opentelemetry-php/tests/Unit/SDK/Trace/TracerProviderFactoryTest.php

82 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Trace;
use AssertWell\PHPUnitGlobalState\EnvironmentVariables;
use OpenTelemetry\API\Behavior\Internal\Logging;
use OpenTelemetry\API\Behavior\Internal\LogWriter\LogWriterInterface;
use OpenTelemetry\API\Trace\NoopTracerProvider;
use OpenTelemetry\SDK\Trace\ExporterFactory;
use OpenTelemetry\SDK\Trace\SamplerFactory;
use OpenTelemetry\SDK\Trace\SpanProcessorFactory;
use OpenTelemetry\SDK\Trace\TracerProviderFactory;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
/**
* @covers \OpenTelemetry\SDK\Trace\TracerProviderFactory
*/
class TracerProviderFactoryTest extends TestCase
{
use EnvironmentVariables;
/** @var LogWriterInterface&MockObject $logWriter */
private LogWriterInterface $logWriter;
public function setUp(): void
{
$this->logWriter = $this->createMock(LogWriterInterface::class);
Logging::setLogWriter($this->logWriter);
}
public function tearDown(): void
{
Logging::reset();
$this->restoreEnvironmentVariables();
}
public function test_factory_creates_tracer(): void
{
$exporterFactory = $this->createMock(ExporterFactory::class);
$samplerFactory = $this->createMock(SamplerFactory::class);
$spanProcessorFactory = $this->createMock(SpanProcessorFactory::class);
$exporterFactory->expects($this->once())->method('create');
$samplerFactory->expects($this->once())->method('create');
$spanProcessorFactory->expects($this->once())->method('create');
$factory = new TracerProviderFactory($exporterFactory, $samplerFactory, $spanProcessorFactory);
$factory->create();
}
public function test_factory_logs_warnings_and_continues(): void
{
$exporterFactory = $this->createMock(ExporterFactory::class);
$samplerFactory = $this->createMock(SamplerFactory::class);
$spanProcessorFactory = $this->createMock(SpanProcessorFactory::class);
$exporterFactory->expects($this->once())
->method('create')
->willThrowException(new \InvalidArgumentException('foo'));
$samplerFactory->expects($this->once())
->method('create')
->willThrowException(new \InvalidArgumentException('foo'));
$spanProcessorFactory->expects($this->once())
->method('create')
->willThrowException(new \InvalidArgumentException('foo'));
$this->logWriter->expects($this->atLeast(3))->method('write');
$factory = new TracerProviderFactory($exporterFactory, $samplerFactory, $spanProcessorFactory);
$factory->create();
}
public function test_can_be_disabled(): void
{
$this->setEnvironmentVariable('OTEL_SDK_DISABLED', 'true');
$factory = new TracerProviderFactory();
$this->assertInstanceOf(NoopTracerProvider::class, $factory->create());
}
}