Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[lhc/web/wiklou.git] / tests / integration / includes / http / CurlHttpRequestTest.php
1 <?php
2
3 /**
4 * @group large
5 * @covers CurlHttpRequest
6 */
7 class CurlHttpRequestTest extends MWHttpRequestTestCase {
8 protected static $httpEngine = 'curl';
9
10 /**
11 * Constant values are from PHP 5.3.28 using cURL 7.24.0
12 * @see https://www.php.net/manual/en/curl.constants.php
13 *
14 * All constant values are present so that developers don’t need to remember
15 * to add them if added at a later date. The commented out constants were
16 * not found anywhere in the MediaWiki core code.
17 *
18 * Commented out constants that were not available in:
19 * HipHop VM 3.3.0 (rel)
20 * Compiler: heads/master-0-g08810d920dfff59e0774cf2d651f92f13a637175
21 * Repo schema: 3214fc2c684a4520485f715ee45f33f2182324b1
22 * Extension API: 20140829
23 *
24 * Commented out constants that were removed in PHP 5.6.0
25 */
26 public function provideCurlConstants() {
27 return [
28 [ 'CURLAUTH_ANY' ],
29 [ 'CURLAUTH_ANYSAFE' ],
30 [ 'CURLAUTH_BASIC' ],
31 [ 'CURLAUTH_DIGEST' ],
32 [ 'CURLAUTH_GSSNEGOTIATE' ],
33 [ 'CURLAUTH_NTLM' ],
34 // [ 'CURLCLOSEPOLICY_CALLBACK' ], // removed in PHP 5.6.0
35 // [ 'CURLCLOSEPOLICY_LEAST_RECENTLY_USED' ], // removed in PHP 5.6.0
36 // [ 'CURLCLOSEPOLICY_LEAST_TRAFFIC' ], // removed in PHP 5.6.0
37 // [ 'CURLCLOSEPOLICY_OLDEST' ], // removed in PHP 5.6.0
38 // [ 'CURLCLOSEPOLICY_SLOWEST' ], // removed in PHP 5.6.0
39 [ 'CURLE_ABORTED_BY_CALLBACK' ],
40 [ 'CURLE_BAD_CALLING_ORDER' ],
41 [ 'CURLE_BAD_CONTENT_ENCODING' ],
42 [ 'CURLE_BAD_FUNCTION_ARGUMENT' ],
43 [ 'CURLE_BAD_PASSWORD_ENTERED' ],
44 [ 'CURLE_COULDNT_CONNECT' ],
45 [ 'CURLE_COULDNT_RESOLVE_HOST' ],
46 [ 'CURLE_COULDNT_RESOLVE_PROXY' ],
47 [ 'CURLE_FAILED_INIT' ],
48 [ 'CURLE_FILESIZE_EXCEEDED' ],
49 [ 'CURLE_FILE_COULDNT_READ_FILE' ],
50 [ 'CURLE_FTP_ACCESS_DENIED' ],
51 [ 'CURLE_FTP_BAD_DOWNLOAD_RESUME' ],
52 [ 'CURLE_FTP_CANT_GET_HOST' ],
53 [ 'CURLE_FTP_CANT_RECONNECT' ],
54 [ 'CURLE_FTP_COULDNT_GET_SIZE' ],
55 [ 'CURLE_FTP_COULDNT_RETR_FILE' ],
56 [ 'CURLE_FTP_COULDNT_SET_ASCII' ],
57 [ 'CURLE_FTP_COULDNT_SET_BINARY' ],
58 [ 'CURLE_FTP_COULDNT_STOR_FILE' ],
59 [ 'CURLE_FTP_COULDNT_USE_REST' ],
60 [ 'CURLE_FTP_PORT_FAILED' ],
61 [ 'CURLE_FTP_QUOTE_ERROR' ],
62 [ 'CURLE_FTP_SSL_FAILED' ],
63 [ 'CURLE_FTP_USER_PASSWORD_INCORRECT' ],
64 [ 'CURLE_FTP_WEIRD_227_FORMAT' ],
65 [ 'CURLE_FTP_WEIRD_PASS_REPLY' ],
66 [ 'CURLE_FTP_WEIRD_PASV_REPLY' ],
67 [ 'CURLE_FTP_WEIRD_SERVER_REPLY' ],
68 [ 'CURLE_FTP_WEIRD_USER_REPLY' ],
69 [ 'CURLE_FTP_WRITE_ERROR' ],
70 [ 'CURLE_FUNCTION_NOT_FOUND' ],
71 [ 'CURLE_GOT_NOTHING' ],
72 [ 'CURLE_HTTP_NOT_FOUND' ],
73 [ 'CURLE_HTTP_PORT_FAILED' ],
74 [ 'CURLE_HTTP_POST_ERROR' ],
75 [ 'CURLE_HTTP_RANGE_ERROR' ],
76 [ 'CURLE_LDAP_CANNOT_BIND' ],
77 [ 'CURLE_LDAP_INVALID_URL' ],
78 [ 'CURLE_LDAP_SEARCH_FAILED' ],
79 [ 'CURLE_LIBRARY_NOT_FOUND' ],
80 [ 'CURLE_MALFORMAT_USER' ],
81 [ 'CURLE_OBSOLETE' ],
82 [ 'CURLE_OK' ],
83 [ 'CURLE_OPERATION_TIMEOUTED' ],
84 [ 'CURLE_OUT_OF_MEMORY' ],
85 [ 'CURLE_PARTIAL_FILE' ],
86 [ 'CURLE_READ_ERROR' ],
87 [ 'CURLE_RECV_ERROR' ],
88 [ 'CURLE_SEND_ERROR' ],
89 [ 'CURLE_SHARE_IN_USE' ],
90 // [ 'CURLE_SSH' ], // not present in HHVM 3.3.0-dev
91 [ 'CURLE_SSL_CACERT' ],
92 [ 'CURLE_SSL_CERTPROBLEM' ],
93 [ 'CURLE_SSL_CIPHER' ],
94 [ 'CURLE_SSL_CONNECT_ERROR' ],
95 [ 'CURLE_SSL_ENGINE_NOTFOUND' ],
96 [ 'CURLE_SSL_ENGINE_SETFAILED' ],
97 [ 'CURLE_SSL_PEER_CERTIFICATE' ],
98 [ 'CURLE_TELNET_OPTION_SYNTAX' ],
99 [ 'CURLE_TOO_MANY_REDIRECTS' ],
100 [ 'CURLE_UNKNOWN_TELNET_OPTION' ],
101 [ 'CURLE_UNSUPPORTED_PROTOCOL' ],
102 [ 'CURLE_URL_MALFORMAT' ],
103 [ 'CURLE_URL_MALFORMAT_USER' ],
104 [ 'CURLE_WRITE_ERROR' ],
105 [ 'CURLFTPAUTH_DEFAULT' ],
106 [ 'CURLFTPAUTH_SSL' ],
107 [ 'CURLFTPAUTH_TLS' ],
108 // [ 'CURLFTPMETHOD_MULTICWD' ], // not present in HHVM 3.3.0-dev
109 // [ 'CURLFTPMETHOD_NOCWD' ], // not present in HHVM 3.3.0-dev
110 // [ 'CURLFTPMETHOD_SINGLECWD' ], // not present in HHVM 3.3.0-dev
111 [ 'CURLFTPSSL_ALL' ],
112 [ 'CURLFTPSSL_CONTROL' ],
113 [ 'CURLFTPSSL_NONE' ],
114 [ 'CURLFTPSSL_TRY' ],
115 // [ 'CURLINFO_CERTINFO' ], // not present in HHVM 3.3.0-dev
116 [ 'CURLINFO_CONNECT_TIME' ],
117 [ 'CURLINFO_CONTENT_LENGTH_DOWNLOAD' ],
118 [ 'CURLINFO_CONTENT_LENGTH_UPLOAD' ],
119 [ 'CURLINFO_CONTENT_TYPE' ],
120 [ 'CURLINFO_EFFECTIVE_URL' ],
121 [ 'CURLINFO_FILETIME' ],
122 [ 'CURLINFO_HEADER_OUT' ],
123 [ 'CURLINFO_HEADER_SIZE' ],
124 [ 'CURLINFO_HTTP_CODE' ],
125 [ 'CURLINFO_NAMELOOKUP_TIME' ],
126 [ 'CURLINFO_PRETRANSFER_TIME' ],
127 [ 'CURLINFO_PRIVATE' ],
128 [ 'CURLINFO_REDIRECT_COUNT' ],
129 [ 'CURLINFO_REDIRECT_TIME' ],
130 // [ 'CURLINFO_REDIRECT_URL' ], // not present in HHVM 3.3.0-dev
131 [ 'CURLINFO_REQUEST_SIZE' ],
132 [ 'CURLINFO_SIZE_DOWNLOAD' ],
133 [ 'CURLINFO_SIZE_UPLOAD' ],
134 [ 'CURLINFO_SPEED_DOWNLOAD' ],
135 [ 'CURLINFO_SPEED_UPLOAD' ],
136 [ 'CURLINFO_SSL_VERIFYRESULT' ],
137 [ 'CURLINFO_STARTTRANSFER_TIME' ],
138 [ 'CURLINFO_TOTAL_TIME' ],
139 [ 'CURLMSG_DONE' ],
140 [ 'CURLM_BAD_EASY_HANDLE' ],
141 [ 'CURLM_BAD_HANDLE' ],
142 [ 'CURLM_CALL_MULTI_PERFORM' ],
143 [ 'CURLM_INTERNAL_ERROR' ],
144 [ 'CURLM_OK' ],
145 [ 'CURLM_OUT_OF_MEMORY' ],
146 [ 'CURLOPT_AUTOREFERER' ],
147 [ 'CURLOPT_BINARYTRANSFER' ],
148 [ 'CURLOPT_BUFFERSIZE' ],
149 [ 'CURLOPT_CAINFO' ],
150 [ 'CURLOPT_CAPATH' ],
151 // [ 'CURLOPT_CERTINFO' ], // not present in HHVM 3.3.0-dev
152 // [ 'CURLOPT_CLOSEPOLICY' ], // removed in PHP 5.6.0
153 [ 'CURLOPT_CONNECTTIMEOUT' ],
154 [ 'CURLOPT_CONNECTTIMEOUT_MS' ],
155 [ 'CURLOPT_COOKIE' ],
156 [ 'CURLOPT_COOKIEFILE' ],
157 [ 'CURLOPT_COOKIEJAR' ],
158 [ 'CURLOPT_COOKIESESSION' ],
159 [ 'CURLOPT_CRLF' ],
160 [ 'CURLOPT_CUSTOMREQUEST' ],
161 [ 'CURLOPT_DNS_CACHE_TIMEOUT' ],
162 [ 'CURLOPT_DNS_USE_GLOBAL_CACHE' ],
163 [ 'CURLOPT_EGDSOCKET' ],
164 [ 'CURLOPT_ENCODING' ],
165 [ 'CURLOPT_FAILONERROR' ],
166 [ 'CURLOPT_FILE' ],
167 [ 'CURLOPT_FILETIME' ],
168 [ 'CURLOPT_FOLLOWLOCATION' ],
169 [ 'CURLOPT_FORBID_REUSE' ],
170 [ 'CURLOPT_FRESH_CONNECT' ],
171 [ 'CURLOPT_FTPAPPEND' ],
172 [ 'CURLOPT_FTPLISTONLY' ],
173 [ 'CURLOPT_FTPPORT' ],
174 [ 'CURLOPT_FTPSSLAUTH' ],
175 [ 'CURLOPT_FTP_CREATE_MISSING_DIRS' ],
176 // [ 'CURLOPT_FTP_FILEMETHOD' ], // not present in HHVM 3.3.0-dev
177 // [ 'CURLOPT_FTP_SKIP_PASV_IP' ], // not present in HHVM 3.3.0-dev
178 [ 'CURLOPT_FTP_SSL' ],
179 [ 'CURLOPT_FTP_USE_EPRT' ],
180 [ 'CURLOPT_FTP_USE_EPSV' ],
181 [ 'CURLOPT_HEADER' ],
182 [ 'CURLOPT_HEADERFUNCTION' ],
183 [ 'CURLOPT_HTTP200ALIASES' ],
184 [ 'CURLOPT_HTTPAUTH' ],
185 [ 'CURLOPT_HTTPGET' ],
186 [ 'CURLOPT_HTTPHEADER' ],
187 [ 'CURLOPT_HTTPPROXYTUNNEL' ],
188 [ 'CURLOPT_HTTP_VERSION' ],
189 [ 'CURLOPT_INFILE' ],
190 [ 'CURLOPT_INFILESIZE' ],
191 [ 'CURLOPT_INTERFACE' ],
192 [ 'CURLOPT_IPRESOLVE' ],
193 // [ 'CURLOPT_KEYPASSWD' ], // not present in HHVM 3.3.0-dev
194 [ 'CURLOPT_KRB4LEVEL' ],
195 [ 'CURLOPT_LOW_SPEED_LIMIT' ],
196 [ 'CURLOPT_LOW_SPEED_TIME' ],
197 [ 'CURLOPT_MAXCONNECTS' ],
198 [ 'CURLOPT_MAXREDIRS' ],
199 // [ 'CURLOPT_MAX_RECV_SPEED_LARGE' ], // not present in HHVM 3.3.0-dev
200 // [ 'CURLOPT_MAX_SEND_SPEED_LARGE' ], // not present in HHVM 3.3.0-dev
201 [ 'CURLOPT_NETRC' ],
202 [ 'CURLOPT_NOBODY' ],
203 [ 'CURLOPT_NOPROGRESS' ],
204 [ 'CURLOPT_NOSIGNAL' ],
205 [ 'CURLOPT_PORT' ],
206 [ 'CURLOPT_POST' ],
207 [ 'CURLOPT_POSTFIELDS' ],
208 [ 'CURLOPT_POSTQUOTE' ],
209 [ 'CURLOPT_POSTREDIR' ],
210 [ 'CURLOPT_PRIVATE' ],
211 [ 'CURLOPT_PROGRESSFUNCTION' ],
212 // [ 'CURLOPT_PROTOCOLS' ], // not present in HHVM 3.3.0-dev
213 [ 'CURLOPT_PROXY' ],
214 [ 'CURLOPT_PROXYAUTH' ],
215 [ 'CURLOPT_PROXYPORT' ],
216 [ 'CURLOPT_PROXYTYPE' ],
217 [ 'CURLOPT_PROXYUSERPWD' ],
218 [ 'CURLOPT_PUT' ],
219 [ 'CURLOPT_QUOTE' ],
220 [ 'CURLOPT_RANDOM_FILE' ],
221 [ 'CURLOPT_RANGE' ],
222 [ 'CURLOPT_READDATA' ],
223 [ 'CURLOPT_READFUNCTION' ],
224 // [ 'CURLOPT_REDIR_PROTOCOLS' ], // not present in HHVM 3.3.0-dev
225 [ 'CURLOPT_REFERER' ],
226 [ 'CURLOPT_RESUME_FROM' ],
227 [ 'CURLOPT_RETURNTRANSFER' ],
228 // [ 'CURLOPT_SSH_AUTH_TYPES' ], // not present in HHVM 3.3.0-dev
229 // [ 'CURLOPT_SSH_HOST_PUBLIC_KEY_MD5' ], // not present in HHVM 3.3.0-dev
230 // [ 'CURLOPT_SSH_PRIVATE_KEYFILE' ], // not present in HHVM 3.3.0-dev
231 // [ 'CURLOPT_SSH_PUBLIC_KEYFILE' ], // not present in HHVM 3.3.0-dev
232 [ 'CURLOPT_SSLCERT' ],
233 [ 'CURLOPT_SSLCERTPASSWD' ],
234 [ 'CURLOPT_SSLCERTTYPE' ],
235 [ 'CURLOPT_SSLENGINE' ],
236 [ 'CURLOPT_SSLENGINE_DEFAULT' ],
237 [ 'CURLOPT_SSLKEY' ],
238 [ 'CURLOPT_SSLKEYPASSWD' ],
239 [ 'CURLOPT_SSLKEYTYPE' ],
240 [ 'CURLOPT_SSLVERSION' ],
241 [ 'CURLOPT_SSL_CIPHER_LIST' ],
242 [ 'CURLOPT_SSL_VERIFYHOST' ],
243 [ 'CURLOPT_SSL_VERIFYPEER' ],
244 [ 'CURLOPT_STDERR' ],
245 [ 'CURLOPT_TCP_NODELAY' ],
246 [ 'CURLOPT_TIMECONDITION' ],
247 [ 'CURLOPT_TIMEOUT' ],
248 [ 'CURLOPT_TIMEOUT_MS' ],
249 [ 'CURLOPT_TIMEVALUE' ],
250 [ 'CURLOPT_TRANSFERTEXT' ],
251 [ 'CURLOPT_UNRESTRICTED_AUTH' ],
252 [ 'CURLOPT_UPLOAD' ],
253 [ 'CURLOPT_URL' ],
254 [ 'CURLOPT_USERAGENT' ],
255 [ 'CURLOPT_USERPWD' ],
256 [ 'CURLOPT_VERBOSE' ],
257 [ 'CURLOPT_WRITEFUNCTION' ],
258 [ 'CURLOPT_WRITEHEADER' ],
259 // [ 'CURLPROTO_ALL' ], // not present in HHVM 3.3.0-dev
260 // [ 'CURLPROTO_DICT' ], // not present in HHVM 3.3.0-dev
261 // [ 'CURLPROTO_FILE' ], // not present in HHVM 3.3.0-dev
262 // [ 'CURLPROTO_FTP' ], // not present in HHVM 3.3.0-dev
263 // [ 'CURLPROTO_FTPS' ], // not present in HHVM 3.3.0-dev
264 // [ 'CURLPROTO_HTTP' ], // not present in HHVM 3.3.0-dev
265 // [ 'CURLPROTO_HTTPS' ], // not present in HHVM 3.3.0-dev
266 // [ 'CURLPROTO_LDAP' ], // not present in HHVM 3.3.0-dev
267 // [ 'CURLPROTO_LDAPS' ], // not present in HHVM 3.3.0-dev
268 // [ 'CURLPROTO_SCP' ], // not present in HHVM 3.3.0-dev
269 // [ 'CURLPROTO_SFTP' ], // not present in HHVM 3.3.0-dev
270 // [ 'CURLPROTO_TELNET' ], // not present in HHVM 3.3.0-dev
271 // [ 'CURLPROTO_TFTP' ], // not present in HHVM 3.3.0-dev
272 [ 'CURLPROXY_HTTP' ],
273 // [ 'CURLPROXY_SOCKS4' ], // not present in HHVM 3.3.0-dev
274 [ 'CURLPROXY_SOCKS5' ],
275 // [ 'CURLSSH_AUTH_DEFAULT' ], // not present in HHVM 3.3.0-dev
276 // [ 'CURLSSH_AUTH_HOST' ], // not present in HHVM 3.3.0-dev
277 // [ 'CURLSSH_AUTH_KEYBOARD' ], // not present in HHVM 3.3.0-dev
278 // [ 'CURLSSH_AUTH_NONE' ], // not present in HHVM 3.3.0-dev
279 // [ 'CURLSSH_AUTH_PASSWORD' ], // not present in HHVM 3.3.0-dev
280 // [ 'CURLSSH_AUTH_PUBLICKEY' ], // not present in HHVM 3.3.0-dev
281 [ 'CURLVERSION_NOW' ],
282 [ 'CURL_HTTP_VERSION_1_0' ],
283 [ 'CURL_HTTP_VERSION_1_1' ],
284 [ 'CURL_HTTP_VERSION_NONE' ],
285 [ 'CURL_IPRESOLVE_V4' ],
286 [ 'CURL_IPRESOLVE_V6' ],
287 [ 'CURL_IPRESOLVE_WHATEVER' ],
288 [ 'CURL_NETRC_IGNORED' ],
289 [ 'CURL_NETRC_OPTIONAL' ],
290 [ 'CURL_NETRC_REQUIRED' ],
291 [ 'CURL_TIMECOND_IFMODSINCE' ],
292 [ 'CURL_TIMECOND_IFUNMODSINCE' ],
293 [ 'CURL_TIMECOND_LASTMOD' ],
294 [ 'CURL_VERSION_IPV6' ],
295 [ 'CURL_VERSION_KERBEROS4' ],
296 [ 'CURL_VERSION_LIBZ' ],
297 [ 'CURL_VERSION_SSL' ],
298 ];
299 }
300
301 /**
302 * Added this test based on an issue experienced with HHVM 3.3.0-dev
303 * where it did not define a cURL constant. T72570
304 *
305 * @dataProvider provideCurlConstants
306 * @coversNothing
307 */
308 public function testCurlConstants( $value ) {
309 $loaded = extension_loaded( 'curl' );
310 if ( !$loaded ) {
311 $this->markTestSkipped( "PHP extension 'curl' is not loaded, skipping." );
312 }
313
314 $this->assertTrue( defined( $value ), "Is $value defined?" );
315 }
316 }