Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork9.7k
[FrameworkBundle] ensureKernelShutdown in tearDownAfterClass#60564
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
[FrameworkBundle] ensureKernelShutdown in tearDownAfterClass#60564
Uh oh!
There was an error while loading.Please reload this page.
Conversation
carsonbot commentedMay 27, 2025
Hey! I see that this is your first PR. That is great! Welcome! Symfony has acontribution guide which I suggest you to read. In short:
Review the GitHub status checks of your pull request and try to solve the reported issues. If some tests are failing, try to see if they are failing because of this change. When two Symfony core team members approve this change, it will be merged and you will become an official Symfony contributor! I am going to sit back now and wait for the reviews. Cheers! Carsonbot |
ea858f6 tofeeac45Comparenicolas-grekas commentedMay 30, 2025
This relies on the child class calling the parent class. |
cquintana92 commentedMay 30, 2025
@nicolas-grekas I've added it in a new public method annotated with |
nicolas-grekas left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I think it'd make more sense to me to add the annotation on the existing method.
My concern is about increasing the public API. People will start using the new method instead of the existing one in their test cases / IDEs will propose both, and people will wonder about that.
Also: I'm fine merging this as a bugfix, so 6.4 works for me.
cquintana92 commentedJun 2, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Made the change to set the annotation directly in the |
674990e to8d81b0dComparecquintana92 commentedJun 2, 2025
@nicolas-grekas looks like by changing the method to Do you think it could be related to the test (actually the |
nicolas-grekas commentedJun 2, 2025
That failure is a false-positive so we can ignore it. |
| /** | ||
| * Shuts the kernel down if it was used in the test - called by the tearDown method by default. | ||
| * | ||
| * @afterClass |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
this should also have the attribute, to be compatible with PHPUnit 10+
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Sure, I've added the attribute in addition of the annotation 👍
Is there any other change required?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@stof looks like the attribute is not available,Psalm fails but the tests pass... Is there anything I missed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
the attribute is not available because Psalm runs with PHPUnit 9.x installed. But that's not an issue. We don't treat Psalm as a mandatory check, only as an helper tool (and each PR reports onlynew Psalm errors)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Okay, thanks for the answer!
7b1d5ad tobf9786cComparenicolas-grekas commentedJun 4, 2025
Thank you@cquintana92. |
ec76ab4 intosymfony:6.4Uh oh!
There was an error while loading.Please reload this page.
Seldaek commentedJun 4, 2025
So this merge broke our build because for performance reason (to avoid recreating containers at every test) we suppress the tearDown client reset behavior, explicitly not calling the parent::tearDown(), and then suddenly the client got reset anyway, causing issues. Not sure what to do about this though.. I can see how this fixes a bug too. |
nicolas-grekas commentedJun 4, 2025
I realized that there's another issue: we made the method public, which will break classes that override the method but keep it protected. |
nicolas-grekas commentedJun 4, 2025
Reverted in0291ea1 |
cquintana92 commentedJun 4, 2025
How should we proceed to include this, then? Will another PR be made for including the call to |
nicolas-grekas commentedJun 4, 2025
I suggest going with your initial PR: calling ensureKernelShutdown in teardownAfterClass |
cquintana92 commentedJun 4, 2025
@nicolas-grekas there you go:#60693 |
…ss (cquintana92)This PR was submitted for the 7.4 branch but it was squashed and merged into the 6.4 branch instead.Discussion----------[FrameworkBundle] ensureKernelShutdown in tearDownAfterClass| Q | A| ------------- | ---| Branch? | 6.4| Bug fix? | yes| New feature? | no| Deprecations? | no| Issues | None| License | MITComes from#60564This PR performs the following change: In `KernelTestCase`, the kernel is shut down after every test, as per the `static::ensureKernelShutdown()` call in the `tearDown` function. However, if one was to perform any extra code in their `tearDownAfterClass` and call `getContainer`, it would boot up a new kernel, which would then be left dangling. The main issue with that is that when the next Test class is executed, there would already be a booted kernel, so it could happen that it was pointing to dangling resources.By adding this call to `static::ensureKernelShutdown` in the `tearDownAfterClass`, we can ensure that no dangling kernels are left even after the test class has finished.Commits-------c193b98 [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass
* 6.4: cs tweak [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass Revert "bug#60564 [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass (cquintana92)"
* 7.2: cs tweak [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass Revert "bugsymfony#60564 [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass (cquintana92)"
* 7.3: [HttpClient] Suggest amphp/http-client v5 by default [WebProfilerBundle] Fix typos in routing config deprecation messages cs tweak [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass Revert "bugsymfony#60564 [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass (cquintana92)" [Security] Keep roles when serializing tokens [JsonPath] Always use brackets notation with `JsonPath::key()`
* 7.4: [HttpClient] Suggest amphp/http-client v5 by default [Security] conflict with event-subscriber v8 Fix leftover [WebProfilerBundle] Fix typos in routing config deprecation messages cs tweak [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass Revert "bugsymfony#60564 [FrameworkBundle] ensureKernelShutdown in tearDownAfterClass (cquintana92)" [Security] Keep roles when serializing tokens [JsonPath] Always use brackets notation with `JsonPath::key()`
Uh oh!
There was an error while loading.Please reload this page.
This PR performs the following change: In
KernelTestCase, the kernel is shut down after every test, as per thestatic::ensureKernelShutdown()call in thetearDownfunction. However, if one was to perform any extra code in theirtearDownAfterClassand callgetContainer, it would boot up a new kernel, which would then be left dangling. The main issue with that is that when the next Test class is executed, there would already be a booted kernel, so it could happen that it was pointing to dangling resources.By adding this call to
static::ensureKernelShutdownin thetearDownAfterClass, we can ensure that no dangling kernels are left even after the test class has finished.