Passed
Push — master ( ca95a4...b9175a )
by Gaetano
08:52
created

HTTPTest::testBasicAuth()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 6
rs 10
1
<?php
2
3
include_once __DIR__ . '/08ServerTest.php';
4
5
/**
6
 * Tests which stress http features of the library.
7
 * Each of these tests iterates over (almost) all the 'Server' tests
8
 */
9
class HTTPTest extends ServerTest
10
{
11
    protected $expectHttp2 = false;
12
13
    /**
14
     * Returns all test methods from the base class, except the ones which failed already
15
     *
16
     * @todo (re)introduce skipping of tests which failed when executed individually even if test runs happen as separate processes
17
     * @todo reintroduce skipping of tests within the loop
18
     */
19
    public function getSingleHttpTestMethods()
20
    {
21
        $unsafeMethods = array(
22
            'testCatchExceptions', 'testCatchErrors', 'testUtf8Method', 'testServerComments',
23
            'testExoticCharsetsRequests', 'testExoticCharsetsRequests2', 'testExoticCharsetsRequests3',
24
            'testWrapInexistentUrl', 'testNegativeDebug'
25
        );
26
27
        $methods = array();
28
        foreach(get_class_methods('ServerTest') as $method)
29
        {
30
            if (strpos($method, 'test') === 0 && !in_array($method, $unsafeMethods))
31
            {
32
                if (!isset(self::$failed_tests[$method])) {
33
                    $methods[$method] = array($method);
34
                }
35
            }
36
        }
37
38
        return $methods;
39
    }
40
41
    /**
42
     * @dataProvider getSingleHttpTestMethods
43
     * @param string $method
44
     */
45
    public function testDeflate($method)
46
    {
47
        if (!function_exists('gzdeflate'))
48
        {
49
            $this->markTestSkipped('Zlib missing: cannot test deflate functionality');
50
            return;
51
        }
52
53
        $this->client->accepted_compression = array('deflate');
0 ignored issues
show
Bug Best Practice introduced by
The property $accepted_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
54
        $this->client->request_compression = 'deflate';
0 ignored issues
show
Bug Best Practice introduced by
The property $request_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
55
56
        $this->$method();
57
    }
58
59
    /**
60
     * @dataProvider getSingleHttpTestMethods
61
     * @param string $method
62
     */
63
    public function testGzip($method)
64
    {
65
        if (!function_exists('gzdeflate'))
66
        {
67
            $this->markTestSkipped('Zlib missing: cannot test gzip functionality');
68
            return;
69
        }
70
71
        $this->client->accepted_compression = array('gzip');
0 ignored issues
show
Bug Best Practice introduced by
The property $accepted_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
72
        $this->client->request_compression = 'gzip';
0 ignored issues
show
Bug Best Practice introduced by
The property $request_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
73
74
        $this->$method();
75
    }
76
77
    public function testKeepAlives()
78
    {
79
        if (!function_exists('curl_init'))
80
        {
81
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
82
            return;
83
        }
84
85
        $this->method = 'http11';
86
        $this->client->method = 'http11';
87
        $this->client->keepalive = true;
0 ignored issues
show
Bug Best Practice introduced by
The property $keepalive is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
88
89
        // to successfully test keepalive, we have to reuse the same client for all tests, we can not recreate one on setup/teardown...
90
        foreach ($this->getSingleHttpTestMethods() as $methods) {
91
            $method = $methods[0];
92
            $this->$method();
93
        }
94
    }
95
96
    /**
97
     * @dataProvider getSingleHttpTestMethods
98
     * @param string $method
99
     */
100
    public function testRedirects($method)
101
    {
102
        if (!function_exists('curl_init'))
103
        {
104
            $this->markTestSkipped('CURL missing: cannot test redirects');
105
            return;
106
        }
107
108
        $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_ALWAYS);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setUseCurl() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

108
        /** @scrutinizer ignore-deprecated */ $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_ALWAYS);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
109
        $this->client->setCurlOptions(array(CURLOPT_FOLLOWLOCATION => true, CURLOPT_POSTREDIR => 3));
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setCurlOptions() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

109
        /** @scrutinizer ignore-deprecated */ $this->client->setCurlOptions(array(CURLOPT_FOLLOWLOCATION => true, CURLOPT_POSTREDIR => 3));

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
110
111
        $this->$method();
112
    }
113
114
    public function testAcceptCharset()
115
    {
116
        if (version_compare(PHP_VERSION, '5.6.0', '<'))
117
        {
118
            $this->markTestSkipped('cannot test accept-charset on php < 5.6');
119
            return;
120
        }
121
        if (!function_exists('mb_list_encodings'))
122
        {
123
            $this->markTestSkipped('mbstring missing: cannot test accept-charset');
124
            return;
125
        }
126
127
        $r = new \PhpXmlRpc\Request('examples.stringecho', array(new \PhpXmlRpc\Value('€')));
128
        //chr(164)
129
130
        $originalEncoding = \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding;
131
        \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'UTF-8';
132
133
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'auto'));
134
        $this->client->accepted_charset_encodings = array(
0 ignored issues
show
Bug Best Practice introduced by
The property $accepted_charset_encodings is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
135
            'utf-1234;q=0.1',
136
            'windows-1252;q=0.8'
137
        );
138
        $v = $this->send($r, 0, true);
139
        $h = $v->httpResponse();
140
        $this->assertEquals('text/xml; charset=Windows-1252', $h['headers']['content-type']);
141
        if ($v) {
142
            $this->assertEquals('€', $v->value()->scalarval());
143
        }
144
        \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = $originalEncoding;
145
    }
146
147
    /**
148
     * @dataProvider getSingleHttpTestMethods
149
     * @param string $method
150
     */
151
    public function testProxy($method)
152
    {
153
        if ($this->args['PROXYSERVER'] == '')
154
        {
155
            $this->markTestSkipped('PROXYSERVER definition missing: cannot test proxy');
156
            return;
157
        }
158
159
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
160
161
        $this->$method();
162
    }
163
164
    /**
165
     * @dataProvider getSingleHttpTestMethods
166
     * @param string $method
167
     */
168
    public function testHttp11($method)
169
    {
170
        if (!function_exists('curl_init'))
171
        {
172
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
173
            return;
174
        }
175
176
        $this->method = 'http11'; // not an error the double assignment!
177
        $this->client->method = 'http11';
178
        $this->client->keepalive = false;
0 ignored issues
show
Bug Best Practice introduced by
The property $keepalive is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
179
180
        $this->$method();
181
    }
182
183
    /**
184
     * @dataProvider getSingleHttpTestMethods
185
     * @param string $method
186
     */
187
    public function testHttp10Curl($method)
188
    {
189
        if (!function_exists('curl_init'))
190
        {
191
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
192
            return;
193
        }
194
195
        $this->method = 'http10'; // not an error the double assignment!
196
        $this->client->method = 'http10';
197
        $this->client->keepalive = false;
0 ignored issues
show
Bug Best Practice introduced by
The property $keepalive is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
198
        $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_ALWAYS);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setUseCurl() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

198
        /** @scrutinizer ignore-deprecated */ $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_ALWAYS);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
199
200
        $this->$method();
201
    }
202
203
    /**
204
     * @dataProvider getSingleHttpTestMethods
205
     * @param string $method
206
     */
207
    public function testHttp11Gzip($method)
208
    {
209
        if (!function_exists('curl_init'))
210
        {
211
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
212
            return;
213
        }
214
        $this->method = 'http11'; // not an error the double assignment!
215
        $this->client->method = 'http11';
216
        $this->client->keepalive = false;
0 ignored issues
show
Bug Best Practice introduced by
The property $keepalive is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
217
        $this->client->accepted_compression = array('gzip');
0 ignored issues
show
Bug Best Practice introduced by
The property $accepted_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
218
        $this->client->request_compression = 'gzip';
0 ignored issues
show
Bug Best Practice introduced by
The property $request_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
219
220
        $this->$method();
221
    }
222
223
    /**
224
     * @dataProvider getSingleHttpTestMethods
225
     * @param string $method
226
     */
227
    public function testHttp11Deflate($method)
228
    {
229
        if (!function_exists('curl_init'))
230
        {
231
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
232
            return;
233
        }
234
        $this->method = 'http11'; // not an error the double assignment!
235
        $this->client->method = 'http11';
236
        $this->client->keepalive = false;
0 ignored issues
show
Bug Best Practice introduced by
The property $keepalive is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
237
        $this->client->accepted_compression = array('deflate');
0 ignored issues
show
Bug Best Practice introduced by
The property $accepted_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
238
        $this->client->request_compression = 'deflate';
0 ignored issues
show
Bug Best Practice introduced by
The property $request_compression is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
239
240
        $this->$method();
241
    }
242
243
    /**
244
     * @dataProvider getSingleHttpTestMethods
245
     * @param string $method
246
     */
247
    public function testHttp11Proxy($method)
248
    {
249
        if (!function_exists('curl_init'))
250
        {
251
            $this->markTestSkipped('CURL missing: cannot test http 1.1 w. proxy');
252
            return;
253
        }
254
        else if ($this->args['PROXYSERVER'] == '')
255
        {
256
            $this->markTestSkipped('PROXYSERVER definition missing: cannot test proxy w. http 1.1');
257
            return;
258
        }
259
260
        $this->method = 'http11'; // not an error the double assignment!
261
        $this->client->method = 'http11';
262
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
263
        $this->client->keepalive = false;
0 ignored issues
show
Bug Best Practice introduced by
The property $keepalive is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
264
265
        $this->$method();
266
    }
267
268
    /**
269
     * @dataProvider getSingleHttpTestMethods
270
     * @param string $method
271
     */
272
    public function testHttps($method)
273
    {
274
        if (!function_exists('curl_init'))
275
        {
276
            $this->markTestSkipped('CURL missing: cannot test https functionality');
277
            return;
278
        }
279
        else if ($this->args['HTTPSSERVER'] == '')
280
        {
281
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https');
282
            return;
283
        }
284
285
        $this->client->server = $this->args['HTTPSSERVER'];
286
        $this->method = 'https';
287
        $this->client->method = 'https';
288
        $this->client->path = $this->args['HTTPSURI'];
289
        $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyPeer() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

289
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
290
        $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyHost() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

290
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
291
        $this->client->setSSLVersion($this->args['SSLVERSION']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVersion() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

291
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVersion($this->args['SSLVERSION']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
292
293
        $this->$method();
294
    }
295
296
    /**
297
     * @dataProvider getSingleHttpTestMethods
298
     * @param string $method
299
     */
300
    public function testHttpsSocket($method)
301
    {
302
        if ($this->args['HTTPSSERVER'] == '')
303
        {
304
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https');
305
            return;
306
        }
307
308
        /// @todo investigate: can we make this work?
309
        if (version_compare(PHP_VERSION, '7.2', '<'))
310
        {
311
            if (is_readable('/etc/os-release')) {
312
                $output = file_get_contents('/etc/os-release');
313
                preg_match('/VERSION="?([0-9]+)/', $output, $matches);
314
                $ubuntuVersion = @$matches[1];
315
            } else {
316
                exec('uname -a', $output, $retval);
317
                preg_match('/ubunutu([0-9]+)/', $output[0], $matches);
318
                $ubuntuVersion = @$matches[1];
319
            }
320
            if ($ubuntuVersion >= 20) {
321
                $this->markTestSkipped('HTTPS via Socket known to fail on php less than 7.2 on Ubuntu 20 and higher');
322
                return;
323
            }
324
        }
325
326
        $this->client->server = $this->args['HTTPSSERVER'];
327
        $this->method = 'https';
328
        $this->client->method = 'https';
329
        $this->client->path = $this->args['HTTPSURI'];
330
        $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyPeer() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

330
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
331
        $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyHost() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

331
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
332
        $this->client->setSSLVersion($this->args['SSLVERSION']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVersion() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

332
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVersion($this->args['SSLVERSION']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
333
        $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_NEVER);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setUseCurl() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

333
        /** @scrutinizer ignore-deprecated */ $this->client->setUseCurl(\PhpXmlRpc\Client::USE_CURL_NEVER);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
334
335
        if (version_compare(PHP_VERSION, '8.0', '>'))
336
        {
337
            $version = explode('.', PHP_VERSION);
338
            $this->client->setOption(\PhpXmlRpc\Client::OPT_EXTRA_SOCKET_OPTS,
339
                array('ssl' => array('security_level' => 2 + $version[1])));
340
        }
341
342
        $this->$method();
343
    }
344
345
    /**
346
     * @dataProvider getSingleHttpTestMethods
347
     * @param string $method
348
     */
349
    public function testHttpsProxy($method)
350
    {
351
        if (!function_exists('curl_init'))
352
        {
353
            $this->markTestSkipped('CURL missing: cannot test https w. proxy');
354
            return;
355
        }
356
        else if ($this->args['PROXYSERVER'] == '')
357
        {
358
            $this->markTestSkipped('PROXYSERVER definition missing: cannot test proxy w. https');
359
            return;
360
        }
361
        else if ($this->args['HTTPSSERVER'] == '')
362
        {
363
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https w. proxy');
364
            return;
365
        }
366
367
        $this->client->server = $this->args['HTTPSSERVER'];
368
        $this->method = 'https';
369
        $this->client->method = 'https';
370
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
371
        $this->client->path = $this->args['HTTPSURI'];
372
        $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyPeer() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

372
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
373
        $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyHost() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

373
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
374
        $this->client->setSSLVersion($this->args['SSLVERSION']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVersion() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

374
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVersion($this->args['SSLVERSION']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
375
376
        $this->$method();
377
    }
378
379
    /**
380
     * @dataProvider getSingleHttpTestMethods
381
     * @param string $method
382
     */
383
    public function testHttp2($method)
384
    {
385
        if (!function_exists('curl_init'))
386
        {
387
            $this->markTestSkipped('CURL missing: cannot test http/2');
388
            return;
389
        } else if (!defined('CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE'))
390
        {
391
            $this->markTestSkipped('CURL http/2 support missing: cannot test http/2');
392
            return;
393
        }
394
395
        $this->method = 'h2c'; // not an error the double assignment!
396
        $this->client->method = 'h2c';
397
        //$this->client->keepalive = false; // q: is this a good idea?
398
399
        $this->expectHttp2 = true;
400
        $this->$method();
401
        $this->expectHttp2 = false;
402
    }
403
404
    /**
405
     * @dataProvider getSingleHttpTestMethods
406
     * @param string $method
407
     */
408
    public function testHttp2tls($method)
409
    {
410
        if (!function_exists('curl_init'))
411
        {
412
            $this->markTestSkipped('CURL missing: cannot test http/2 tls');
413
            return;
414
        } else if ($this->args['HTTPSSERVER'] == '')
415
        {
416
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test http/2 tls');
417
            return;
418
        } else if (!defined('CURL_HTTP_VERSION_2_0'))
419
        {
420
            $this->markTestSkipped('CURL http/2 support missing: cannot test http/2 tls');
421
            return;
422
        }
423
424
        $this->client->server = $this->args['HTTPSSERVER'];
425
        $this->method = 'h2';
426
        $this->client->method = 'h2';
427
        $this->client->path = $this->args['HTTPSURI'];
428
        $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyPeer() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

428
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyPeer(!$this->args['HTTPSIGNOREPEER']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
429
        $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVerifyHost() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

429
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVerifyHost($this->args['HTTPSVERIFYHOST']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
430
        $this->client->setSSLVersion($this->args['SSLVERSION']);
0 ignored issues
show
Deprecated Code introduced by
The function PhpXmlRpc\Client::setSSLVersion() has been deprecated: use setOption ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

430
        /** @scrutinizer ignore-deprecated */ $this->client->setSSLVersion($this->args['SSLVERSION']);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
431
432
        $this->expectHttp2 = true;
433
        $this->$method();
434
        $this->expectHttp2 = false;
435
    }
436
437
    /**
438
     * @dataProvider getSingleHttpTestMethods
439
     * @param string $method
440
     */
441
    public function testUTF8Responses($method)
442
    {
443
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'UTF-8'));
444
445
        $this->$method();
446
    }
447
448
    /**
449
     * @dataProvider getSingleHttpTestMethods
450
     * @param string $method
451
     */
452
    public function testUTF8Requests($method)
453
    {
454
        $this->client->request_charset_encoding = 'UTF-8';
0 ignored issues
show
Bug Best Practice introduced by
The property $request_charset_encoding is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
455
456
        $this->$method();
457
    }
458
459
    /**
460
     * @dataProvider getSingleHttpTestMethods
461
     * @param string $method
462
     */
463
    public function testISOResponses($method)
464
    {
465
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'ISO-8859-1'));
466
467
        $this->$method();
468
    }
469
470
    /**
471
     * @dataProvider getSingleHttpTestMethods
472
     * @param string $method
473
     */
474
    public function testISORequests($method)
475
    {
476
        $this->client->request_charset_encoding = 'ISO-8859-1';
0 ignored issues
show
Bug Best Practice introduced by
The property $request_charset_encoding is declared protected in PhpXmlRpc\Client. Since you implement __set, consider adding a @property or @property-write.
Loading history...
477
478
        $this->$method();
479
    }
480
481
    /**
482
     * @dataProvider getSingleHttpTestMethods
483
     * @param string $method
484
     */
485
    public function testBasicAuth($method)
486
    {
487
        $this->client->setCredentials('test', 'test');
488
        $this->addQueryParams(array('FORCE_AUTH' => 'Basic'));
489
490
        $this->$method();
491
    }
492
493
    /**
494
     * @dataProvider getSingleHttpTestMethods
495
     * @param string $method
496
     */
497
    public function testDigestAuth($method)
498
    {
499
        if (!function_exists('curl_init'))
500
        {
501
            $this->markTestSkipped('CURL missing: cannot test digest auth functionality');
502
            return;
503
        }
504
505
        $this->client->setCredentials('test', 'test', CURLAUTH_DIGEST);
506
        $this->addQueryParams(array('FORCE_AUTH' => 'Digest'));
507
        $this->method = 'http11';
508
        $this->client->method = 'http11';
509
510
        $this->$method();
511
    }
512
513
    /**
514
     * @param \PhpXmlRpc\Response $r
515
     * @return void
516
     */
517
    protected function validateResponse($r)
518
    {
519
        if ($this->expectHttp2) {
520
            $hr = $r->httpResponse();
521
            $this->assertEquals("2", @$hr['protocol_version']);
522
        } else {
523
524
        }
525
    }
526
}
527