File: TelemetryTest.php

package info (click to toggle)
mediawiki 1%3A1.43.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 417,464 kB
  • sloc: php: 1,062,949; javascript: 664,290; sql: 9,714; python: 5,458; xml: 3,489; sh: 1,131; makefile: 64
file content (117 lines) | stat: -rw-r--r-- 3,008 bytes parent folder | download
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'
		];
	}

}