[wp-trac] [WordPress Trac] #31130: WP_INSTALLING causes leakage between unit tests
WordPress Trac
noreply at wordpress.org
Sun Jan 25 19:12:39 UTC 2015
#31130: WP_INSTALLING causes leakage between unit tests
------------------------------+------------------------------
Reporter: boonebgorges | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Build/Test Tools | Version:
Severity: normal | Resolution:
Keywords: | Focuses:
------------------------------+------------------------------
Description changed by boonebgorges:
Old description:
> A number of multisite unit tests invoke
> `WP_UnitTest_Factory_for_Blog::create()`, which uses `wpmu_create_blog()`
> to create a blog. Whenever this happens, the `WP_INSTALLING` constant is
> defined as `true` for all later tests. This has a number of
> ramifications, especially in the Options API, which skips the cache when
> `WP_INSTALLING`. See [28965], [31280], #28706.
>
> I see four strategies for working around the problem:
>
> 1. For any test that breaks when `WP_INSTALLING`, mark it skipped on
> multisite. This is what we're currently doing, and is lame.
> 2. Create wrapper functions for `WP_INSTALLING` so that it can be toggled
> on and off (unlike a constant). Either `apply_filters()`, or a global
> toggle like `wp_suspend_cache_invalidation()`. Then, in
> `WP_UnitTest_Factory_For_Blog::create()`, toggle it off after
> `wpmu_create_blog()` has turned it on. The main downside here is that
> `WP_INSTALLING` is not really the kind of thing we want to be toggleable
> by devs, so we'd have to document it accordingly.
> 3. Run all blog-creating tests in separate processes that don't preserve
> the global state. That way, the constant would be set in the other
> process, but not when returning to run the rest of the tests. I played
> with this a little, and it looks like it's not going to be trivial to
> make it work - we may need to bootstrap WordPress for every test or
> something like that.
> 4. Make sure that all tests that create a blog are run at the very end of
> the suite.
>
> Option (2) seems like the most natural fix, but it's also the only one
> that touches `src/`. Any additional thoughts are welcome.
> 3.
New description:
A number of multisite unit tests invoke
`WP_UnitTest_Factory_for_Blog::create()`, which uses `wpmu_create_blog()`
to create a blog. Whenever this happens, the `WP_INSTALLING` constant is
defined as `true` for all later tests. This has a number of ramifications,
especially in the Options API, which skips the cache when `WP_INSTALLING`.
See [28965], [31280], #28706.
I see four strategies for working around the problem:
1. For any test that breaks when `WP_INSTALLING`, mark it skipped on
multisite. This is what we're currently doing, and is lame.
2. Create wrapper functions for `WP_INSTALLING` so that it can be toggled
on and off (unlike a constant). Either `apply_filters()`, or a global
toggle like `wp_suspend_cache_invalidation()`. Then, in
`WP_UnitTest_Factory_For_Blog::create()`, toggle it off after
`wpmu_create_blog()` has turned it on. The main downside here is that
`WP_INSTALLING` is not really the kind of thing we want to be toggleable
by devs, so we'd have to document it accordingly.
3. Run all blog-creating tests in separate processes that don't preserve
the global state. That way, the constant would be set in the other
process, but not when returning to run the rest of the tests. I played
with this a little, and it looks like it's not going to be trivial to make
it work - we may need to bootstrap WordPress for every test or something
like that.
4. Make sure that all tests that create a blog are run at the very end of
the suite.
Option (2) seems like the most natural fix, but it's also the only one
that touches `src/`. Any additional thoughts are welcome.
--
--
Ticket URL: <https://core.trac.wordpress.org/ticket/31130#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list