microsoft / microsoft/vscode-python-debugger
Race condition in `provider.unit.test.ts` due to slow initial execution
Personne n'a encore pris cette issue.
- Langage dominant
- TypeScript
- Étoiles
- 181
- Forks
- 126
- Merge moyen
- 2 j 3 h
- PR mergées (30 j)
- 3
Description
📝 Description
We are observing intermittent test failures during the first run of the unit tests, specifically within the AttachProcessProvider suite.
The root cause appears to be a Race Condition triggered by slow environment startup:
- First Test Timeout: The first test case (e.g., Linux process list) takes longer than 2000ms to resolve (likely due to initial module loading or environment lag), causing a Mocha timeout error.
- Polluted Assertions: While the second test is running, the asynchronous call from the first (timed-out) test finally completes.
- Double Call Error: This causes the
sinonstub (likeplainExec) to record an extra call during the second test's execution context, leading to an assertion failure:expected plainExec to be called once but it was called twice(or similar).
586 passing (6s)
27 pending
2 failing
1) Attach to process - process provider
The Linux process list command should be called if the platform is Linux:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/vscode-python-debugger/vscode-python-debugger/testDir/out/test/unittest/attachQuickPick/provider.unit.test.js)
at listOnTimeout (node:internal/timers:585:17)
at process.processTimers (node:internal/timers:521:7)
2) Attach to process - process provider
The macOS process list command should be called if the platform is macOS:
AssertError: expected plainExec to be called once and with exact arguments
🛠 Steps to Reproduce
- Run tests in a resource-constrained environment (like a cold GitHub Actions runner or a slow local machine).
- Execute npm run test (or the equivalent test runner command).
- Observe that the first test fails with a timeout, and subsequent tests fail because stubs were called by the "ghost" of the previous failed test.
- Run the tests again immediately; observe that all tests (including the previously failed ones) now pass.
Environment: CI (GitHub Runner) https://github.com/ZA139/vscode-python-debugger/actions/runs/25676102630/job/75374288168 / Local Windows
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par provider.unit.test.ts et la suite AttachProcessProvider, puis exécutez npm run test dans un environnement lent ou froid pour reproduire le timeout et l’échec du stub qui s’ensuit. C’est terminé lorsque le premier test se termine de manière fiable dans la suite et que les assertions Linux et macOS réussissent sans que des appels ne fuient entre les tests.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- testing
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 58/100