opentelemetry-php/tests/Unit/SDK/Logs/EventLoggerTest.php

104 lines
3.7 KiB
PHP

<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Logs;
use OpenTelemetry\API\Common\Time\Clock;
use OpenTelemetry\API\Common\Time\TestClock;
use OpenTelemetry\API\Logs\LoggerInterface;
use OpenTelemetry\API\Logs\LoggerProviderInterface;
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
/**
* @covers \OpenTelemetry\SDK\Logs\EventLogger
*/
class EventLoggerTest extends TestCase
{
private LoggerInterface&MockObject $logger;
private EventLoggerProvider $eventLoggerProvider;
private TestClock $clock;
public function setUp(): void
{
$this->clock = new TestClock();
Clock::setDefault($this->clock);
$this->logger = $this->createMock(LoggerInterface::class);
$loggerProvider = $this->createMock(LoggerProviderInterface::class);
$loggerProvider->method('getLogger')->willReturn($this->logger);
$this->eventLoggerProvider = new EventLoggerProvider($loggerProvider);
}
public function tearDown(): void
{
Clock::reset();
}
public function test_emit(): void
{
$this->logger->expects($this->once())->method('emit')->with($this->callback(function (LogRecord $logRecord) {
$expected = (new LogRecord('some.payload'))
->setSeverityNumber(Severity::ERROR)
->setTimestamp(123456)
->setContext(Context::getCurrent())
->setAttributes([
'event.name' => 'my.event',
'bar' => 'bar',
]);
$this->assertEquals($expected, $logRecord);
return true;
}));
$eventLogger = $this->eventLoggerProvider->getEventLogger('event.logger', '1.0', 'https://example.org/schema', ['foo' => 'foo']);
$eventLogger->emit('my.event', 'some.payload', 123456, severityNumber: Severity::ERROR, attributes: ['bar' => 'bar']);
}
public function test_default_values(): void
{
$this->logger->expects($this->once())->method('emit')->with($this->callback(function (LogRecord $logRecord) {
$expected = (new LogRecord())
->setSeverityNumber(Severity::INFO)
->setTimestamp($this->clock->now())
->setContext(Context::getCurrent())
->setAttributes([
'event.name' => 'my.event',
]);
$this->assertEquals($expected, $logRecord);
return true;
}));
$eventLogger = $this->eventLoggerProvider->getEventLogger('event.logger');
$eventLogger->emit('my.event');
}
/**
* "The user provided Attributes MUST not take over the event.name attribute"
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.32.0/specification/logs/event-sdk.md#emit-event
*/
public function test_event_name_attribute_is_ignored(): void
{
$this->logger->expects($this->once())->method('emit')->with($this->callback(function (LogRecord $logRecord) {
$expected = (new LogRecord())
->setSeverityNumber(Severity::INFO)
->setTimestamp($this->clock->now())
->setContext(Context::getCurrent())
->setAttributes([
'event.name' => 'my.event',
]);
$this->assertEquals($expected, $logRecord);
return true;
}));
$eventLogger = $this->eventLoggerProvider->getEventLogger('event.logger');
$eventLogger->emit('my.event', attributes: ['event.name' => 'not.my.event']);
}
}