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