cucumber / cucumber-ruby

Cucumber for Ruby. It's amazing!
https://cucumber.io
MIT License
5.18k stars 1.12k forks source link

Ctrl+C/SIGINT interacts poorly with retry and fail-fast #1763

Open timreinkeaxios opened 2 months ago

timreinkeaxios commented 2 months ago

👓 What did you see?

Ctrl+C sends INT which sets wants_to_quit. But, rather than exiting as soon as possible, cucumber will continue to retry.

Further, when --retry is combined with --fail-fast and interrupted, cucumber fails to exit entirely if a retry passes because fail fast sets wants_to_quit = false on success

Sending the second INT does exit immediately, but for dealing with cleanup/teardown in CI, it would be better to have a single INT work properly.

✅ What did you expect to see?

Tests should not retry after interrupt, and should always exit after current scenario.

📦 Which tool/library version are you using?

cucumber-9.2.0

🔬 How could we reproduce it?

Made a quick demo here: https://github.com/timreinkeaxios/cucumber-int-demo

📚 Any additional context?

No response

luke-hill commented 2 months ago

The code in question for the SIGINT was written well before both retry and fail-fast and as such what you're likely describing is just nuances.

I can quickly replicate what you're observing. However when you say tests should not retry, are you therefore suggesting that a single Ctrl+C should kill everything immediately? Just so I'm clear @timreinkeaxios

timreinkeaxios commented 2 months ago

yeah, this is definitely some edge case stuff and probably not super important

However when you say tests should not retry, are you therefore suggesting that a single Ctrl+C should kill everything immediately

Not exactly - test code/environment might want a chance to clean up resources (e.g. in our case releasing selenium grid browser sessions). IDK what the best way to provide that as an API is - the After hook still runs after the test is interrupted, which is what I would want to happen for resource cleanup. That's probably ideal vs force killing the process