Completed
Push — master ( 87b7a4...6ce28d )
by Gaetano
11:11 queued 06:38
created

LocalhostMultiTest::testHttpsProxy()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 28
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 4
eloc 18
c 2
b 0
f 0
nc 4
nop 1
dl 0
loc 28
rs 9.6666
1
<?php
2
3
include_once __DIR__ . '/../lib/xmlrpc.inc';
4
include_once __DIR__ . '/../lib/xmlrpc_wrappers.inc';
5
6
include_once __DIR__ . '/parse_args.php';
7
8
include_once __DIR__ . '/3LocalhostTest.php';
9
10
/**
11
 * Tests which stress http features of the library.
12
 * Each of these tests iterates over (almost) all of the 'localhost' tests
13
 */
14
class LocalhostMultiTest extends LocalhostTest
15
{
16
    /**
17
     * Returns all test methods from the base class, except the ones which failed already
18
     *
19
     * @todo reintroduce skipping of tests which failed when executed individually if test runs happen as separate processes
20
     * @todo reintroduce skipping of tests within the loop
21
     */
22
    public function getSingleHttpTestMethods()
23
    {
24
        $unsafeMethods = array(
25
            'testCatchExceptions', 'testUtf8Method', 'testServerComments',
26
            'testExoticCharsetsRequests', 'testExoticCharsetsRequests2', 'testExoticCharsetsRequests3',
27
        );
28
29
        $methods = array();
30
        foreach(get_class_methods('LocalhostTest') as $method)
31
        {
32
            if(strpos($method, 'test') === 0 && !in_array($method, $unsafeMethods))
33
            {
34
                if (!isset(self::$failed_tests[$method])) {
35
                    $methods[$method] = array($method);
36
                }
37
            }
38
        }
39
40
        return $methods;
41
    }
42
43
    /**
44
     * @dataProvider getSingleHttpTestMethods
45
     * @param string $method
46
     */
47
    public function testDeflate($method)
48
    {
49
        if(!function_exists('gzdeflate'))
50
        {
51
            $this->markTestSkipped('Zlib missing: cannot test deflate functionality');
52
            return;
53
        }
54
55
        $this->client->accepted_compression = array('deflate');
56
        $this->client->request_compression = 'deflate';
57
58
        $this->$method();
59
    }
60
61
    /**
62
     * @dataProvider getSingleHttpTestMethods
63
     * @param string $method
64
     */
65
    public function testGzip($method)
66
    {
67
        if(!function_exists('gzdeflate'))
68
        {
69
            $this->markTestSkipped('Zlib missing: cannot test gzip functionality');
70
            return;
71
        }
72
73
        $this->client->accepted_compression = array('gzip');
74
        $this->client->request_compression = 'gzip';
75
76
        $this->$method();
77
    }
78
79
    public function testKeepAlives()
80
    {
81
        if(!function_exists('curl_init'))
82
        {
83
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
84
            return;
85
        }
86
87
        $this->method = 'http11';
88
        $this->client->method = 'http11';
89
        $this->client->keepalive = true;
90
91
        // to successfully test keepalive, we have to reuse the same client for all tests, we can not recreate one on setup/teardown...
92
        foreach ($this->getSingleHttpTestMethods() as $methods) {
93
            $method = $methods[0];
94
            $this->$method();
95
        }
96
    }
97
98
    /**
99
     * @dataProvider getSingleHttpTestMethods
100
     * @param string $method
101
     */
102
    public function testProxy($method)
103
    {
104
        if ($this->args['PROXYSERVER'] == '')
105
        {
106
            $this->markTestSkipped('PROXY definition missing: cannot test proxy');
107
            return;
108
        }
109
110
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
111
112
        $this->$method();
113
    }
114
115
    /**
116
     * @dataProvider getSingleHttpTestMethods
117
     * @param string $method
118
     */
119
    public function testHttp11($method)
120
    {
121
        if(!function_exists('curl_init'))
122
        {
123
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
124
            return;
125
        }
126
127
        $this->method = 'http11'; // not an error the double assignment!
128
        $this->client->method = 'http11';
129
        $this->client->keepalive = false;
130
131
        $this->$method();
132
    }
133
134
    /**
135
     * @dataProvider getSingleHttpTestMethods
136
     * @param string $method
137
     */
138
    public function testHttp10Curl($method)
139
    {
140
        if(!function_exists('curl_init'))
141
        {
142
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
143
            return;
144
        }
145
146
        $this->method = 'http10'; // not an error the double assignment!
147
        $this->client->method = 'http10';
148
        $this->client->keepalive = false;
149
        $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_ALWAYS);
150
151
        $this->$method();
152
    }
153
154
    /**
155
     * @dataProvider getSingleHttpTestMethods
156
     * @param string $method
157
     */
158
    public function testHttp11Gzip($method)
159
    {
160
        if(!function_exists('curl_init'))
161
        {
162
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
163
            return;
164
        }
165
        $this->method = 'http11'; // not an error the double assignment!
166
        $this->client->method = 'http11';
167
        $this->client->keepalive = false;
168
        $this->client->accepted_compression = array('gzip');
169
        $this->client->request_compression = 'gzip';
170
171
        $this->$method();
172
    }
173
174
    /**
175
     * @dataProvider getSingleHttpTestMethods
176
     * @param string $method
177
     */
178
    public function testHttp11Deflate($method)
179
    {
180
        if(!function_exists('curl_init'))
181
        {
182
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
183
            return;
184
        }
185
        $this->method = 'http11'; // not an error the double assignment!
186
        $this->client->method = 'http11';
187
        $this->client->keepalive = false;
188
        $this->client->accepted_compression = array('deflate');
189
        $this->client->request_compression = 'deflate';
190
191
        $this->$method();
192
    }
193
194
    /**
195
     * @dataProvider getSingleHttpTestMethods
196
     * @param string $method
197
     */
198
    public function testHttp11Proxy($method)
199
    {
200
        if(!function_exists('curl_init'))
201
        {
202
            $this->markTestSkipped('CURL missing: cannot test http 1.1 w. proxy');
203
            return;
204
        }
205
        else if ($this->args['PROXYSERVER'] == '')
206
        {
207
            $this->markTestSkipped('PROXY definition missing: cannot test proxy w. http 1.1');
208
            return;
209
        }
210
211
        $this->method = 'http11'; // not an error the double assignment!
212
        $this->client->method = 'http11';
213
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
214
        $this->client->keepalive = false;
215
216
        $this->$method();
217
    }
218
219
    /**
220
     * @dataProvider getSingleHttpTestMethods
221
     * @param string $method
222
     */
223
    public function testHttps($method)
224
    {
225
        if(!function_exists('curl_init'))
226
        {
227
            $this->markTestSkipped('CURL missing: cannot test https functionality');
228
            return;
229
        }
230
        else if ($this->args['HTTPSSERVER'] == '')
231
        {
232
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https');
233
            return;
234
        }
235
236
        $this->client->server = $this->args['HTTPSSERVER'];
237
        $this->method = 'https';
238
        $this->client->method = 'https';
239
        $this->client->path = $this->args['HTTPSURI'];
240
        $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);
241
        $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);
242
        $this->client->setSSLVersion($this->args['SSLVERSION']);
243
244
        $this->$method();
245
    }
246
247
    /**
248
     * @dataProvider getSingleHttpTestMethods
249
     * @param string $method
250
     */
251
    public function testHttpsSocket($method)
252
    {
253
        if ($this->args['HTTPSSERVER'] == '')
254
        {
255
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https');
256
            return;
257
        }
258
259
        $this->client->server = $this->args['HTTPSSERVER'];
260
        $this->method = 'https';
261
        $this->client->method = 'https';
262
        $this->client->path = $this->args['HTTPSURI'];
263
        $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);
264
        $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);
265
        $this->client->setSSLVersion($this->args['SSLVERSION']);
266
        $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_NEVER);
267
268
        $this->$method();
269
    }
270
271
    /**
272
     * @dataProvider getSingleHttpTestMethods
273
     * @param string $method
274
     */
275
    public function testHttpsProxy($method)
276
    {
277
        if(!function_exists('curl_init'))
278
        {
279
            $this->markTestSkipped('CURL missing: cannot test https w. proxy');
280
            return;
281
        }
282
        else if ($this->args['PROXYSERVER'] == '')
283
        {
284
            $this->markTestSkipped('PROXY definition missing: cannot test proxy w. https');
285
            return;
286
        }
287
        else if ($this->args['HTTPSSERVER'] == '')
288
        {
289
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https w. proxy');
290
            return;
291
        }
292
293
        $this->client->server = $this->args['HTTPSSERVER'];
294
        $this->method = 'https';
295
        $this->client->method = 'https';
296
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
297
        $this->client->path = $this->args['HTTPSURI'];
298
        $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);
299
        $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);
300
        $this->client->setSSLVersion($this->args['SSLVERSION']);
301
302
        $this->$method();
303
    }
304
305
    /**
306
     * @dataProvider getSingleHttpTestMethods
307
     * @param string $method
308
     */
309
    public function testUTF8Responses($method)
310
    {
311
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'UTF-8'));
312
313
        $this->$method();
314
    }
315
316
    /**
317
     * @dataProvider getSingleHttpTestMethods
318
     * @param string $method
319
     */
320
    public function testUTF8Requests($method)
321
    {
322
        $this->client->request_charset_encoding = 'UTF-8';
323
324
        $this->$method();
325
    }
326
327
    /**
328
     * @dataProvider getSingleHttpTestMethods
329
     * @param string $method
330
     */
331
    public function testISOResponses($method)
332
    {
333
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'ISO-8859-1'));
334
335
        $this->$method();
336
    }
337
338
    /**
339
     * @dataProvider getSingleHttpTestMethods
340
     * @param string $method
341
     */
342
    public function testISORequests($method)
343
    {
344
        $this->client->request_charset_encoding = 'ISO-8859-1';
345
346
        $this->$method();
347
    }
348
349
    /**
350
     * @dataProvider getSingleHttpTestMethods
351
     * @param string $method
352
     */
353
    public function testBasicAuth($method)
354
    {
355
        $this->client->setCredentials('test', 'test');
356
        $this->addQueryParams(array('FORCE_AUTH' => 'Basic'));
357
358
        $this->$method();
359
    }
360
361
    /**
362
     * @dataProvider getSingleHttpTestMethods
363
     * @param string $method
364
     */
365
    public function testDigestAuth($method)
366
    {
367
        if (!function_exists('curl_init'))
368
        {
369
            $this->markTestSkipped('CURL missing: cannot test digest auth functionality');
370
            return;
371
        }
372
373
        $this->client->setCredentials('test', 'test', CURLAUTH_DIGEST);
374
        $this->addQueryParams(array('FORCE_AUTH' => 'Digest'));
375
        $this->method = 'http11';
376
        $this->client->method = 'http11';
377
378
        $this->$method();
379
    }
380
}
381