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

Commit b94682d

Browse files
authored
Extension spans should always return arrays (#140)
* Extension spans should return arrays * OpenCensus\Trace\Ext\Span returns empty arrays if not set
1 parent da11ddb commit b94682d

File tree

3 files changed

+92
-1
lines changed

3 files changed

+92
-1
lines changed

ext/opencensus_trace_span.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,10 @@ static PHP_METHOD(OpenCensusTraceSpan, attributes) {
192192
}
193193

194194
val = zend_read_property(opencensus_trace_span_ce, getThis(), "attributes", sizeof("attributes") - 1, 1, &rv);
195+
if (ZVAL_IS_NULL(val)) {
196+
array_init(return_value);
197+
return;
198+
}
195199

196200
RETURN_ZVAL(val, 1, 0);
197201
}
@@ -209,6 +213,10 @@ static PHP_METHOD(OpenCensusTraceSpan, links) {
209213
}
210214

211215
val = zend_read_property(opencensus_trace_span_ce, getThis(), "links", sizeof("links") - 1, 1, &rv);
216+
if (ZVAL_IS_NULL(val)) {
217+
array_init(return_value);
218+
return;
219+
}
212220

213221
RETURN_ZVAL(val, 1, 0);
214222
}
@@ -226,6 +234,10 @@ static PHP_METHOD(OpenCensusTraceSpan, timeEvents) {
226234
}
227235

228236
val = zend_read_property(opencensus_trace_span_ce, getThis(), "timeEvents", sizeof("timeEvents") - 1, 1, &rv);
237+
if (ZVAL_IS_NULL(val)) {
238+
array_init(return_value);
239+
return;
240+
}
229241

230242
RETURN_ZVAL(val, 1, 0);
231243
}
@@ -277,6 +289,10 @@ static PHP_METHOD(OpenCensusTraceSpan, stackTrace) {
277289
}
278290

279291
val = zend_read_property(opencensus_trace_span_ce, getThis(), "stackTrace", sizeof("stackTrace") - 1, 1, &rv);
292+
if (ZVAL_IS_NULL(val)) {
293+
array_init(return_value);
294+
return;
295+
}
280296

281297
RETURN_ZVAL(val, 1, 0);
282298
}

ext/tests/span_class.phpt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,21 @@ echo "Span startTime: {$span->startTime()}\n";
2020

2121
echo "Span endTime: {$span->endTime()}\n";
2222

23+
var_dump(gettype($span->attributes()));
24+
25+
var_dump(gettype($span->stackTrace()));
26+
27+
var_dump(gettype($span->links()));
28+
29+
var_dump(gettype($span->timeEvents()));
2330

2431
?>
2532
--EXPECT--
2633
Span id: 1234
2734
Span name: foo
2835
Span startTime: 12345.1
2936
Span endTime: 23456.2
37+
string(5) "array"
38+
string(5) "array"
39+
string(5) "array"
40+
string(5) "array"

tests/unit/Trace/Tracer/AbstractTracerTest.php

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,72 @@ public function testInSpanSetsDefaultStartTime()
258258
$this->assertNotEquals(0, $span->startTime()->getTimestamp());
259259
}
260260

261+
public function testStackTraceShouldBeSet()
262+
{
263+
$class = $this->getTracerClass();
264+
$tracer = new $class();
265+
$tracer->inSpan(['name' => 'foo'], function () {
266+
// do nothing
267+
});
268+
269+
$spans = $tracer->spans();
270+
$this->assertCount(1, $spans);
271+
$span = $spans[0];
272+
273+
$this->assertInternalType('array', $span->stackTrace());
274+
$this->assertNotEmpty($span->stackTrace());
275+
}
276+
277+
public function testAttributesShouldBeSet()
278+
{
279+
$class = $this->getTracerClass();
280+
$tracer = new $class();
281+
$tracer->inSpan(['name' => 'foo'], function () {
282+
// do nothing
283+
});
284+
285+
$spans = $tracer->spans();
286+
$this->assertCount(1, $spans);
287+
$span = $spans[0];
288+
289+
$this->assertInternalType('array', $span->attributes());
290+
$this->assertEmpty($span->attributes());
291+
}
292+
293+
public function testLinksShouldBeSet()
294+
{
295+
$class = $this->getTracerClass();
296+
$tracer = new $class();
297+
$tracer->inSpan(['name' => 'foo'], function () {
298+
// do nothing
299+
});
300+
301+
$spans = $tracer->spans();
302+
$this->assertCount(1, $spans);
303+
$span = $spans[0];
304+
305+
$this->assertInternalType('array', $span->links());
306+
$this->assertEmpty($span->links());
307+
}
308+
309+
public function testTimeEventsShouldBeSet()
310+
{
311+
$class = $this->getTracerClass();
312+
$tracer = new $class();
313+
$tracer->inSpan(['name' => 'foo'], function () {
314+
// do nothing
315+
});
316+
317+
$spans = $tracer->spans();
318+
$this->assertCount(1, $spans);
319+
$span = $spans[0];
320+
321+
$this->assertInternalType('array', $span->timeEvents());
322+
$this->assertEmpty($span->timeEvents());
323+
}
324+
261325
private function assertEquivalentTimestamps($expected, $value)
262326
{
263-
$this->assertEquals((float)($expected->format('U.u')), (float)($expected->format('U.u')), '', 0.000001);
327+
$this->assertEquals((float)($expected->format('U.u')), (float)($value->format('U.u')), '', 0.000001);
264328
}
265329
}

0 commit comments

Comments
 (0)