|
17 | 17 |
|
18 | 18 | namespace OpenCensus\Tests\Unit\Trace; |
19 | 19 |
|
| 20 | +require_once __DIR__ . '/mock_http_response_code.php'; |
| 21 | + |
20 | 22 | use OpenCensus\Trace\Annotation; |
21 | 23 | use OpenCensus\Trace\Link; |
22 | 24 | use OpenCensus\Trace\MessageEvent; |
23 | 25 | use OpenCensus\Trace\Span; |
24 | 26 | use OpenCensus\Trace\SpanContext; |
25 | 27 | use OpenCensus\Trace\SpanData; |
| 28 | +use OpenCensus\Trace\Status; |
26 | 29 | use OpenCensus\Trace\RequestHandler; |
27 | 30 | use OpenCensus\Trace\Exporter\ExporterInterface; |
28 | 31 | use OpenCensus\Trace\Sampler\SamplerInterface; |
29 | 32 | use OpenCensus\Trace\Tracer\NullTracer; |
30 | 33 | use OpenCensus\Trace\Propagator\HttpHeaderPropagator; |
| 34 | +use OpenCensus\Trace\MockHttpResponseCode; |
31 | 35 | use PHPUnit\Framework\TestCase; |
32 | 36 |
|
33 | 37 | /** |
@@ -663,4 +667,56 @@ public function testAddsMessageEventToSpecificDetachedSpan() |
663 | 667 | $this->assertEquals(123, $messageEvent->compressedSize()); |
664 | 668 | $this->assertEquals(234, $messageEvent->uncompressedSize()); |
665 | 669 | } |
| 670 | + |
| 671 | + public function testNoStatusOfRootSpanOnExitWithoutHttpResponse() |
| 672 | + { |
| 673 | + $this->sampler->shouldSample()->willReturn(true); |
| 674 | + $rt = new RequestHandler( |
| 675 | + $this->exporter->reveal(), |
| 676 | + $this->sampler->reveal(), |
| 677 | + new HttpHeaderPropagator(), |
| 678 | + [ |
| 679 | + 'skipReporting' => true |
| 680 | + ] |
| 681 | + ); |
| 682 | + MockHttpResponseCode::$status = false; |
| 683 | + $rt->onExit(); |
| 684 | + $spans = $rt->tracer()->spans(); |
| 685 | + $this->assertCount(1, $spans); |
| 686 | + $spanData = $spans[0]; |
| 687 | + $this->assertInstanceOf(SpanData::class, $spanData); |
| 688 | + $this->assertNotEmpty($spanData->endTime()); |
| 689 | + $this->assertEquals('main', $spanData->name()); |
| 690 | + $this->assertEquals([], $spanData->attributes()); |
| 691 | + $this->assertNull($spanData->status()); |
| 692 | + } |
| 693 | + |
| 694 | + public function testSetsStatusOfRootSpanOnExitWithHttpResponse() |
| 695 | + { |
| 696 | + $this->sampler->shouldSample()->willReturn(true); |
| 697 | + $rt = new RequestHandler( |
| 698 | + $this->exporter->reveal(), |
| 699 | + $this->sampler->reveal(), |
| 700 | + new HttpHeaderPropagator(), |
| 701 | + [ |
| 702 | + 'skipReporting' => true |
| 703 | + ] |
| 704 | + ); |
| 705 | + MockHttpResponseCode::$status = 200; |
| 706 | + $rt->onExit(); |
| 707 | + $spans = $rt->tracer()->spans(); |
| 708 | + $this->assertCount(1, $spans); |
| 709 | + $spanData = $spans[0]; |
| 710 | + $this->assertInstanceOf(SpanData::class, $spanData); |
| 711 | + $this->assertNotEmpty($spanData->endTime()); |
| 712 | + $this->assertEquals('main', $spanData->name()); |
| 713 | + $this->assertEquals([Span::ATTRIBUTE_STATUS_CODE => 200], $spanData->attributes()); |
| 714 | + |
| 715 | + if (extension_loaded('opencensus')) { |
| 716 | + $this->assertNull($spanData->status()); |
| 717 | + } else { |
| 718 | + $this->assertInstanceOf(Status::class, $spanData->status()); |
| 719 | + $this->assertEquals(200, $spanData->status()->code()); |
| 720 | + } |
| 721 | + } |
666 | 722 | } |
0 commit comments