Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit d9dc296

Browse files
authored
Add AbstractTracerTest which tests the ContextTracer and ExtensionTracer (#77)
1 parent d6398bb commit d9dc296

3 files changed

Lines changed: 138 additions & 194 deletions

File tree

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?php
2+
/**
3+
* Copyright 2017 OpenCensus Authors
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
namespace OpenCensus\Tests\Unit\Trace\Tracer;
19+
20+
use OpenCensus\Trace\Span;
21+
use OpenCensus\Trace\SpanContext;
22+
23+
/**
24+
* @group trace
25+
*/
26+
abstract class AbstractTracerTest extends \PHPUnit_Framework_TestCase
27+
{
28+
abstract protected function getTracerClass();
29+
30+
public function testMaintainsContext()
31+
{
32+
$class = $this->getTracerClass();
33+
$parentSpanId = 12345;
34+
$initialContext = new SpanContext('traceid', $parentSpanId);
35+
$tracer = new $class($initialContext);
36+
$context = $tracer->spanContext();
37+
38+
$this->assertEquals('traceid', $context->traceId());
39+
$this->assertEquals($parentSpanId, $context->spanId());
40+
41+
$tracer->inSpan(['name' => 'test'], function () use ($parentSpanId, $tracer) {
42+
$context = $tracer->spanContext();
43+
$this->assertNotEquals($parentSpanId, $context->spanId());
44+
});
45+
46+
$spans = $tracer->spans();
47+
$this->assertCount(1, $spans);
48+
$span = $spans[0];
49+
$this->assertEquals('test', $span->name());
50+
$this->assertEquals($parentSpanId, $span->parentSpanId());
51+
}
52+
53+
public function testAddsAttributesToCurrentSpan()
54+
{
55+
$class = $this->getTracerClass();
56+
$tracer = new $class();
57+
$tracer->inSpan(['name' => 'root'], function () use ($tracer) {
58+
$tracer->inSpan(['name' => 'inner'], function () use ($tracer) {
59+
$tracer->addAttribute('foo', 'bar');
60+
});
61+
});
62+
63+
$spans = $tracer->spans();
64+
$this->assertCount(2, $spans);
65+
$span = $spans[1];
66+
$this->assertEquals('inner', $span->name());
67+
$attributes = $span->attributes();
68+
$this->assertArrayHasKey('foo', $attributes);
69+
$this->assertEquals('bar', $attributes['foo']);
70+
}
71+
72+
public function testAddsAttributesToRootSpan()
73+
{
74+
$class = $this->getTracerClass();
75+
$tracer = new $class();
76+
$tracer->inSpan(['name' => 'root'], function () use ($tracer) {
77+
$tracer->inSpan(['name' => 'inner'], function () use ($tracer) {
78+
$tracer->addRootAttribute('foo', 'bar');
79+
});
80+
});
81+
82+
$spans = $tracer->spans();
83+
$this->assertCount(2, $spans);
84+
$span = $spans[0];
85+
$this->assertEquals('root', $span->name());
86+
$attributes = $span->attributes();
87+
$this->assertArrayHasKey('foo', $attributes);
88+
$this->assertEquals('bar', $attributes['foo']);
89+
}
90+
91+
public function testPersistsBacktrace()
92+
{
93+
$class = $this->getTracerClass();
94+
$tracer = new $class();
95+
$tracer->inSpan(['name' => 'test'], function () {});
96+
$span = $tracer->spans()[0];
97+
$stackframe = $span->stackTrace()[0];
98+
$this->assertEquals('testPersistsBacktrace', $stackframe['function']);
99+
$this->assertEquals(self::class, $stackframe['class']);
100+
}
101+
102+
public function testWithSpan()
103+
{
104+
$span = new Span(['name' => 'foo']);
105+
$class = $this->getTracerClass();
106+
$tracer = new $class();
107+
108+
$this->assertNull($tracer->spanContext()->spanId());
109+
$scope = $tracer->withSpan($span);
110+
$this->assertEquals($span->spanId(), $tracer->spanContext()->spanId());
111+
$scope->close();
112+
$this->assertNull($tracer->spanContext()->spanId());
113+
}
114+
115+
public function testSetStartTime()
116+
{
117+
$time = microtime(true) - 10;
118+
$span = new Span(['name' => 'foo', 'startTime' => $time]);
119+
$class = $this->getTracerClass();
120+
$tracer = new $class();
121+
$scope = $tracer->withSpan($span);
122+
usleep(100);
123+
$scope->close();
124+
125+
$this->assertEquivalentTimestamps($span->startTime(), $tracer->spans()[0]->startTime());
126+
}
127+
128+
private function assertEquivalentTimestamps($expected, $value)
129+
{
130+
$this->assertEquals((float)($expected->format('U.u')), (float)($expected->format('U.u')), '', 0.000001);
131+
}
132+
}

tests/unit/Trace/Tracer/ContextTracerTest.php

Lines changed: 3 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -18,114 +18,20 @@
1818
namespace OpenCensus\Tests\Unit\Trace\Tracer;
1919

2020
use OpenCensus\Core\Context;
21-
use OpenCensus\Trace\Span;
22-
use OpenCensus\Trace\SpanContext;
2321
use OpenCensus\Trace\Tracer\ContextTracer;
2422

2523
/**
2624
* @group trace
2725
*/
28-
class ContextTracerTest extends \PHPUnit_Framework_TestCase
26+
class ContextTracerTest extends AbstractTracerTest
2927
{
3028
public function setUp()
3129
{
3230
Context::reset();
3331
}
3432

35-
public function testMaintainsContext()
33+
protected function getTracerClass()
3634
{
37-
$parentSpanId = 12345;
38-
$initialContext = new SpanContext('traceid', $parentSpanId);
39-
$tracer = new ContextTracer($initialContext);
40-
$context = $tracer->spanContext();
41-
42-
$this->assertEquals('traceid', $context->traceId());
43-
$this->assertEquals($parentSpanId, $context->spanId());
44-
45-
$tracer->inSpan(['name' => 'test'], function () use ($parentSpanId, $tracer) {
46-
$context = $tracer->spanContext();
47-
$this->assertNotEquals($parentSpanId, $context->spanId());
48-
});
49-
50-
$spans = $tracer->spans();
51-
$this->assertCount(1, $spans);
52-
$span = $spans[0];
53-
$this->assertEquals('test', $span->name());
54-
$this->assertEquals($parentSpanId, $span->parentSpanId());
55-
}
56-
57-
public function testAddsAttributesToCurrentSpan()
58-
{
59-
$tracer = new ContextTracer();
60-
$tracer->inSpan(['name' => 'root'], function () use ($tracer) {
61-
$tracer->inSpan(['name' => 'inner'], function () use ($tracer) {
62-
$tracer->addAttribute('foo', 'bar');
63-
});
64-
});
65-
66-
$spans = $tracer->spans();
67-
$this->assertCount(2, $spans);
68-
$span = $spans[1];
69-
$this->assertEquals('inner', $span->name());
70-
$attributes = $span->attributes();
71-
$this->assertArrayHasKey('foo', $attributes);
72-
$this->assertEquals('bar', $attributes['foo']);
73-
}
74-
75-
public function testAddsAttributesToRootSpan()
76-
{
77-
$tracer = new ContextTracer();
78-
$tracer->inSpan(['name' => 'root'], function () use ($tracer) {
79-
$tracer->inSpan(['name' => 'inner'], function () use ($tracer) {
80-
$tracer->addRootAttribute('foo', 'bar');
81-
});
82-
});
83-
84-
$spans = $tracer->spans();
85-
$this->assertCount(2, $spans);
86-
$span = $spans[0];
87-
$this->assertEquals('root', $span->name());
88-
$attributes = $span->attributes();
89-
$this->assertArrayHasKey('foo', $attributes);
90-
$this->assertEquals('bar', $attributes['foo']);
91-
}
92-
93-
public function testPersistsBacktrace()
94-
{
95-
$tracer = new ContextTracer();
96-
$tracer->inSpan(['name' => 'test'], function () {});
97-
$span = $tracer->spans()[0];
98-
$stackframe = $span->stackTrace()[0];
99-
$this->assertEquals('testPersistsBacktrace', $stackframe['function']);
100-
$this->assertEquals(self::class, $stackframe['class']);
101-
}
102-
103-
public function testWithSpan()
104-
{
105-
$span = new Span(['name' => 'foo']);
106-
$tracer = new ContextTracer();
107-
108-
$this->assertNull($tracer->spanContext()->spanId());
109-
$scope = $tracer->withSpan($span);
110-
$this->assertEquals($span->spanId(), $tracer->spanContext()->spanId());
111-
$scope->close();
112-
$this->assertNull($tracer->spanContext()->spanId());
113-
}
114-
115-
public function testSetStartTime()
116-
{
117-
$time = microtime(true) - 10;
118-
$span = new Span(['name' => 'foo', 'startTime' => $time]);
119-
$tracer = new ContextTracer();
120-
$scope = $tracer->withSpan($span);
121-
usleep(100);
122-
$scope->close();
123-
124-
$this->assertEquivalentTimestamps($span->startTime(), $tracer->spans()[0]->startTime());
125-
}
126-
127-
private function assertEquivalentTimestamps($expected, $value)
128-
{
129-
$this->assertEquals((float)($expected->format('U.u')), (float)($expected->format('U.u')), '', 0.000001);
35+
return ContextTracer::class;
13036
}
13137
}

tests/unit/Trace/Tracer/ExtentionTracerTest.php

Lines changed: 3 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@
1717

1818
namespace OpenCensus\Tests\Unit\Trace\Tracer;
1919

20-
use OpenCensus\Trace\Span;
21-
use OpenCensus\Trace\SpanContext;
2220
use OpenCensus\Trace\Tracer\ExtensionTracer;
2321

2422
/**
2523
* @group trace
2624
*/
27-
class ExtensionTracerTest extends \PHPUnit_Framework_TestCase
25+
class ExtensionTracerTest extends AbstractTracerTest
2826
{
2927
public function setUp()
3028
{
@@ -34,100 +32,8 @@ public function setUp()
3432
opencensus_trace_clear();
3533
}
3634

37-
public function testMaintainsContext()
35+
protected function getTracerClass()
3836
{
39-
$parentSpanId = 12345;
40-
$initialContext = new SpanContext('traceid', $parentSpanId);
41-
$tracer = new ExtensionTracer($initialContext);
42-
$context = $tracer->spanContext();
43-
44-
$this->assertEquals('traceid', $context->traceId());
45-
$this->assertEquals($parentSpanId, $context->spanId());
46-
47-
$tracer->inSpan(['name' => 'test'], function () use ($tracer, $parentSpanId) {
48-
$context = $tracer->spanContext();
49-
$this->assertNotEquals($parentSpanId, $context->spanId());
50-
});
51-
52-
$spans = $tracer->spans();
53-
$this->assertCount(1, $spans);
54-
$span = $spans[0];
55-
$this->assertEquals('test', $span->name());
56-
$this->assertEquals($parentSpanId, $span->parentSpanId());
57-
}
58-
59-
public function testAddsAttributesToCurrentSpan()
60-
{
61-
$tracer = new ExtensionTracer();
62-
$tracer->inSpan(['name' => 'root'], function () use ($tracer) {
63-
$tracer->inSpan(['name' => 'inner'], function () use ($tracer) {
64-
$tracer->addAttribute('foo', 'bar');
65-
});
66-
});
67-
68-
$spans = $tracer->spans();
69-
$this->assertCount(2, $spans);
70-
$span = $spans[1];
71-
$this->assertEquals('inner', $span->name());
72-
$attributes = $span->attributes();
73-
$this->assertArrayHasKey('foo', $attributes);
74-
$this->assertEquals('bar', $attributes['foo']);
75-
}
76-
77-
public function testAddsAttributesToRootSpan()
78-
{
79-
$tracer = new ExtensionTracer();
80-
$tracer->inSpan(['name' => 'root'], function () use ($tracer) {
81-
$tracer->inSpan(['name' => 'inner'], function () use ($tracer) {
82-
$tracer->addRootAttribute('foo', 'bar');
83-
});
84-
});
85-
86-
$spans = $tracer->spans();
87-
$this->assertCount(2, $spans);
88-
$span = $spans[0];
89-
$this->assertEquals('root', $span->name());
90-
$attributes = $span->attributes();
91-
$this->assertArrayHasKey('foo', $attributes);
92-
$this->assertEquals('bar', $attributes['foo']);
93-
}
94-
95-
public function testPersistsBacktrace()
96-
{
97-
$tracer = new ExtensionTracer();
98-
$tracer->inSpan(['name' => 'test'], function () {});
99-
$span = $tracer->spans()[0];
100-
$stackframe = $span->stackTrace()[0];
101-
$this->assertEquals('testPersistsBacktrace', $stackframe['function']);
102-
$this->assertEquals(self::class, $stackframe['class']);
103-
}
104-
105-
public function testWithSpan()
106-
{
107-
$span = new Span(['name' => 'foo']);
108-
$tracer = new ExtensionTracer();
109-
110-
$this->assertNull($tracer->spanContext()->spanId());
111-
$scope = $tracer->withSpan($span);
112-
$this->assertEquals($span->spanId(), $tracer->spanContext()->spanId());
113-
$scope->close();
114-
$this->assertNull($tracer->spanContext()->spanId());
115-
}
116-
117-
public function testSetStartTime()
118-
{
119-
$time = microtime(true) - 10;
120-
$span = new Span(['name' => 'foo', 'startTime' => $time]);
121-
$tracer = new ExtensionTracer();
122-
$scope = $tracer->withSpan($span);
123-
usleep(100);
124-
$scope->close();
125-
126-
$this->assertEquivalentTimestamps($span->startTime(), $tracer->spans()[0]->startTime());
127-
}
128-
129-
private function assertEquivalentTimestamps($expected, $value)
130-
{
131-
$this->assertEquals((float)($expected->format('U.u')), (float)($expected->format('U.u')), '', 0.000001);
37+
return ExtensionTracer::class;
13238
}
13339
}

0 commit comments

Comments
 (0)