[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