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

MockHeader and test_is_within_trust_period #104

Merged
merged 2 commits into from
Dec 28, 2019

Conversation

ebuchman
Copy link
Member

Initial mock and test for the Header and is_within_trust_period.

I hesitated on mocking the Commit because it ultimately requires Validator, which has a verify_signature method, which I think we'd like to avoid needing to test this core logic (ie. #96 (comment)).

We should consider some more changes to the traits to eliminate the need for this. It will make mocking everything much easier!

  • Referenced an issue explaining the need for the change
  • Updated all relevant documentation in docs
  • Updated all code comments where relevant
  • Wrote tests
  • Updated CHANGES.md

@tarcieri
Copy link
Contributor

We should consider some more changes to the traits to eliminate the need for this.

I would definitely recommend using traits for these sorts of interfaces and making your mocks a struct which impls the trait you'd like to mock.

Libra pervasively uses this pattern, and the other added benefit is it makes the code more easily (re)composable.

@ebuchman
Copy link
Member Author

@tarcieri we're already using traits for everything. The issue here is that mocking the trait would be too involved, because we need to mock a verify_signature method, and it's a method that's not even used in the module!

I think I solved it here: #105. The solution was to make one trait (ValidatorSet) an associated type of the other (Commit). That eliminates the need for the verify_signature method to be exposed in the traits, because the Commit can access the underlying functionality of its associated ValidatorSet trait without being restricted to the trait interface. Wahoo!

@liamsi liamsi mentioned this pull request Dec 28, 2019
5 tasks
Copy link
Member

@liamsi liamsi left a comment

Choose a reason for hiding this comment

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

Thanks Bucky.

* remove Validator trait; make ValidatorSet associated to Commit

* remove stale comment
@liamsi
Copy link
Member

liamsi commented Dec 28, 2019

Merging this into #96's branch. Will fix the build later and go through the changes of #107.

@liamsi liamsi merged commit 8c82f2d into ismail/light_store_requests_bisect Dec 28, 2019
@ebuchman ebuchman deleted the bucky/lite-unit-tests branch December 28, 2019 15:50
ebuchman added a commit that referenced this pull request Dec 29, 2019
* Add bisection to light client module:

 - implement `can_trust` according to the latest spec CanTrustBisection (wip)
 - add a `Requester` and a `Store` trait
 - sue refs in parameters (as they are used in several places and we don't want to Copy)

* Group params h1 & ha_next_vals into a type `TrustedState`

 - reduce params to clippy threshold (7); still a lot ...
 - rename vars for better readability

* Add VerifyHeader logic from spec:

 - rename expired to is_within_trust_period to be closer to the spec
 - use TrusteState trait in check_support params
 - use TrusteState in lite tests

* Review: doc improvements and minor improvements on naming

* Review: doc improvements

* More doc improvements

* Minor doc improvement

* MockHeader and test_is_within_trust_period (#104)

* MockHeader and test_is_within_trust_period

* remove Validator trait; make ValidatorSet associated to Commit (#105)

* remove Validator trait; make ValidatorSet associated to Commit

* remove stale comment

* Fix clippy errors (#108)

* Review comments: (#107)

* Review comments:

 - update some comments / documentation
 - verify vals (not next vals)
 - store header and vals in trusted state

* One offs & renaming related to trusted state

* Rename & remove redundant store of trusted state: c
 - an_trust -> can_trust_bisection
 - remove a redundant check for trust period
 - remove redundant adding state to the store (added TODO)

* Bucky/some light follow up (#109)

* use ? instead of return Err(err)

* remove unused errors

* move a validation and add TODOs about them

* check_support returns early for sequential case

* drop let _ =

* add comment to voting_power_in about signers

Co-authored-by: Ethan Buchman <ethan@coinculture.info>
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.

3 participants