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

EPIC: interop testing for go and rust libp2p - Ping Test #35

Closed
4 of 6 tasks
laurentsenta opened this issue Aug 30, 2022 · 2 comments
Closed
4 of 6 tasks

EPIC: interop testing for go and rust libp2p - Ping Test #35

laurentsenta opened this issue Aug 30, 2022 · 2 comments
Assignees

Comments

@laurentsenta
Copy link
Collaborator

laurentsenta commented Aug 30, 2022

We want to run a "simple" test (ping) that verifies interoperability between versions and implementations.
This test should run at least before every (go|rust) libp2p release.

Use case:

  • Test cross-version compatibility for Go
  • Test cross-version compatibility for Rust
  • Test cross-implementation compatibility for Rust and Go

We're aiming for:

  • a single ping test implemented in different languages (go + rust)

  • running interop + cross version for every PR on the go-libp2p repo

  • running interop + cross version for every PR on the rust-libp2p repo

  • @mxinden and @marten-seemann agreed to run this test if

    • it takes < 30 minutes
    • it's stable (aiming for < 1% failure rate)
  • they want "reasonable" run time in the future

    • my goal right now is < 15 minutes which is the go test runtime on ubuntu,
    • I'm trying to push it down to ~ 5 minutes with caching. There is a O(n) relationship between build time & the number of tested versions and caching would make it O(1).
    • we're going to timebox this effort for a week, then discuss how far we want to go.

Todo

References:

@laurentsenta
Copy link
Collaborator Author

Gathering content in a single issue to share w/Bloxico.

@laurentsenta laurentsenta self-assigned this Aug 30, 2022
@laurentsenta
Copy link
Collaborator Author

Follow-Up discussion

  • Can we get rid of the building step when we use a test from another implementation:
    • We need to make sure an update in a repo doesn't break another, it's very important for stability during do cross-implementation interop tests. Fixes like the one in ping/rust: remove the master dependency #45 might be working, but it's hard to make sure we're covering all cases where a build might fail.
    • We don't want to "pin forever" the test artifacts either because a test specification might change (for example, how we sync instances).
    • What if we built every artifact for every known version on merges to libp2p/test-plans?
      • Then reuse these artifacts during test runs?
      • This way implementation langX-libp2p never attempt to build a test for langY-libp2p.
  • Another important point is how to deal with new feature:
    • "as a langX-libp2p maintainer, I want to create a test in this plan than will be used by langY-libp2p"
      • It might be a feature that only exists on master,
      • It might be a feature that doesn't exist in previous versions (we're only testing ping at the moment).

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

No branches or pull requests

2 participants