[wp-trac] [WordPress Trac] #64412: Sporadic unit test failure in Tests_REST_WpRestUrlDetailsController::test_get_items

WordPress Trac noreply at wordpress.org
Sun Dec 14 08:10:59 UTC 2025


#64412: Sporadic unit test failure in
Tests_REST_WpRestUrlDetailsController::test_get_items
--------------------------------------+--------------------------
 Reporter:  westonruter               |       Owner:  westonruter
     Type:  defect (bug)              |      Status:  closed
 Priority:  normal                    |   Milestone:  6.9.1
Component:  Editor                    |     Version:  5.9
 Severity:  normal                    |  Resolution:  fixed
 Keywords:  has-patch has-unit-tests  |     Focuses:  rest-api
--------------------------------------+--------------------------
Description changed by westonruter:

Old description:

> In #54358 via [51973] tests for the URL Details endpoint were introduced.
> These used a `https://placeholder-site.com` URL as the test URL for the
> unit tests in `Tests_REST_WpRestUrlDetailsController`. Recently, one of
> these tests has been failing sporadically:
>
> {{{
> 1) Tests_REST_WpRestUrlDetailsController::test_get_items
> Failed asserting that two arrays are identical.
> --- Expected
> +++ Actual
> @@ @@
>  Array &0 (
> -    'title' => 'Example Website — - with encoded content.'
> -    'icon' => 'https://placeholder-
> site.com/favicon.ico?querystringaddedfortesting'
> -    'description' => 'Example description text here. Lorem ipsum dolor
> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
> ut labore et dolore.'
> -    'image' => 'https://placeholder-site.com/images/home/screen-
> themes.png?3'
> +    'code' => 'rest_invalid_param'
> +    'message' => 'Invalid parameter(s): url'
> +    'data' => Array &1 (
> +        'status' => 400
> +        'params' => Array &2 (
> +            'url' => 'Invalid parameter.'
> +        )
> +        'details' => Array &3 ()
> +    )
>  )
>
> /var/www/tests/phpunit/tests/rest-api/wpRestUrlDetailsController.php:131
> }}}
>
> Even though the HTTP request is intercepted with a mocked response via
> the `pre_http_request` filter, it appears this mocking is not complete.
> In particular, the `wp-block-editor/v1/url-details` endpoint includes a
> `url` param which has `wp_http_validate_url()` as its
> `validate_callback`. This validation function ends up calling
> `gethostbyname()`. Since `https://placeholder-site.com` is not an actual
> site, it appears that this `gethostbyname()` often returns with a
> failure. I can reproduce the unit test failure by patching
> `wp_http_validate_url()` as follows:
>
> {{{#!diff
> --- a/src/wp-includes/http.php
> +++ b/src/wp-includes/http.php
> @@ -593,7 +593,7 @@ function wp_http_validate_url( $url ) {
>                         $ip = $host;
>                 } else {
>                         $ip = gethostbyname( $host );
> -                       if ( $ip === $host ) { // Error condition for
> gethostbyname().
> +                       if ( true || $ip === $host ) { // Error condition
> for gethostbyname().
>                                 return false;
>                         }
>                 }
> }}}
>
> I think we should simply use the domain for a real site, like
> `https://example.com`.

New description:

 In #54358 via [51973] tests for the URL Details endpoint were introduced.
 These used a `https://placeholder-site.com` URL as the test URL for the
 unit tests in `Tests_REST_WpRestUrlDetailsController`. As
 [https://wordpress.slack.com/archives/C02RQBWTW/p1765507001580889
 discussed in Slack], recently, one of these tests has been failing
 sporadically:

 {{{
 1) Tests_REST_WpRestUrlDetailsController::test_get_items
 Failed asserting that two arrays are identical.
 --- Expected
 +++ Actual
 @@ @@
  Array &0 (
 -    'title' => 'Example Website — - with encoded content.'
 -    'icon' => 'https://placeholder-
 site.com/favicon.ico?querystringaddedfortesting'
 -    'description' => 'Example description text here. Lorem ipsum dolor
 sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
 labore et dolore.'
 -    'image' => 'https://placeholder-site.com/images/home/screen-
 themes.png?3'
 +    'code' => 'rest_invalid_param'
 +    'message' => 'Invalid parameter(s): url'
 +    'data' => Array &1 (
 +        'status' => 400
 +        'params' => Array &2 (
 +            'url' => 'Invalid parameter.'
 +        )
 +        'details' => Array &3 ()
 +    )
  )

 /var/www/tests/phpunit/tests/rest-api/wpRestUrlDetailsController.php:131
 }}}

 Even though the HTTP request is intercepted with a mocked response via the
 `pre_http_request` filter, it appears this mocking is not complete. In
 particular, the `wp-block-editor/v1/url-details` endpoint includes a `url`
 param which has `wp_http_validate_url()` as its `validate_callback`. This
 validation function ends up calling `gethostbyname()`. Since `https
 ://placeholder-site.com` is not an actual site, it appears that this
 `gethostbyname()` often returns with a failure. I can reproduce the unit
 test failure by patching `wp_http_validate_url()` as follows:

 {{{#!diff
 --- a/src/wp-includes/http.php
 +++ b/src/wp-includes/http.php
 @@ -593,7 +593,7 @@ function wp_http_validate_url( $url ) {
                         $ip = $host;
                 } else {
                         $ip = gethostbyname( $host );
 -                       if ( $ip === $host ) { // Error condition for
 gethostbyname().
 +                       if ( true || $ip === $host ) { // Error condition
 for gethostbyname().
                                 return false;
                         }
                 }
 }}}

 I think we should simply use the domain for a real site, like
 `https://example.com`.

--

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/64412#comment:4>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list