xref: /dokuwiki/_test/tests/lib/exe/fetch_statuscodes_external.test.php (revision ba9015b07d229ba195e7a9a3f23c3b038374c88c)
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