fix(s2n_session_ticket_test): correct clock mocking #4602
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolved issues:
Perhaps addresses #4600
Description of changes:
We have observed that the session_ticket_test is flaky. I have a hypothesis that the flakiness occurs under this scenario
s2n_config_add_ticket_crypto_key
is called with intro time of0
wall_clock
is called to set the intro time of the key, let say1_000 ns
.s2n_get_ticket_encrypt_decrypt_key
is called to get an encryption keywall_clock
returns the same time, or a smaller time<= 1_000 ns
which is possible because wall clocks can move backwards.We fix this with two changes
First, we mock the time before adding the ticket key, ensuring that we know exactly what the ticket intro time is.
Secondly, we allow keys to be used at their intro time, rather than enforcing keys be past their intro time.
Call-outs:
It's incredibly difficult to test whether this is causing the actual flakiness, but by mocking the wall clock I can confirm that the above sequence of events is 100% possible.
Testing:
All CI should pass. By mocking the wall clock at the start of the test, I now have test coverage over the
<=
condition that I added.By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.