xref: /dokuwiki/_test/tests/inc/httpclient_http.test.php (revision 08118f511f456cc119c08a966a83704af88e6182)
1f8369d7dSTobias Sarnowski<?php
2f8369d7dSTobias Sarnowski
3f8369d7dSTobias Sarnowskiclass httpclient_http_test extends DokuWikiTest {
4f8369d7dSTobias Sarnowski    protected $server = 'http://httpbin.org';
5f8369d7dSTobias Sarnowski
6f7161c34SAndreas Gohr    /**
7f7161c34SAndreas Gohr     * @group internet
8f7161c34SAndreas Gohr     */
9f8369d7dSTobias Sarnowski    function test_simpleget(){
10f8369d7dSTobias Sarnowski        $http = new HTTPClient();
11f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/get?foo=bar');
12f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
13f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
14f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
15f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('args',$resp);
16f8369d7dSTobias Sarnowski        $this->assertEquals(array('foo'=>'bar'), $resp['args']);
17f8369d7dSTobias Sarnowski    }
18f8369d7dSTobias Sarnowski
19f7161c34SAndreas Gohr    /**
20f7161c34SAndreas Gohr     * @group internet
21f7161c34SAndreas Gohr     */
22f8369d7dSTobias Sarnowski    function test_dget(){
23f8369d7dSTobias Sarnowski        $http = new HTTPClient();
24f8369d7dSTobias Sarnowski        $data = $http->dget($this->server.'/get',array('foo'=>'bar'));
25f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
26f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
27f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
28f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('args',$resp);
29f8369d7dSTobias Sarnowski        $this->assertEquals(array('foo'=>'bar'), $resp['args']);
30f8369d7dSTobias Sarnowski    }
31f8369d7dSTobias Sarnowski
32f7161c34SAndreas Gohr    /**
33f7161c34SAndreas Gohr     * @group internet
34f7161c34SAndreas Gohr     */
35f8369d7dSTobias Sarnowski    function test_gzip(){
36f8369d7dSTobias Sarnowski        $http = new HTTPClient();
37f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/gzip');
38f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
39f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
40f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
41f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('gzipped',$resp);
42f8369d7dSTobias Sarnowski        $this->assertTrue($resp['gzipped']);
43f8369d7dSTobias Sarnowski    }
44f8369d7dSTobias Sarnowski
45f7161c34SAndreas Gohr    /**
46f7161c34SAndreas Gohr     * @group internet
47f7161c34SAndreas Gohr     */
48f8369d7dSTobias Sarnowski    function test_simplepost(){
49f8369d7dSTobias Sarnowski        $http = new HTTPClient();
50f8369d7dSTobias Sarnowski        $data = $http->post($this->server.'/post',array('foo'=>'bar'));
51f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
52f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
53f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
54f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('form',$resp);
55f8369d7dSTobias Sarnowski        $this->assertEquals(array('foo'=>'bar'), $resp['form']);
56f8369d7dSTobias Sarnowski    }
57f8369d7dSTobias Sarnowski
58f7161c34SAndreas Gohr    /**
59f7161c34SAndreas Gohr     * @group internet
60f7161c34SAndreas Gohr     */
61f8369d7dSTobias Sarnowski    function test_redirect(){
62f8369d7dSTobias Sarnowski        $http = new HTTPClient();
63f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/redirect/3');
64f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
65f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
66f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
67f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('url',$resp);
68f8369d7dSTobias Sarnowski        $this->assertRegExp('/\/get$/', $resp['url']);
69f8369d7dSTobias Sarnowski    }
70f8369d7dSTobias Sarnowski
71f7161c34SAndreas Gohr    /**
72f7161c34SAndreas Gohr     * @group internet
73f7161c34SAndreas Gohr     */
74f8369d7dSTobias Sarnowski    function test_relredirect(){
75f8369d7dSTobias Sarnowski        $http = new HTTPClient();
76f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/relative-redirect/3');
77f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
78f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
79f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
80f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('url',$resp);
81f8369d7dSTobias Sarnowski        $this->assertRegExp('/\/get$/', $resp['url']);
82f8369d7dSTobias Sarnowski    }
83f8369d7dSTobias Sarnowski
84f7161c34SAndreas Gohr    /**
85f7161c34SAndreas Gohr     * @group internet
86f7161c34SAndreas Gohr     */
87f8369d7dSTobias Sarnowski    function test_redirectfail(){
88f8369d7dSTobias Sarnowski        $http = new HTTPClient();
89f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/redirect/5');
90f8369d7dSTobias Sarnowski        $this->assertTrue($data === false, 'HTTP response');
91f8369d7dSTobias Sarnowski        $this->assertEquals('Maximum number of redirects exceeded',$http->error);
92f8369d7dSTobias Sarnowski    }
93f8369d7dSTobias Sarnowski
94f7161c34SAndreas Gohr    /**
95f7161c34SAndreas Gohr     * @group internet
96f7161c34SAndreas Gohr     */
97f8369d7dSTobias Sarnowski    function test_cookies(){
98f8369d7dSTobias Sarnowski        $http = new HTTPClient();
99f8369d7dSTobias Sarnowski        $http->get($this->server.'/cookies/set/foo/bar');
100f8369d7dSTobias Sarnowski        $this->assertEquals(array('foo' => 'bar'), $http->cookies);
101f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/cookies');
102f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
103f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
104f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
105f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('cookies',$resp);
106f8369d7dSTobias Sarnowski        $this->assertEquals(array('foo'=>'bar'), $resp['cookies']);
107f8369d7dSTobias Sarnowski    }
108f8369d7dSTobias Sarnowski
109f7161c34SAndreas Gohr    /**
110f7161c34SAndreas Gohr     * @group internet
111f7161c34SAndreas Gohr     */
112f8369d7dSTobias Sarnowski    function test_teapot(){
113f8369d7dSTobias Sarnowski        $http = new HTTPClient();
114f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/status/418');
115f8369d7dSTobias Sarnowski        $this->assertTrue($data === false, 'HTTP response');
116f8369d7dSTobias Sarnowski        $this->assertEquals(418,$http->status);
117f8369d7dSTobias Sarnowski    }
118f8369d7dSTobias Sarnowski
119f7161c34SAndreas Gohr    /**
120f7161c34SAndreas Gohr     * @group internet
121f7161c34SAndreas Gohr     */
122f8369d7dSTobias Sarnowski    function test_maxbody(){
123f8369d7dSTobias Sarnowski        $http = new HTTPClient();
124f8369d7dSTobias Sarnowski        $http->max_bodysize = 250;
125f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/stream/30');
126f8369d7dSTobias Sarnowski        $this->assertTrue($data === false, 'HTTP response');
127769b429aSTom N Harris        $http->max_bodysize_abort = false;
128769b429aSTom N Harris        $data = $http->get($this->server.'/stream/30');
129769b429aSTom N Harris        $this->assertFalse($data === false, 'HTTP response');
130*08118f51STom N Harris        /* should read no more than max_bodysize+1 */
131*08118f51STom N Harris        $this->assertLessThanOrEqual(251,strlen($data));
132f8369d7dSTobias Sarnowski    }
133f8369d7dSTobias Sarnowski
134f7161c34SAndreas Gohr    /**
135f7161c34SAndreas Gohr     * @group internet
136f7161c34SAndreas Gohr     */
137f8369d7dSTobias Sarnowski    function test_basicauth(){
138f8369d7dSTobias Sarnowski        $http = new HTTPClient();
139f8369d7dSTobias Sarnowski        $http->user = 'user';
140f8369d7dSTobias Sarnowski        $http->pass = 'pass';
141f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/basic-auth/user/pass');
142f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
143f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
144f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
145f8369d7dSTobias Sarnowski        $this->assertEquals(array('authenticated'=>true,'user'=>'user'), $resp);
146f8369d7dSTobias Sarnowski    }
147f8369d7dSTobias Sarnowski
148f7161c34SAndreas Gohr    /**
149f7161c34SAndreas Gohr     * @group internet
150f7161c34SAndreas Gohr     */
151f8369d7dSTobias Sarnowski    function test_basicauthfail(){
152f8369d7dSTobias Sarnowski        $http = new HTTPClient();
153f8369d7dSTobias Sarnowski        $http->user = 'user';
154f8369d7dSTobias Sarnowski        $http->pass = 'invalid';
155f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/basic-auth/user/pass');
156f8369d7dSTobias Sarnowski        $this->assertTrue($data === false, 'HTTP response');
157f8369d7dSTobias Sarnowski        $this->assertEquals(401,$http->status);
158f8369d7dSTobias Sarnowski    }
159f8369d7dSTobias Sarnowski
160f7161c34SAndreas Gohr    /**
161f7161c34SAndreas Gohr     * @group internet
162f7161c34SAndreas Gohr     */
163f8369d7dSTobias Sarnowski    function test_timeout(){
164f8369d7dSTobias Sarnowski        $http = new HTTPClient();
165f8369d7dSTobias Sarnowski        $http->timeout = 5;
166f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/delay/10');
167f8369d7dSTobias Sarnowski        $this->assertTrue($data === false, 'HTTP response');
168f8369d7dSTobias Sarnowski        $this->assertEquals(-100,$http->status);
169f8369d7dSTobias Sarnowski    }
170f8369d7dSTobias Sarnowski
171f7161c34SAndreas Gohr    /**
172f7161c34SAndreas Gohr     * @group internet
173f7161c34SAndreas Gohr     */
174f8369d7dSTobias Sarnowski    function test_headers(){
175f8369d7dSTobias Sarnowski        $http = new HTTPClient();
176f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/response-headers?baz=&foo=bar');
177f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
178f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
179f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
180f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('baz',$http->resp_headers);
181f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('foo',$http->resp_headers);
182f8369d7dSTobias Sarnowski        $this->assertEquals('bar',$http->resp_headers['foo']);
183f8369d7dSTobias Sarnowski    }
184d37a3955STom N Harris
185d37a3955STom N Harris    /**
186d37a3955STom N Harris     * @group internet
187d37a3955STom N Harris     */
188d37a3955STom N Harris    function test_chunked(){
189d37a3955STom N Harris        $http = new HTTPClient();
190d37a3955STom N Harris        $data = $http->get('http://whoopdedo.org/cgi-bin/chunked/2550');
191d37a3955STom N Harris        $this->assertFalse($data === false, 'HTTP response');
192d37a3955STom N Harris        $this->assertEquals(2550,strlen($data));
193d37a3955STom N Harris    }
194f8369d7dSTobias Sarnowski}
195f8369d7dSTobias Sarnowski//Setup VIM: ex: et ts=4 :
196