Passed
Push — master ( 2d2eab...d0215f )
by Gaetano
09:29
created

HTTPTest::testHttp11Deflate()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 9
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 14
rs 9.9666
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
        /// @todo replace with setOption when dropping the BC layer
109
        $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

109
        /** @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...
110
        $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

110
        /** @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...
111
112
        $this->$method();
113
    }
114
115
    public function testAcceptCharset()
116
    {
117
        if (version_compare(PHP_VERSION, '5.6.0', '<'))
118
        {
119
            $this->markTestSkipped('cannot test accept-charset on php < 5.6');
120
            return;
121
        }
122
        if (!function_exists('mb_list_encodings'))
123
        {
124
            $this->markTestSkipped('mbstring missing: cannot test accept-charset');
125
            return;
126
        }
127
128
        $r = new \PhpXmlRpc\Request('examples.stringecho', array(new \PhpXmlRpc\Value('€')));
129
        //chr(164)
130
131
        $originalEncoding = \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding;
132
        \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'UTF-8';
133
134
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'auto'));
135
        $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...
136
            'utf-1234;q=0.1',
137
            'windows-1252;q=0.8'
138
        );
139
        $v = $this->send($r, 0, true);
140
        $h = $v->httpResponse();
141
        $this->assertEquals('text/xml; charset=Windows-1252', $h['headers']['content-type']);
142
        if ($v) {
143
            $this->assertEquals('€', $v->value()->scalarval());
144
        }
145
        \PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = $originalEncoding;
146
    }
147
148
    /**
149
     * @dataProvider getSingleHttpTestMethods
150
     * @param string $method
151
     */
152
    public function testProxy($method)
153
    {
154
        if ($this->args['PROXYSERVER'] == '')
155
        {
156
            $this->markTestSkipped('PROXYSERVER definition missing: cannot test proxy');
157
            return;
158
        }
159
160
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
161
162
        $this->$method();
163
    }
164
165
    /**
166
     * @dataProvider getSingleHttpTestMethods
167
     * @param string $method
168
     */
169
    public function testHttp11($method)
170
    {
171
        if (!function_exists('curl_init'))
172
        {
173
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
174
            return;
175
        }
176
177
        $this->method = 'http11'; // not an error the double assignment!
178
        $this->client->method = 'http11';
179
        $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...
180
181
        $this->$method();
182
    }
183
184
    /**
185
     * @dataProvider getSingleHttpTestMethods
186
     * @param string $method
187
     */
188
    public function testHttp10Curl($method)
189
    {
190
        if (!function_exists('curl_init'))
191
        {
192
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
193
            return;
194
        }
195
196
        $this->method = 'http10'; // not an error the double assignment!
197
        $this->client->method = 'http10';
198
        /// @todo replace with setOption when dropping the BC layer
199
        $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...
200
        $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

200
        /** @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...
201
202
        $this->$method();
203
    }
204
205
    /**
206
     * @dataProvider getSingleHttpTestMethods
207
     * @param string $method
208
     */
209
    public function testHttp11Gzip($method)
210
    {
211
        if (!function_exists('curl_init'))
212
        {
213
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
214
            return;
215
        }
216
        $this->method = 'http11'; // not an error the double assignment!
217
        $this->client->method = 'http11';
218
        $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...
219
        $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...
220
        $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...
221
222
        $this->$method();
223
    }
224
225
    /**
226
     * @dataProvider getSingleHttpTestMethods
227
     * @param string $method
228
     */
229
    public function testHttp11Deflate($method)
230
    {
231
        if (!function_exists('curl_init'))
232
        {
233
            $this->markTestSkipped('CURL missing: cannot test http 1.1');
234
            return;
235
        }
236
        $this->method = 'http11'; // not an error the double assignment!
237
        $this->client->method = 'http11';
238
        $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...
239
        $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...
240
        $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...
241
242
        $this->$method();
243
    }
244
245
    /**
246
     * @dataProvider getSingleHttpTestMethods
247
     * @param string $method
248
     */
249
    public function testHttp11Proxy($method)
250
    {
251
        if (!function_exists('curl_init'))
252
        {
253
            $this->markTestSkipped('CURL missing: cannot test http 1.1 w. proxy');
254
            return;
255
        }
256
        else if ($this->args['PROXYSERVER'] == '')
257
        {
258
            $this->markTestSkipped('PROXYSERVER definition missing: cannot test proxy w. http 1.1');
259
            return;
260
        }
261
262
        $this->method = 'http11'; // not an error the double assignment!
263
        $this->client->method = 'http11';
264
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
265
        $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...
266
267
        $this->$method();
268
    }
269
270
    /**
271
     * @dataProvider getSingleHttpTestMethods
272
     * @param string $method
273
     */
274
    public function testHttps($method)
275
    {
276
        if (!function_exists('curl_init'))
277
        {
278
            $this->markTestSkipped('CURL missing: cannot test https functionality');
279
            return;
280
        }
281
        else if ($this->args['HTTPSSERVER'] == '')
282
        {
283
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https');
284
            return;
285
        }
286
287
        $this->client->server = $this->args['HTTPSSERVER'];
288
        $this->method = 'https';
289
        $this->client->method = 'https';
290
        $this->client->path = $this->args['HTTPSURI'];
291
        /// @todo replace with setOptions when dropping the BC layer
292
        $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

292
        /** @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...
293
        $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

293
        /** @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...
294
        $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

294
        /** @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...
295
        if (version_compare(PHP_VERSION, '8.0', '>') && $this->args['SSLVERSION'] == 0)
296
        {
297
            $version = explode('.', PHP_VERSION);
298
            $this->client->setSSLVersion(4 + $version[1]);
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

298
            /** @scrutinizer ignore-deprecated */ $this->client->setSSLVersion(4 + $version[1]);

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...
299
        }
300
301
        $this->$method();
302
    }
303
304
    /**
305
     * @dataProvider getSingleHttpTestMethods
306
     * @param string $method
307
     */
308
    public function testHttpsSocket($method)
309
    {
310
        if ($this->args['HTTPSSERVER'] == '')
311
        {
312
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https');
313
            return;
314
        }
315
316
        /// @todo investigate: can we make this work?
317
        if (version_compare(PHP_VERSION, '7.2', '<'))
318
        {
319
            if (is_readable('/etc/os-release')) {
320
                $output = file_get_contents('/etc/os-release');
321
                preg_match('/VERSION="?([0-9]+)/', $output, $matches);
322
                $ubuntuVersion = @$matches[1];
323
            } else {
324
                exec('uname -a', $output, $retval);
325
                preg_match('/ubunutu([0-9]+)/', $output[0], $matches);
326
                $ubuntuVersion = @$matches[1];
327
            }
328
            if ($ubuntuVersion >= 20) {
329
                $this->markTestSkipped('HTTPS via Socket known to fail on php less than 7.2 on Ubuntu 20 and higher');
330
                return;
331
            }
332
        }
333
334
        $this->client->server = $this->args['HTTPSSERVER'];
335
        $this->method = 'https';
336
        $this->client->method = 'https';
337
        $this->client->path = $this->args['HTTPSURI'];
338
        /// @todo replace with setOptions when dropping the BC layer
339
        $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

339
        /** @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...
340
        $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

340
        /** @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...
341
        $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

341
        /** @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...
342
        $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

342
        /** @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...
343
        if (version_compare(PHP_VERSION, '8.0', '>'))
344
        {
345
            $version = explode('.', PHP_VERSION);
346
            $this->client->setOption(\PhpXmlRpc\Client::OPT_EXTRA_SOCKET_OPTS,
347
                array('ssl' => array('security_level' => 2 + $version[1])));
348
            if ($this->args['SSLVERSION'] == 0) {
349
                $this->client->setSSLVersion(4 + $version[1]);
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

349
                /** @scrutinizer ignore-deprecated */ $this->client->setSSLVersion(4 + $version[1]);

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...
350
            }
351
        }
352
353
        $this->$method();
354
    }
355
356
    /**
357
     * @dataProvider getSingleHttpTestMethods
358
     * @param string $method
359
     */
360
    public function testHttpsProxy($method)
361
    {
362
        if (!function_exists('curl_init'))
363
        {
364
            $this->markTestSkipped('CURL missing: cannot test https w. proxy');
365
            return;
366
        }
367
        else if ($this->args['PROXYSERVER'] == '')
368
        {
369
            $this->markTestSkipped('PROXYSERVER definition missing: cannot test proxy w. https');
370
            return;
371
        }
372
        else if ($this->args['HTTPSSERVER'] == '')
373
        {
374
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test https w. proxy');
375
            return;
376
        }
377
378
        $this->method = 'https';
379
        $this->client->method = 'https';
380
        $this->client->server = $this->args['HTTPSSERVER'];
381
        $this->client->path = $this->args['HTTPSURI'];
382
        /// @todo replace with setOptions when dropping the BC layer
383
        $this->client->setProxy($this->args['PROXYSERVER'], $this->args['PROXYPORT']);
384
        $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

384
        /** @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...
385
        $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

385
        /** @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...
386
        $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

386
        /** @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...
387
        if (version_compare(PHP_VERSION, '8.0', '>') && $this->args['SSLVERSION'] == 0)
388
        {
389
            $version = explode('.', PHP_VERSION);
390
            $this->client->setSSLVersion(4 + $version[1]);
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

390
            /** @scrutinizer ignore-deprecated */ $this->client->setSSLVersion(4 + $version[1]);

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...
391
        }
392
393
        $this->$method();
394
    }
395
396
    /**
397
     * @dataProvider getSingleHttpTestMethods
398
     * @param string $method
399
     */
400
    public function testHttp2NoTls($method)
401
    {
402
        if (!function_exists('curl_init'))
403
        {
404
            $this->markTestSkipped('CURL missing: cannot test http/2');
405
            return;
406
        } else if (!defined('CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE'))
407
        {
408
            $this->markTestSkipped('CURL http/2 support missing: cannot test http/2');
409
            return;
410
        }
411
412
        $this->method = 'h2c'; // not an error the double assignment!
413
        $this->client->method = 'h2c';
414
        //$this->client->keepalive = false; // q: is this a good idea?
415
416
        $this->expectHttp2 = true;
417
        $this->$method();
418
        $this->expectHttp2 = false;
419
    }
420
421
    /**
422
     * @dataProvider getSingleHttpTestMethods
423
     * @param string $method
424
     */
425
    public function testHttp2tls($method)
426
    {
427
        if (!function_exists('curl_init'))
428
        {
429
            $this->markTestSkipped('CURL missing: cannot test http/2 tls');
430
            return;
431
        } else if ($this->args['HTTPSSERVER'] == '')
432
        {
433
            $this->markTestSkipped('HTTPS SERVER definition missing: cannot test http/2 tls');
434
            return;
435
        } else if (!defined('CURL_HTTP_VERSION_2_0'))
436
        {
437
            $this->markTestSkipped('CURL http/2 support missing: cannot test http/2 tls');
438
            return;
439
        }
440
441
        $this->method = 'h2';
442
        $this->client->method = 'h2';
443
        $this->client->server = $this->args['HTTPSSERVER'];
444
        $this->client->path = $this->args['HTTPSURI'];
445
        /// @todo replace with setOptions when dropping the BC layer
446
        $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

446
        /** @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...
447
        $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

447
        /** @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...
448
        $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

448
        /** @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...
449
450
        $this->expectHttp2 = true;
451
        $this->$method();
452
        $this->expectHttp2 = false;
453
    }
454
455
    /**
456
     * @dataProvider getSingleHttpTestMethods
457
     * @param string $method
458
     */
459
    public function testUTF8Responses($method)
460
    {
461
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'UTF-8'));
462
463
        $this->$method();
464
    }
465
466
    /**
467
     * @dataProvider getSingleHttpTestMethods
468
     * @param string $method
469
     */
470
    public function testUTF8Requests($method)
471
    {
472
        $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...
473
474
        $this->$method();
475
    }
476
477
    /**
478
     * @dataProvider getSingleHttpTestMethods
479
     * @param string $method
480
     */
481
    public function testISOResponses($method)
482
    {
483
        $this->addQueryParams(array('RESPONSE_ENCODING' => 'ISO-8859-1'));
484
485
        $this->$method();
486
    }
487
488
    /**
489
     * @dataProvider getSingleHttpTestMethods
490
     * @param string $method
491
     */
492
    public function testISORequests($method)
493
    {
494
        $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...
495
496
        $this->$method();
497
    }
498
499
    /**
500
     * @dataProvider getSingleHttpTestMethods
501
     * @param string $method
502
     */
503
    public function testBasicAuth($method)
504
    {
505
        $this->client->setCredentials('test', 'test');
506
        $this->addQueryParams(array('FORCE_AUTH' => 'Basic'));
507
508
        $this->$method();
509
    }
510
511
    /**
512
     * @dataProvider getSingleHttpTestMethods
513
     * @param string $method
514
     */
515
    public function testDigestAuth($method)
516
    {
517
        if (!function_exists('curl_init'))
518
        {
519
            $this->markTestSkipped('CURL missing: cannot test digest auth functionality');
520
            return;
521
        }
522
523
        $this->client->setCredentials('test', 'test', CURLAUTH_DIGEST);
524
        $this->addQueryParams(array('FORCE_AUTH' => 'Digest'));
525
        $this->method = 'http11';
526
        $this->client->method = 'http11';
527
528
        $this->$method();
529
    }
530
531
    /**
532
     * @param \PhpXmlRpc\Response $r
533
     * @return void
534
     */
535
    protected function validateResponse($r)
536
    {
537
        if ($this->expectHttp2) {
538
            $hr = $r->httpResponse();
539
            $this->assertEquals("2", @$hr['protocol_version']);
540
        } else {
541
542
        }
543
    }
544
}
545