Skip to content
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply expiration checks in PacketData classes #8186

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

Matilda-Clerke
Copy link
Contributor

PR description

Apply expiration checks in PacketData classes

Signed-off-by: Matilda Clerke <[email protected]>
Signed-off-by: Matilda Clerke <[email protected]>
Signed-off-by: Matilda Clerke <[email protected]>
Copy link
Contributor

@garyschulte garyschulte left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question about the need to plumb UTC clock

private static void validateParameters(final long expiration, final Clock clock) {
checkArgument(expiration >= 0, "expiration cannot be negative");
checkArgument(
expiration >= clock.instant().getEpochSecond(), "expiration cannot be in the past");
Copy link
Contributor

@garyschulte garyschulte Jan 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need to plumb Clock UTC everywhere, is it a testing concern? AFAIK Instant.now().toEpochMilli() is always in UTC.

If it is a testing concern about wanting to use a static clock, couldn't we spy and mock a non-static validateParameters method, or move this as a default method into PacketData for example? and then just directly test the real method in isolation. It should be the same coverage without the need to add clock to constructors

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a testing concern, yes. In many tests, we're using old hard-coded packets encoded in RLP, so the only way to ensure they're considered "valid" is to compare them against an appropriate instant, now provided by the supplied clock. Ideally, dependency injection of the clock into a PacketDataFactory, would remove this from the method parameters we see here, but that's a refactoring out of scope for this PR.

I suppose we could use a spy to mock calls against a non-static validateParameters method, but truthfully, I'd rather refactor the code and maybe utilise dagger. It'll be much easier to maintain moving forward. Since you're the third person to mention it this morning, I'll branch off and work on the refactoring now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants