1*ba9015b0SKlap-in<?php 2*ba9015b0SKlap-in 3*ba9015b0SKlap-in/** 4*ba9015b0SKlap-in * @group internet 5*ba9015b0SKlap-in */ 6*ba9015b0SKlap-inclass fetch_statuscodes_external_test extends DokuWikiTest { 7*ba9015b0SKlap-in 8*ba9015b0SKlap-in private $media = 'http://www.google.com/images/srpr/logo3w.png'; //used in media_get_from_url test too 9*ba9015b0SKlap-in private $width = 200; 10*ba9015b0SKlap-in private $height = 0; 11*ba9015b0SKlap-in 12*ba9015b0SKlap-in function setUp() { 13*ba9015b0SKlap-in 14*ba9015b0SKlap-in header('X-Test: check headers working'); 15*ba9015b0SKlap-in $header_check = function_exists('xdebug_get_headers') ? xdebug_get_headers() : headers_list(); 16*ba9015b0SKlap-in if (empty($header_check)) { 17*ba9015b0SKlap-in $this->markTestSkipped('headers not returned, perhaps your sapi does not return headers, try xdebug'); 18*ba9015b0SKlap-in } else { 19*ba9015b0SKlap-in header_remove('X-Test'); 20*ba9015b0SKlap-in } 21*ba9015b0SKlap-in 22*ba9015b0SKlap-in parent::setUp(); 23*ba9015b0SKlap-in 24*ba9015b0SKlap-in global $conf; 25*ba9015b0SKlap-in $conf['fetchsize'] = 500*1024; //500kb 26*ba9015b0SKlap-in $conf['xsendfile'] = 0; 27*ba9015b0SKlap-in 28*ba9015b0SKlap-in global $MIME, $EXT, $CACHE, $INPUT; // variables fetch creates in global scope -- should this be in fetch? 29*ba9015b0SKlap-in } 30*ba9015b0SKlap-in 31*ba9015b0SKlap-in function getUri($hash=null) { 32*ba9015b0SKlap-in $w = $this->width ? 'w='.$this->width.'&' : ''; 33*ba9015b0SKlap-in $h = $this->height ? 'h='.$this->height.'&' : ''; 34*ba9015b0SKlap-in if($hash === null) { 35*ba9015b0SKlap-in $hash = 'hash='.substr(md5(auth_cookiesalt().$this->media), 0, 6).'&'; 36*ba9015b0SKlap-in } 37*ba9015b0SKlap-in 38*ba9015b0SKlap-in return '/lib/exe/fetch.php?'.$hash.$w.$h.'{%token%}media='.rawurlencode($this->media); 39*ba9015b0SKlap-in } 40*ba9015b0SKlap-in 41*ba9015b0SKlap-in function fetchResponse($token, $hash=null){ 42*ba9015b0SKlap-in $request = new TestRequest(); 43*ba9015b0SKlap-in return $request->get(array(),str_replace('{%token%}',$token,$this->getUri($hash))); 44*ba9015b0SKlap-in } 45*ba9015b0SKlap-in 46*ba9015b0SKlap-in /** 47*ba9015b0SKlap-in * modified image request with invalid hash 48*ba9015b0SKlap-in * expect: 412 status code 49*ba9015b0SKlap-in */ 50*ba9015b0SKlap-in function test_invalid_hash() { 51*ba9015b0SKlap-in $invalid_hash = 'hash='.substr(md5(auth_cookiesalt().'junk'), 0, 6).'&'; 52*ba9015b0SKlap-in $token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; 53*ba9015b0SKlap-in 54*ba9015b0SKlap-in $this->assertEquals(412,$this->fetchResponse($token, $invalid_hash)->getStatusCode()); 55*ba9015b0SKlap-in 56*ba9015b0SKlap-in } 57*ba9015b0SKlap-in 58*ba9015b0SKlap-in /** 59*ba9015b0SKlap-in * modified image request with valid token 60*ba9015b0SKlap-in * expect: header with mime-type 61*ba9015b0SKlap-in * expect: content 62*ba9015b0SKlap-in * expect: no error response 63*ba9015b0SKlap-in */ 64*ba9015b0SKlap-in function test_valid_token(){ 65*ba9015b0SKlap-in $valid_token = 'tok='.media_get_token($this->media, $this->width, $this->height).'&'; 66*ba9015b0SKlap-in 67*ba9015b0SKlap-in $response = $this->fetchResponse($valid_token); 68*ba9015b0SKlap-in $this->assertTrue((bool)$response->getHeader('Content-Type')); 69*ba9015b0SKlap-in $this->assertTrue((bool)($response->getContent())); 70*ba9015b0SKlap-in 71*ba9015b0SKlap-in $status_code = $response->getStatusCode(); 72*ba9015b0SKlap-in $this->assertTrue(is_null($status_code) || (200 == $status_code)); 73*ba9015b0SKlap-in } 74*ba9015b0SKlap-in 75*ba9015b0SKlap-in /** 76*ba9015b0SKlap-in * modified image request with invalid token 77*ba9015b0SKlap-in * expect: 412 status code 78*ba9015b0SKlap-in */ 79*ba9015b0SKlap-in function test_invalid_token(){ 80*ba9015b0SKlap-in $invalid_token = 'tok='.media_get_token('junk',200,100).'&'; 81*ba9015b0SKlap-in $this->assertEquals(412,$this->fetchResponse($invalid_token)->getStatusCode()); 82*ba9015b0SKlap-in } 83*ba9015b0SKlap-in 84*ba9015b0SKlap-in /** 85*ba9015b0SKlap-in * modified image request with no token 86*ba9015b0SKlap-in * expect: 412 status code 87*ba9015b0SKlap-in */ 88*ba9015b0SKlap-in function test_missing_token(){ 89*ba9015b0SKlap-in $no_token = ''; 90*ba9015b0SKlap-in $this->assertEquals(412,$this->fetchResponse($no_token)->getStatusCode()); 91*ba9015b0SKlap-in } 92*ba9015b0SKlap-in 93*ba9015b0SKlap-in /** 94*ba9015b0SKlap-in * native image request which doesn't require a token 95*ba9015b0SKlap-in * try: with a token & without a token 96*ba9015b0SKlap-in * expect: (for both) header with mime-type, content matching source image filesize & no error response 97*ba9015b0SKlap-in */ 98*ba9015b0SKlap-in function test_no_token_required(){ 99*ba9015b0SKlap-in $this->width = $this->height = 0; // no width & height, means image request at native dimensions 100*ba9015b0SKlap-in $any_token = 'tok='.media_get_token('junk',200,100).'&'; 101*ba9015b0SKlap-in $no_token = ''; 102*ba9015b0SKlap-in $file = media_get_from_URL($this->media,'png', -1); 103*ba9015b0SKlap-in $bytes = filesize($file); 104*ba9015b0SKlap-in 105*ba9015b0SKlap-in foreach(array($any_token, $no_token) as $token) { 106*ba9015b0SKlap-in $response = $this->fetchResponse($token); 107*ba9015b0SKlap-in $this->assertTrue((bool)$response->getHeader('Content-Type')); 108*ba9015b0SKlap-in $this->assertEquals(strlen($response->getContent()), $bytes); 109*ba9015b0SKlap-in 110*ba9015b0SKlap-in $status_code = $response->getStatusCode(); 111*ba9015b0SKlap-in $this->assertTrue(is_null($status_code) || (200 == $status_code)); 112*ba9015b0SKlap-in } 113*ba9015b0SKlap-in } 114*ba9015b0SKlap-in 115*ba9015b0SKlap-in} 116*ba9015b0SKlap-in//Setup VIM: ex: et ts=4 : 117