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
|
<?php
namespace Wikimedia\Tests\Telemetry;
use MediaWikiUnitTestCase;
use Wikimedia\Assert\ParameterAssertionException;
use Wikimedia\Telemetry\ProbabilisticSampler;
use Wikimedia\Telemetry\SamplerInterface;
use Wikimedia\Telemetry\SpanContext;
/**
* @covers \Wikimedia\Telemetry\ProbabilisticSampler
*/
class ProbabilisticSamplerTest extends MediaWikiUnitTestCase {
private const DO_NOT_SAMPLE_SEED = 12;
private const SAMPLE_SEED = 5;
private SamplerInterface $sampler;
public function setUp(): void {
parent::setUp();
$this->sampler = new ProbabilisticSampler( 30 );
}
public function testShouldNotSampleSpanWithNoParentBasedOnChance(): void {
mt_srand( self::DO_NOT_SAMPLE_SEED );
$sampled = $this->sampler->shouldSample( null );
$this->assertFalse( $sampled );
}
public function testShouldSampleSpanWithNoParentBasedOnChance(): void {
mt_srand( self::SAMPLE_SEED );
$sampled = $this->sampler->shouldSample( null );
$this->assertTrue( $sampled );
}
public function testShouldSampleSpanWithParentBasedOnParentDecision(): void {
mt_srand( self::DO_NOT_SAMPLE_SEED );
$parentSpanContext = new SpanContext( '', '', null, '', true );
$sampled = $this->sampler->shouldSample( $parentSpanContext );
$this->assertTrue( $sampled );
}
public function testShouldNotSampleSpanWithParentBasedOnParentDecision(): void {
mt_srand( self::SAMPLE_SEED );
$parentSpanContext = new SpanContext( '', '', null, '', false );
$sampled = $this->sampler->shouldSample( $parentSpanContext );
$this->assertFalse( $sampled );
}
public function testShouldThrowOnInvalidPercentChance(): void {
$this->expectException( ParameterAssertionException::class );
$this->expectExceptionMessage( 'Bad value for parameter $percentChance: must be between 0 and 100 inclusive' );
new ProbabilisticSampler( 900 );
}
}
|