xref: /dokuwiki/_test/tests/inc/httpclient_http.test.php (revision 769b429a77368df14e3753f624466f658e971df6)
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');
127*769b429aSTom N Harris        $http->max_bodysize_abort = false;
128*769b429aSTom N Harris        $data = $http->get($this->server.'/stream/30');
129*769b429aSTom N Harris        $this->assertFalse($data === false, 'HTTP response');
130*769b429aSTom N Harris        /* the current implementation will read in max_bodysize blocks,
131*769b429aSTom N Harris           and aborts if the response is larger, thus a limit of 2*max_bodysize */
132*769b429aSTom N Harris        $this->assertLessThanOrEqual(500,strlen($data));
133f8369d7dSTobias Sarnowski    }
134f8369d7dSTobias Sarnowski
135f7161c34SAndreas Gohr    /**
136f7161c34SAndreas Gohr     * @group internet
137f7161c34SAndreas Gohr     */
138f8369d7dSTobias Sarnowski    function test_basicauth(){
139f8369d7dSTobias Sarnowski        $http = new HTTPClient();
140f8369d7dSTobias Sarnowski        $http->user = 'user';
141f8369d7dSTobias Sarnowski        $http->pass = 'pass';
142f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/basic-auth/user/pass');
143f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
144f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
145f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
146f8369d7dSTobias Sarnowski        $this->assertEquals(array('authenticated'=>true,'user'=>'user'), $resp);
147f8369d7dSTobias Sarnowski    }
148f8369d7dSTobias Sarnowski
149f7161c34SAndreas Gohr    /**
150f7161c34SAndreas Gohr     * @group internet
151f7161c34SAndreas Gohr     */
152f8369d7dSTobias Sarnowski    function test_basicauthfail(){
153f8369d7dSTobias Sarnowski        $http = new HTTPClient();
154f8369d7dSTobias Sarnowski        $http->user = 'user';
155f8369d7dSTobias Sarnowski        $http->pass = 'invalid';
156f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/basic-auth/user/pass');
157f8369d7dSTobias Sarnowski        $this->assertTrue($data === false, 'HTTP response');
158f8369d7dSTobias Sarnowski        $this->assertEquals(401,$http->status);
159f8369d7dSTobias Sarnowski    }
160f8369d7dSTobias Sarnowski
161f7161c34SAndreas Gohr    /**
162f7161c34SAndreas Gohr     * @group internet
163f7161c34SAndreas Gohr     */
164f8369d7dSTobias Sarnowski    function test_timeout(){
165f8369d7dSTobias Sarnowski        $http = new HTTPClient();
166f8369d7dSTobias Sarnowski        $http->timeout = 5;
167f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/delay/10');
168f8369d7dSTobias Sarnowski        $this->assertTrue($data === false, 'HTTP response');
169f8369d7dSTobias Sarnowski        $this->assertEquals(-100,$http->status);
170f8369d7dSTobias Sarnowski    }
171f8369d7dSTobias Sarnowski
172f7161c34SAndreas Gohr    /**
173f7161c34SAndreas Gohr     * @group internet
174f7161c34SAndreas Gohr     */
175f8369d7dSTobias Sarnowski    function test_headers(){
176f8369d7dSTobias Sarnowski        $http = new HTTPClient();
177f8369d7dSTobias Sarnowski        $data = $http->get($this->server.'/response-headers?baz=&foo=bar');
178f8369d7dSTobias Sarnowski        $this->assertFalse($data === false, 'HTTP response');
179f8369d7dSTobias Sarnowski        $resp = json_decode($data, true);
180f8369d7dSTobias Sarnowski        $this->assertTrue(is_array($resp), 'JSON response');
181f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('baz',$http->resp_headers);
182f8369d7dSTobias Sarnowski        $this->assertArrayHasKey('foo',$http->resp_headers);
183f8369d7dSTobias Sarnowski        $this->assertEquals('bar',$http->resp_headers['foo']);
184f8369d7dSTobias Sarnowski    }
185d37a3955STom N Harris
186d37a3955STom N Harris    /**
187d37a3955STom N Harris     * @group internet
188d37a3955STom N Harris     */
189d37a3955STom N Harris    function test_chunked(){
190d37a3955STom N Harris        $http = new HTTPClient();
191d37a3955STom N Harris        $data = $http->get('http://whoopdedo.org/cgi-bin/chunked/2550');
192d37a3955STom N Harris        $this->assertFalse($data === false, 'HTTP response');
193d37a3955STom N Harris        $this->assertEquals(2550,strlen($data));
194d37a3955STom N Harris    }
195f8369d7dSTobias Sarnowski}
196f8369d7dSTobias Sarnowski//Setup VIM: ex: et ts=4 :
197