1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
<?php
namespace MediaWiki\Tests\Unit\Http;
use MediaWiki\Http\Telemetry;
use MediaWikiUnitTestCase;
/**
* @covers \MediaWiki\Http\Telemetry
*/
class TelemetryTest extends MediaWikiUnitTestCase {
public function testItOverridesTheRequestIdWhenAsked() {
$newId = 'new_id';
$sut = new Telemetry( [ 'UNIQUE_ID' => 'test' ], false );
$sut->overrideRequestId( $newId );
$this->assertSame( $newId, $sut->getRequestId() );
}
public function testRegenerationProvidesNewId() {
$sut = new Telemetry( [], false );
$firstId = $sut->getRequestId();
$sut->regenerateRequestId();
$secondId = $sut->getRequestId();
$this->assertNotSame( $firstId, $secondId );
}
public function testItReturnsOpenTelemetryProperties() {
$sut = new Telemetry( [
'HTTP_TRACESTATE' => 'val1',
'HTTP_TRACEPARENT' => 'val2'
], true );
$this->assertSame( 'val1', $sut->getTracestate() );
$this->assertSame( 'val2', $sut->getTraceparent() );
}
public function testOpenTelemetryPropertiesAreSkippedWhenAllowExternalReqIDIsSetToFalse() {
$sut = new Telemetry( [
'HTTP_TRACESTATE' => 'val1',
'HTTP_TRACEPARENT' => 'val2'
], false );
$this->assertNull( $sut->getTracestate() );
$this->assertNull( $sut->getTraceparent() );
}
/**
* @dataProvider provideRequestHeaders
*/
public function testItHandlesRequestIdHeaders( $allowExternalReqId, $server, $expected ) {
$sut = new Telemetry( $server, $allowExternalReqId );
$this->assertSame( $expected, $sut->getRequestId() );
}
public function testItGeneratesRequestIdWhenHeadersNotPresentAndExternalReqIdIsSet() {
$sut = new Telemetry( [], true );
$this->assertNotEmpty( $sut->getRequestId() );
}
public function testItGeneratesRequestIdWhenHeadersNotPresentAndExternalReqIdIsNotSet() {
$sut = new Telemetry( [], false );
$this->assertNotEmpty( $sut->getRequestId() );
}
public function testGetRequestHeadersReturnsAllHeaders() {
$allSet = [ 'HTTP_TRACEPARENT' => 'value1', 'HTTP_TRACESTATE' => 'value2' ];
$sut = new Telemetry( $allSet, true );
$headers = $sut->getRequestHeaders();
$this->assertCount( 3, $headers );
$this->assertArrayHasKey( 'X-Request-Id', $headers );
$this->assertSame( 'value1', $headers['traceparent'] );
$this->assertSame( 'value2', $headers['tracestate'] );
}
public function testGetRequestHeadersDoesntReturnEmptyHeaders() {
$sut = new Telemetry( [], true );
$headers = $sut->getRequestHeaders();
$this->assertCount( 1, $headers );
$this->assertArrayHasKey( 'X-Request-Id', $headers );
}
public static function provideRequestHeaders() {
yield [
false,
[ 'UNIQUE_ID' => 'unique_hash' ],
'unique_hash'
];
yield [
false,
[
'HTTP_X_REQUEST_ID' => 'request_id',
'UNIQUE_ID' => 'unique_hash'
],
'unique_hash'
];
yield [
true,
[
'HTTP_X_REQUEST_ID' => 'request_id',
'UNIQUE_ID' => 'unique_hash'
],
'request_id'
];
yield [
true,
[
'UNIQUE_ID' => 'unique_hash'
],
'unique_hash'
];
}
}
|