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

Commit c8b4fc6

Browse files
jcchavezschingor13
authored andcommitted
Adds httptest for integration tests (#190)
* Convert Guzzle tests to use http test server to check request values * Updates httptest library and simplifies the tests.
1 parent 891b2af commit c8b4fc6

File tree

5 files changed

+151
-20
lines changed

5 files changed

+151
-20
lines changed

.circleci/config.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@ jobs:
207207
- run:
208208
name: Install pgsql extension
209209
command: sudo docker-php-ext-install pgsql
210+
- run:
211+
name: Install pcntl extension
212+
command: sudo docker-php-ext-install pcntl
210213
- run:
211214
name: Curl test
212215
command: tests/integration/curl/test.sh

tests/integration/guzzle5/composer.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
"ext-opencensus": "*"
77
},
88
"require-dev": {
9-
"phpunit/phpunit": "^7.0"
9+
"phpunit/phpunit": "^7.0",
10+
"jcchavezs/httptest": "~0.2"
1011
},
11-
"repositories": [
12-
{
12+
"repositories": {
13+
"opencensus": {
1314
"type": "git",
1415
"url": "https://github.com/census-instrumentation/opencensus-php"
1516
}
16-
]
17+
}
1718
}

tests/integration/guzzle5/tests/Guzzle5Test.php

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,94 @@
1818
namespace OpenCensus\Tests\Integration\Trace;
1919

2020
use GuzzleHttp\Client;
21+
use HttpTest\HttpTestServer;
2122
use OpenCensus\Trace\Tracer;
2223
use OpenCensus\Trace\Exporter\ExporterInterface;
2324
use OpenCensus\Trace\Integrations\Guzzle\EventSubscriber;
25+
use Psr\Http\Message\RequestInterface;
26+
use Psr\Http\Message\ResponseInterface;
2427
use PHPUnit\Framework\TestCase;
2528

2629
/**
2730
* @group trace
2831
*/
2932
class Guzzle5Test extends TestCase
3033
{
31-
public function testGuzzleRequest()
34+
private $client;
35+
36+
public function setUp()
3237
{
33-
$client = new Client();
38+
parent::setUp();
39+
$this->client = new Client();
3440
$subscriber = new EventSubscriber();
35-
$client->getEmitter()->attach($subscriber);
41+
$this->client->getEmitter()->attach($subscriber);
42+
if (extension_loaded('opencensus')) {
43+
opencensus_trace_clear();
44+
}
45+
}
46+
47+
public function testGuzzleRequest()
48+
{
49+
$server = HttpTestServer::create(
50+
function (RequestInterface $request, ResponseInterface &$response) {
51+
/* Assert the HTTP call includes the expected values */
52+
$this->assertEquals('GET', $request->getMethod());
53+
$response = $response->withStatus(200);
54+
}
55+
);
3656

37-
$url = 'http://www.google.com/';
3857
$exporter = $this->prophesize(ExporterInterface::class);
3958
$tracer = Tracer::start($exporter->reveal(), [
4059
'skipReporting' => true
4160
]);
42-
$response = $client->get($url);
61+
62+
$server->start();
63+
64+
$response = $this->client->get($server->getUrl());
4365
$this->assertEquals(200, $response->getStatusCode());
4466

67+
$server->stop();
68+
69+
$tracer->onExit();
70+
71+
$spans = $tracer->tracer()->spans();
72+
$this->assertCount(2, $spans);
73+
74+
$curlSpan = $spans[1];
75+
$this->assertEquals('GuzzleHttp::request', $curlSpan->name());
76+
$this->assertEquals('GET', $curlSpan->attributes()['method']);
77+
$this->assertEquals($server->getUrl(), $curlSpan->attributes()['uri']);
78+
}
79+
80+
public function testPersistsTraceContext()
81+
{
82+
$server = HttpTestServer::create(
83+
function (RequestInterface $request, ResponseInterface &$response) {
84+
/* Assert the HTTP call includes the expected values */
85+
$this->assertEquals('GET', $request->getMethod());
86+
$contextHeader = $request->getHeaderLine('X-Cloud-Trace-Context');
87+
$this->assertNotEmpty($contextHeader);
88+
$this->assertStringStartsWith('1603c1cde5c74f23bcf1682eb822fcf7', $contextHeader);
89+
$response = $response->withStatus(200);
90+
}
91+
);
92+
93+
$traceContextHeader = '1603c1cde5c74f23bcf1682eb822fcf7/1150672535;o=1';
94+
$exporter = $this->prophesize(ExporterInterface::class);
95+
$tracer = Tracer::start($exporter->reveal(), [
96+
'skipReporting' => true,
97+
'headers' => [
98+
'HTTP_X_CLOUD_TRACE_CONTEXT' => $traceContextHeader
99+
]
100+
]);
101+
102+
$server->start();
103+
104+
$response = $this->client->get($server->getUrl());
105+
$this->assertEquals(200, $response->getStatusCode());
106+
107+
$server->stop();
108+
45109
$tracer->onExit();
46110

47111
$spans = $tracer->tracer()->spans();
@@ -50,6 +114,6 @@ public function testGuzzleRequest()
50114
$curlSpan = $spans[1];
51115
$this->assertEquals('GuzzleHttp::request', $curlSpan->name());
52116
$this->assertEquals('GET', $curlSpan->attributes()['method']);
53-
$this->assertEquals($url, $curlSpan->attributes()['uri']);
117+
$this->assertEquals($server->getUrl(), $curlSpan->attributes()['uri']);
54118
}
55119
}

tests/integration/guzzle6/composer.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
"ext-opencensus": "*"
77
},
88
"require-dev": {
9-
"phpunit/phpunit": "^7.0"
9+
"phpunit/phpunit": "^7.0",
10+
"jcchavezs/httptest": "~0.2"
1011
},
11-
"repositories": [
12-
{
12+
"repositories": {
13+
"opencensus": {
1314
"type": "git",
1415
"url": "https://github.com/census-instrumentation/opencensus-php"
1516
}
16-
]
17+
}
1718
}

tests/integration/guzzle6/tests/Guzzle6Test.php

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,93 @@
1919

2020
use GuzzleHttp\Client;
2121
use GuzzleHttp\HandlerStack;
22+
use HttpTest\HttpTestServer;
2223
use OpenCensus\Trace\Tracer;
2324
use OpenCensus\Trace\Exporter\ExporterInterface;
2425
use OpenCensus\Trace\Integrations\Guzzle\Middleware;
26+
use Psr\Http\Message\RequestInterface;
27+
use Psr\Http\Message\ResponseInterface;
2528
use PHPUnit\Framework\TestCase;
2629

2730
/**
2831
* @group trace
2932
*/
30-
class Guzzle5Test extends TestCase
33+
class Guzzle6Test extends TestCase
3134
{
32-
public function testGuzzleRequest()
35+
private $client;
36+
37+
public function setUp()
3338
{
39+
parent::setUp();
3440
$stack = new HandlerStack();
3541
$stack->setHandler(\GuzzleHttp\choose_handler());
3642
$stack->push(new Middleware());
37-
$client = new Client(['handler' => $stack]);
43+
$this->client = new Client(['handler' => $stack]);
44+
}
45+
46+
public function testGuzzleRequest()
47+
{
48+
$server = HttpTestServer::create(
49+
function (RequestInterface $request, ResponseInterface &$response) {
50+
/* Assert the HTTP call includes the expected values */
51+
$this->assertEquals('GET', $request->getMethod());
52+
$response = $response->withStatus(200);
53+
}
54+
);
3855

39-
$url = 'http://www.google.com/';
4056
$exporter = $this->prophesize(ExporterInterface::class);
4157
$tracer = Tracer::start($exporter->reveal(), [
4258
'skipReporting' => true
4359
]);
44-
$response = $client->get($url);
60+
$response = $this->client->get($server->getUrl());
61+
62+
$server->start();
63+
64+
$this->assertEquals(200, $response->getStatusCode());
65+
66+
$server->stop();
67+
68+
$tracer->onExit();
69+
70+
$spans = $tracer->tracer()->spans();
71+
$this->assertCount(2, $spans);
72+
73+
$curlSpan = $spans[1];
74+
$this->assertEquals('GuzzleHttp::request', $curlSpan->name());
75+
$this->assertEquals('GET', $curlSpan->attributes()['method']);
76+
$this->assertEquals($server->getUrl(), $curlSpan->attributes()['uri']);
77+
}
78+
79+
public function testPersistsTraceContext()
80+
{
81+
$server = HttpTestServer::create(
82+
function (RequestInterface $request, ResponseInterface &$response) {
83+
/* Assert the HTTP call includes the expected values */
84+
$this->assertEquals('GET', $request->getMethod());
85+
$contextHeader = $request->getHeaderLine('X-Cloud-Trace-Context');
86+
$this->assertNotEmpty($contextHeader);
87+
$this->assertStringStartsWith('1603c1cde5c74f23bcf1682eb822fcf7', $contextHeader);
88+
$response = $response->withStatus(200);
89+
}
90+
);
91+
92+
93+
$traceContextHeader = '1603c1cde5c74f23bcf1682eb822fcf7/1150672535;o=1';
94+
$exporter = $this->prophesize(ExporterInterface::class);
95+
$tracer = Tracer::start($exporter->reveal(), [
96+
'skipReporting' => true,
97+
'headers' => [
98+
'HTTP_X_CLOUD_TRACE_CONTEXT' => $traceContextHeader
99+
]
100+
]);
101+
102+
$server->start();
103+
104+
$response = $this->client->get($server->getUrl());
45105
$this->assertEquals(200, $response->getStatusCode());
46106

107+
$server->stop();
108+
47109
$tracer->onExit();
48110

49111
$spans = $tracer->tracer()->spans();
@@ -52,6 +114,6 @@ public function testGuzzleRequest()
52114
$curlSpan = $spans[1];
53115
$this->assertEquals('GuzzleHttp::request', $curlSpan->name());
54116
$this->assertEquals('GET', $curlSpan->attributes()['method']);
55-
$this->assertEquals($url, $curlSpan->attributes()['uri']);
117+
$this->assertEquals($server->getUrl(), $curlSpan->attributes()['uri']);
56118
}
57119
}

0 commit comments

Comments
 (0)