/** * Write the connection header * @param $endpoint * @param Request\TrackingRequest $request * @param bool $lastData * @return string * @throws Exception\EndpointServerException */ private function writeHeader($endpoint, Request\TrackingRequest $request, $lastData = false) { // create data $payloadString = http_build_query($request->getPayload()); $payloadLength = strlen($payloadString); $header = 'POST ' . $endpoint['path'] . ' HTTP/1.1' . "\r\n" . 'Host: ' . $endpoint['host'] . "\r\n" . 'User-Agent: Google-Measurement-PHP-Client' . "\r\n" . 'Content-Length: ' . $payloadLength . "\r\n" . ($lastData ? 'Connection: Close' . "\r\n" : '') . "\r\n"; // fwrite + check if fwrite was ok if (!fwrite($this->connection, $header) || !fwrite($this->connection, $payloadString)) { throw new Exception\EndpointServerException('Server closed connection unexpectedly'); } return $header; }
public function testSingleTracking() { $service = new GATracking('foo'); $trackingRequest = new TrackingRequest(); $trackingRequest->setPayload(array('foo' => 'bar')); $trackingRequest->setResponseHeader(array('baz' => 'fooBar')); $collection = new TrackingRequestCollection(); $collection->add($trackingRequest); $clientMock = $this->getMock('Racecore\\GATracking\\Client\\Adapter\\Socket'); $clientMock->expects($this->once())->method('send')->will($this->returnValue($collection)); $tracking = $this->getMock('Racecore\\GATracking\\Tracking\\Event'); $tracking->expects($this->once())->method('getPackage')->will($this->returnValue(array('test' => 'bar'))); $service->setClientAdapter($clientMock); $response = $service->sendTracking($tracking); $responsePayload = $response->getPayload(); $responseHeader = $response->getResponseHeader(); $this->assertInstanceOf('Racecore\\GATracking\\Request\\TrackingRequest', $response); $this->assertArrayHasKey('foo', $responsePayload); $this->assertEquals('bar', $responsePayload['foo']); $this->assertArrayHasKey('baz', $responseHeader); $this->assertEquals('fooBar', $responseHeader['baz']); }