context = new GadgetContext('GADGET'); $this->url = 'http://' . $_SERVER["HTTP_HOST"] . Config::get('web_prefix') . '/test/gadgets/example.xml'; $this->proxy = 'http://' . $_SERVER["HTTP_HOST"] . Config::get('web_prefix') . '/gadgets/proxy/'; $this->original_content = file_get_contents($this->url); $this->ProxyHandler = new ProxyHandler($this->context); } /** * Cleans up the environment after running a test. */ protected function tearDown() { $this->ProxyHandler = null; parent::tearDown(); } private function getRemoteFile($url, $IfNoneMatch = null, $IfModifiedSince = null) { // get the host name and url path $parsedUrl = parse_url($url); $host = $parsedUrl['host']; if (isset($parsedUrl['path'])) { $path = $parsedUrl['path']; } else { // the url is pointing to the host like http://www.mysite.com $path = '/'; } if (isset($parsedUrl['query'])) { $path .= '?' . $parsedUrl['query']; } if (isset($parsedUrl['port'])) { $port = $parsedUrl['port']; } else { $port = 80; } $timeout = 5; $response = ''; // connect to the remote server $fp = @fsockopen($host, $port, $errno, $errstr, $timeout); if (! $fp) { echo "Cannot retrieve $url"; } else { // send the necessary headers to get the file fputs($fp, "GET $path HTTP/1.0\r\n" . "Host: $host\r\n" . "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3\r\n" . "Accept: */*\r\n" . ($IfNoneMatch !== null ? "If-None-Match: $IfNoneMatch\r\n" : '') . ($IfNoneMatch !== null ? "If-Modified-Since: $IfModifiedSince\r\n" : '') . "Keep-Alive: 300\r\n" . "Connection: keep-alive\r\n" . "Referer: http://$host\r\n\r\n"); // retrieve the response from the remote server while ($line = fread($fp, 4096)) { $response .= $line; } fclose($fp); } // return the file content return $response; } private function getHTTPStatus($strHeaders) { return intval(substr($strHeaders, 8, 5)); } /** * Tests ProxyHandler->fetch() */ public function testFetch() { $out = file_get_contents($this->proxy . '?url=' . $this->url . ''); $this->assertEquals($out, $this->original_content); $this->assertNotEquals($this->getHTTPStatus($this->getRemoteFile($this->proxy . '?url=' . $this->url . '')), $this->getHTTPStatus($this->getRemoteFile($this->proxy . '?url=' . $this->url . '', 'd9e124952eee27820768b8fadb0f0b78', gmdate("D, d M Y H:i:s", time() + 10000) . " GMT")), 'Checking HTTP 304 support'); } /** * Tests ProxyHandler->fetchJson() */ public function testFetchJson() { // FIXME we need a better test here $out = file_get_contents($this->proxy . '?url=' . $this->url . '&output=js'); $this->assertTrue(strpos($out, UNPARSEABLE_CRUFT) == 0); } }