Make WordPress Core

Changeset 50101


Ignore:
Timestamp:
01/30/2021 08:45:47 PM (6 years ago)
Author:
SergeyBiryukov
Message:

Tests: Use skipTestOnTimeout() in more HTTP tests.

Adjust it to handle more types of timeouts, e.g. "Resolving timed out", "Connection timed out".

Merges [38757], [43511], [43512], [46682], [46996] to the 4.3 branch.
See #51669.

Location:
branches/4.3
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/4.3

  • branches/4.3/tests/phpunit/includes/testcase.php

    r40244 r50101  
    112112                        $this->markTestSkipped( 'For automated test runs, this test is only run on trunk/master' );
    113113                }
     114        }
     115
     116        /**
     117         * Allow tests to be skipped if the HTTP request times out.
     118         *
     119         * @param array|WP_Error $response HTTP response.
     120         */
     121        public function skipTestOnTimeout( $response ) {
     122                if ( ! is_wp_error( $response ) ) {
     123                        return;
     124                }
     125                if ( 'connect() timed out!' === $response->get_error_message() ) {
     126                        $this->markTestSkipped( 'HTTP timeout' );
     127                }
     128
     129                if ( false !== strpos( $response->get_error_message(), 'timed out after' ) ) {
     130                        $this->markTestSkipped( 'HTTP timeout' );
     131                }
     132
     133                if ( 0 === strpos( $response->get_error_message(), 'stream_socket_client(): unable to connect to tcp://s.w.org:80' ) ) {
     134                        $this->markTestSkipped( 'HTTP timeout' );
     135                }
     136
    114137        }
    115138
  • branches/4.3/tests/phpunit/tests/http/base.php

    r32712 r50101  
    4545                // 5 : 5 & 301
    4646                $res = wp_remote_request($this->redirection_script . '?code=301&rt=' . 5, array('redirection' => 5) );
     47
     48                $this->skipTestOnTimeout( $res );
    4749                $this->assertFalse( is_wp_error($res) );
    4850                $this->assertEquals(200, (int)$res['response']['code'] );
    … …  
    5254                // 5 : 5 & 302
    5355                $res = wp_remote_request($this->redirection_script . '?code=302&rt=' . 5, array('redirection' => 5) );
     56
     57                $this->skipTestOnTimeout( $res );
    5458                $this->assertFalse( is_wp_error($res) );
    5559                $this->assertEquals(200, (int)$res['response']['code'] );
    … …  
    6266                // 5 > 0 & 301
    6367                $res = wp_remote_request($this->redirection_script . '?code=301&rt=' . 5, array('redirection' => 0) );
     68
     69                $this->skipTestOnTimeout( $res );
    6470                $this->assertFalse( is_wp_error($res) );
    6571                $this->assertEquals(301, (int)$res['response']['code'] );
    … …  
    7278                // 5 > 0 & 302
    7379                $res = wp_remote_request($this->redirection_script . '?code=302&rt=' . 5, array('redirection' => 0) );
     80
     81                $this->skipTestOnTimeout( $res );
    7482                $this->assertFalse( is_wp_error($res) );
    7583                $this->assertEquals(302, (int)$res['response']['code'] );
    … …  
    7987                // 5 - 5
    8088                $res = wp_remote_request($this->redirection_script . '?rt=' . 5, array('redirection' => 5) );
     89
     90                $this->skipTestOnTimeout( $res );
    8191                $this->assertFalse( is_wp_error($res) );
    8292                $this->assertEquals(200, (int)$res['response']['code'] );
    … …  
    8696                // No redirections on HEAD request:
    8797                $res = wp_remote_request($this->redirection_script . '?code=302&rt=' . 1, array('method' => 'HEAD') );
     98
     99                $this->skipTestOnTimeout( $res );
    88100                $this->assertFalse( is_wp_error($res) );
    89101                $this->assertEquals( 302, (int)$res['response']['code'] );
    … …  
    96108                // Redirections on HEAD request when Requested
    97109                $res = wp_remote_request($this->redirection_script . '?rt=' . 5, array('redirection' => 5, 'method' => 'HEAD') );
     110
     111                $this->skipTestOnTimeout( $res );
    98112                $this->assertFalse( is_wp_error($res) );
    99113                $this->assertEquals( 200, (int)$res['response']['code'] );
    … …  
    103117                // 10 > 5
    104118                $res = wp_remote_request($this->redirection_script . '?rt=' . 10, array('redirection' => 5) );
     119
     120                $this->skipTestOnTimeout( $res );
    105121                $this->assertTrue( is_wp_error($res), print_r($res, true) );
    106122        }
    … …  
    109125                // 6 > 5 (close edgecase)
    110126                $res = wp_remote_request($this->redirection_script . '?rt=' . 6, array('redirection' => 5) );
     127
     128                $this->skipTestOnTimeout( $res );
    111129                $this->assertTrue( is_wp_error($res) );
    112130        }
    … …  
    115133                // 4 < 5 (close edgecase)
    116134                $res = wp_remote_request($this->redirection_script . '?rt=' . 4, array('redirection' => 5) );
     135
     136                $this->skipTestOnTimeout( $res );
    117137                $this->assertFalse( is_wp_error($res) );
    118138        }
    … …  
    124144                // 0 redirections asked for, Should return the document?
    125145                $res = wp_remote_request($this->redirection_script . '?code=302&rt=' . 5, array('redirection' => 0) );
     146
     147                $this->skipTestOnTimeout( $res );
    126148                $this->assertFalse( is_wp_error($res) );
    127149                $this->assertEquals( 302, (int)$res['response']['code'] );
    … …  
    136158                // Prints PASS on initial load, FAIL if the client follows the specified redirection
    137159                $res = wp_remote_request( $this->redirection_script . '?201-location=true' );
     160
     161                $this->skipTestOnTimeout( $res );
    138162                $this->assertFalse( is_wp_error( $res ) );
    139163                $this->assertEquals( 'PASS', $res['body']);
    … …  
    150174                // Test 301 - POST to POST
    151175                $res = wp_remote_request( $url, array( 'method' => 'PUT', 'timeout' => 30 ) );
     176
     177                $this->skipTestOnTimeout( $res );
    152178                $this->assertEquals( 'PASS', wp_remote_retrieve_body( $res ) );
    153179                $this->assertTrue( !empty( $res['headers']['location'] ) );
    … …  
    162188                $res = wp_remote_request( $this->redirection_script . '?header-check', array('headers' => $headers) );
    163189
     190                $this->skipTestOnTimeout( $res );
    164191                $this->assertFalse( is_wp_error($res) );
    165192
    … …  
    191218                }
    192219
     220                $this->skipTestOnTimeout( $res );
    193221                $this->assertFalse( is_wp_error( $res ) );
    194222                $this->assertEquals( '', $res['body'] ); // The body should be empty.
    … …  
    212240                }
    213241
     242                $this->skipTestOnTimeout( $res );
    214243                $this->assertFalse( is_wp_error( $res ) );
    215244                $this->assertEquals( $size, $filesize ); // Check that the file is written to disk correctly without any extra characters
    … …  
    229258                $res = wp_remote_request( $url, array( 'timeout' => 30, 'limit_response_size' => $size ) );
    230259
     260                $this->skipTestOnTimeout( $res );
    231261                $this->assertFalse( is_wp_error( $res ) );
    232262                $this->assertEquals( $size, strlen( $res['body'] ) );
    … …  
    236266         * Test POST redirection methods
    237267         *
     268         * @dataProvider data_post_redirect_to_method_300
     269         *
    238270         * @ticket 17588
    239271         */
    240         function test_post_redirect_to_method_300() {
     272        function test_post_redirect_to_method_300( $response_code, $method ) {
    241273                $url = 'http://api.wordpress.org/core/tests/1.0/redirection.php?post-redirect-to-method=1';
    242274
    243                 // Test 300 - POST to POST
    244                 $res = wp_remote_post( add_query_arg( 'response_code', 300, $url ), array( 'timeout' => 30 ) );
    245                 $this->assertEquals( 'POST', wp_remote_retrieve_body( $res ) );
    246 
    247                 // Test 301 - POST to POST
    248                 $res = wp_remote_post( add_query_arg( 'response_code', 301, $url ), array( 'timeout' => 30 ) );
    249                 $this->assertEquals( 'POST', wp_remote_retrieve_body( $res ) );
    250 
    251                 // Test 302 - POST to GET
    252                 $res = wp_remote_post( add_query_arg( 'response_code', 302, $url ), array( 'timeout' => 30 ) );
    253                 $this->assertEquals( 'GET', wp_remote_retrieve_body( $res ) );
    254 
    255                 // Test 303 - POST to GET
    256                 $res = wp_remote_post( add_query_arg( 'response_code', 303, $url ), array( 'timeout' => 30 ) );
    257                 $this->assertEquals( 'GET', wp_remote_retrieve_body( $res ) );
    258 
    259                 // Test 304 - POST to POST
    260                 $res = wp_remote_post( add_query_arg( 'response_code', 304, $url ), array( 'timeout' => 30 ) );
    261                 $this->assertEquals( 'POST', wp_remote_retrieve_body( $res ) );
     275                $res = wp_remote_post( add_query_arg( 'response_code', $response_code, $url ), array( 'timeout' => 30 ) );
     276
     277                $this->skipTestOnTimeout( $res );
     278                $this->assertEquals( $method, wp_remote_retrieve_body( $res ) );
     279        }
     280
     281        public function data_post_redirect_to_method_300() {
     282                return array(
     283                        // Test 300 - POST to POST
     284                        array(
     285                                300,
     286                                'POST',
     287                        ),
     288                        // Test 301 - POST to POST
     289                        array(
     290                                301,
     291                                'POST',
     292                        ),
     293                        // Test 302 - POST to GET
     294                        array(
     295                                302,
     296                                'GET',
     297                        ),
     298                        // Test 303 - POST to GET
     299                        array(
     300                                303,
     301                                'GET',
     302                        ),
     303                        // Test 304 - POST to POST
     304                        array(
     305                                304,
     306                                'POST',
     307                        ),
     308                );
    262309        }
    263310
    … …  
    279326
    280327                $res = wp_remote_get( $url, $args );
     328
     329                $this->skipTestOnTimeout( $res );
    281330                $this->assertEquals( 'PASS', wp_remote_retrieve_body( $res ) );
    282331
    … …  
    292341                $res = wp_remote_head( $url, array( 'timeout' => 30 ) );
    293342
     343                $this->skipTestOnTimeout( $res );
    294344                $this->assertInternalType( 'array', wp_remote_retrieve_header( $res, 'location' ) );
    295345                $this->assertCount( 2, wp_remote_retrieve_header( $res, 'location' ) );
    296346
    297347                $res = wp_remote_get( $url, array( 'timeout' => 30 ) );
     348
     349                $this->skipTestOnTimeout( $res );
    298350                $this->assertEquals( 'PASS', wp_remote_retrieve_body( $res ) );
    299351
    … …  
    309361
    310362                $res = wp_remote_get( $url );
     363
     364                $this->skipTestOnTimeout( $res );
    311365                $this->assertEquals( 'PASS', wp_remote_retrieve_body( $res ) );
    312366        }
    … …  
    323377
    324378                $res = wp_remote_get( 'https://wordpress.org/' );
     379
     380                $this->skipTestOnTimeout( $res );
    325381                $this->assertTrue( ! is_wp_error( $res ), print_r( $res, true ) );
    326382        }
  • branches/4.3/tests/phpunit/tests/http/functions.php

    r31258 r50101  
    1818                $url = 'https://asdftestblog1.files.wordpress.com/2007/09/2007-06-30-dsc_4700-1.jpg';
    1919                $response = wp_remote_head( $url );
     20
     21                $this->skipTestOnTimeout( $response );
     22
    2023                $headers = wp_remote_retrieve_headers( $response );
    2124
    … …  
    3033                $url = 'https://asdftestblog1.wordpress.com/files/2007/09/2007-06-30-dsc_4700-1.jpg';
    3134                $response = wp_remote_head( $url );
     35
     36                $this->skipTestOnTimeout( $response );
    3237                $this->assertEquals( '301', wp_remote_retrieve_response_code( $response ) );
    3338        }
    … …  
    3540        function test_head_404() {
    3641                $url = 'https://asdftestblog1.files.wordpress.com/2007/09/awefasdfawef.jpg';
    37                 $headers = wp_remote_head( $url );
     42                $response = wp_remote_head( $url );
    3843
    39                 $this->assertInternalType( 'array', $headers, "Reply wasn't array." );
    40                 $this->assertEquals( '404', wp_remote_retrieve_response_code( $headers ) );
     44                $this->skipTestOnTimeout( $response );
     45                $this->assertInternalType( 'array', $response, "Reply wasn't array." );
     46                $this->assertEquals( '404', wp_remote_retrieve_response_code( $response ) );
    4147        }
    4248
    4349        function test_get_request() {
    4450                $url = 'https://asdftestblog1.files.wordpress.com/2007/09/2007-06-30-dsc_4700-1.jpg';
    45                 $file = tempnam('/tmp', 'testfile');
    4651
    47                 $headers = wp_get_http($url, $file);
     52                $response = wp_remote_get( $url );
     53
     54                $this->skipTestOnTimeout( $response );
     55
     56                $headers = wp_remote_retrieve_headers( $response );
    4857
    4958                // should return the same headers as a head request
    … …  
    5160                $this->assertEquals( 'image/jpeg', $headers['content-type'] );
    5261                $this->assertEquals( '40148', $headers['content-length'] );
    53                 $this->assertEquals( '200', $headers['response'] );
    54 
    55                 // make sure the file is ok
    56                 $this->assertEquals( 40148, filesize($file) );
    57                 $this->assertEquals( 'b0371a0fc575fcf77f62cd298571f53b', md5_file($file) );
     62                $this->assertEquals( '200', wp_remote_retrieve_response_code( $response ) );
    5863        }
    5964
    … …  
    6166                // this will redirect to asdftestblog1.files.wordpress.com
    6267                $url = 'https://asdftestblog1.wordpress.com/files/2007/09/2007-06-30-dsc_4700-1.jpg';
    63                 $file = tempnam('/tmp', 'testfile');
    6468
    65                 $headers = wp_get_http($url, $file);
     69                $response = wp_remote_get( $url );
     70
     71                $this->skipTestOnTimeout( $response );
     72
     73                $headers = wp_remote_retrieve_headers( $response );
    6674
    6775                // should return the same headers as a head request
    … …  
    6977                $this->assertEquals( 'image/jpeg', $headers['content-type'] );
    7078                $this->assertEquals( '40148', $headers['content-length'] );
    71                 $this->assertEquals( '200', $headers['response'] );
    72 
    73                 // make sure the file is ok
    74                 $this->assertEquals( 40148, filesize($file) );
    75                 $this->assertEquals( 'b0371a0fc575fcf77f62cd298571f53b', md5_file($file) );
     79                $this->assertEquals( '200', wp_remote_retrieve_response_code( $response ) );
    7680        }
    7781
    … …  
    7983                // this will redirect to asdftestblog1.files.wordpress.com
    8084                $url = 'https://asdftestblog1.wordpress.com/files/2007/09/2007-06-30-dsc_4700-1.jpg';
    81                 $file = tempnam('/tmp', 'testfile');
     85
    8286                // pretend we've already redirected 5 times
    83                 $headers = wp_get_http( $url, $file, 6 );
    84                 $this->assertFalse( $headers );
     87                $response = wp_remote_get( $url, array( 'redirection' => -1 ) );
     88
     89                $this->skipTestOnTimeout( $response );
     90                $this->assertTrue( is_wp_error( $response ) );
    8591        }
    8692}
Note: See TracChangeset for help on using the changeset viewer.