WordPress.org

Make WordPress Core

Ticket #17010: 17010.diff

File 17010.diff, 2.2 KB (added by johnbillion, 5 years ago)
  • src/wp-includes/class-http.php

     
    366366
    367367                $response = $transports[$class]->request( $url, $args );
    368368
     369                if ( ! is_wp_error( $response ) && ( wp_remote_retrieve_response_code( $response ) < 200 ) ) {
     370                        $error = sprintf(
     371                                '%s (%s)',
     372                                wp_remote_retrieve_response_code( $response ),
     373                                wp_remote_retrieve_response_message( $response )
     374                        );
     375                        $response = new WP_Error( 'http_request_failed', $error );
     376                }
     377
    369378                /**
    370379                 * Fires after an HTTP API response is received and before the response is returned.
    371380                 *
  • tests/phpunit/tests/http/base.php

     
    353353                $this->assertTrue( ! is_wp_error( $res ), print_r( $res, true ) );
    354354        }
    355355
     356        /**
     357         * Test that server response codes are handled consistently
     358         *
     359         * @ticket 17010
     360         *
     361         * @dataProvider data_http_status_codes
     362         */
     363        function test_http_response_code_handling( $code ) {
     364
     365                $res = wp_remote_head( sprintf( 'http://trunk.wp/status.php?status=%d', $code ) );
     366
     367                if ( $code < 200 ) {
     368
     369                        // A 1xx request should result in an error
     370                        if ( ! is_wp_error( $res ) ) {
     371                                $this->fail( sprintf( '%s (status: %d)', wp_remote_retrieve_response_message( $res ), $code ) );
     372                        }
     373
     374                        $this->assertSame( 'http_request_failed', $res->get_error_code() );
     375
     376                } else {
     377
     378                        // Any other request should not result in an error
     379                        if ( is_wp_error( $res ) ) {
     380                                $this->fail( sprintf( '%s (status: %d)', $res->get_error_message(), $code ) );
     381                        }
     382
     383                        $this->assertSame( $code, wp_remote_retrieve_response_code( $res ) );
     384
     385                }
     386
     387        }
     388
     389        function data_http_status_codes() {
     390                global $wp_header_to_desc;
     391
     392                // Hackedy hack! This populates the $wp_header_to_desc global
     393                get_status_header_desc( 200 );
     394
     395                $data = array();
     396
     397                foreach ( $wp_header_to_desc as $code => $description ) {
     398                        $data[] = array(
     399                                $code,
     400                        );
     401                }
     402
     403                return $data;
     404
     405        }
    356406
    357407}