-
Notifications
You must be signed in to change notification settings - Fork 43
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: support multi-dimensional testing #53
Comments
note from sync w/ @marten-seemann (he was away for the chat yesterday and had related requests). @mxinden @marten-seemann I have no strong feelings about this, but we might lose information between impromptu meetings. Do you feel the need to schedule some sort of "interop squad sync" where everyone joins at the same time? Some more good ideas were brought up. A few notes: Generating Matrix ParametersThe point of this epic is to let the libp2p team define a multi-dimensional test matrix, Using this configuration file, we can generate multiple tests, for example:
Implicitly this configuration represents compatible pairs. This means we have a matrix of An extension to this matrix is the RTT use case: @marten-seemann needs to add "expected RTTs" for each of these pairs. Each cell in the matrix will contain the number of RTTs A high-level approach:
I plan to iterate through solutions:
Unknown: this is focused on generating test pairs, how to express "I want to create a group with every webrtc-compatible implementation"? Do we need it? Supported versionsThe size of the test matrix will explode quickly. This should not be a problem to create the configuration files, but this will be a problem for the time to build & run test suites. I believe EKS will solve some of this problem (with caching out of the box and having enough resources to enable parallelization), but we'll have to pick and choose which versions and combinations to test eventually. One option is to test the most used version, see the diagram: http://162.55.187.75:3000/d/CSQsORs7k/nebula?orgId=1&viewPanel=11 We can use these metrics to enable/disable versions, probably something like:
This solution sounds reasonable enough to keep this problem for later. Config Structurekeep in mind: muxer + security applies only to TCP, so it might be helpful to use a nested structure instead of:
Something like this might represent our matrix better, and it might be easier to expand.
We don't have to decide on this now (data is easy to transform), I recommend we stick to the flat structure for now. |
Minor correction: It’s expected handshake duration, and it’s a dimensionless number: the number of RTTs. Calculating the actual duration will be done by the test plan, based on that number and the RTT that’s used for the run. |
This is tracked on the [libp2p test-plans](libp2p/test-plans#44) see also libp2p/test-plans#53.
We will face the same problem on the dimension of multiplexer-negotiation (via multistream-select or via security protocol) as this is only relevant for TCP. I think expressing hierarchies within dimensions (e.g. |
I would suggest to continue doing these ad-hoc. That said, this is not a strong opinion. |
While long-term we will need this, I do think we should focus on point-to-point testing for now, i.e. two nodes (potentially 3 including a relay node for WebRTC browser-to-browser) instead of a group of nodes. |
I have created a google doc as a way to capture our test case requirements, filled in with the info I know, please take a look and if you can, fill in the part especially regarding JS, rust. We can migrate this doc to github once it is in a good shape. https://docs.google.com/document/d/1-akPPFW7kko9SkpedxXOV2foWJhnliELGd1WKn-0RFw/edit# |
Does this mean that you're working on this, @laurentsenta ?
... & ...
I had thought the matrix would be a single composition with some elaborate template structure. But it sounds like you're thinking of writing a higher-level script that orchestrates calls into testground? If so, could/should this sort of matrix instead be a new feature added to testground itself, for reuse? |
@John-LittleBearLabs thanks for raising these questions,
I am working on the first step here: #55 which should add support for matrixes. I moved the list of tasks to the top of the issue description. @julian88110 is also working on the test matrix definition.
You need both: with the composition, we can describe "many" test plans using templates and env parameters.
You're correct, we can and we should. Ideally, we validate this solution with the team and iterate on it for a while, then we can split:
The hard problem is making interop matrix maintainable, we can implement "anything" in testground as long as we don't leak interop-related matters into Testground APIs. |
(updated the task description with a clearer definition and added a few steps) |
#Testground multi-dimensional test matrix Tests are to be composed from the information extracted out of the resource files.An example resource file entry may look like this:
A test peer/host is customized by the following parameters:testHost = Host(implementation, version, transport, securityProto, supportedMuxers) A test case is composed by two or more test hosts:testInstance = TestInstance(testHost-1, testHost2, …) Go transport list:
Rust transport list:
JS transport list:
Test Matrix Test matrix for libp2p multi dimensional tests. (Test cases should also be run with source/destination flipped)
ML1 = ["/yamux/1.0.0", "/mplex/6.7.0"] M1 = “/yamux/1.0.0” , M2 = “/mplex/6.7.0” ML2 = ["/mplex/6.7.0", "/yamux/1.0.0"] ML3 = [“/mplex/6.7.0”] |
Looking for an owner While the IPDX team (i.e. @laurentsenta) works on the necessary support in testground/testground (see testground/testground#1493) I think there is value in us (libp2p team) to start working on our part, namely the generation of composition files based on a Any volunteers? @jxs or @julian88110 would either of you like to and have the capacity to own this? |
Whoever starts working on the official/permanent version - let me know so I can start basing my somewhat hacky version of working my webrtc test into this scheme on your work, rather than on PoC |
Discussed out of band. @jxs will own this. |
Thanks @mxinden @jxs and @MarcoPolo ! I will have some bandwidth to help once the integration test and related code refactor effort is done. We can discuss for details. |
I see the following work streams here: (Enumeration is for reference purpose, not to signal ordering.)
The plan was for @jxs to own (2) for both rust and go, potentially js in the future.
Thus far I was the DRI. That said, I am happy to hand that over to you @MarcoPolo. Let me know. We should probably do a hand-over in some fashion. |
Thanks @mxinden. This is helpful. I want to minimize the amount of people involved, and I also know @mxinden is juggling a lot, so I am supportive if we're handing ownership over to others. A few thoughts:
|
My preference is to make #61 the tracking issue for these efforts and tidy this Epic a bit. We can create child issues and assign to each team/DRI where necessary. |
FYI, the upcoming week I'm planning to start getting the js-libp2p ping test to work in this repo, on a new branch. It will be based on the "finished" work done in open PR: testground/testground#1502 |
Thoughts on including plaintext in addition to TLS and Noise? I think libp2p/js-libp2p#1110 provides motivation to include it, at least as a "nice to have" |
Including plaintext works for me. Just need to make sure we don't advertise it as a to-be-used-in-production protocol. |
closing in favor of #61 |
eta: 2022Q4
Tasks
Follow-up tasks
Description
A high-level approach:
testground run
.Configurations
Ideally, the libp2p team provides a resource file that contains the versions and their features:
And we'll create some way to have "meta-compositions" that can describe multiple tests and run many pairs together,
something like
(pseucode)
Called with
Related discussions and issues
The text was updated successfully, but these errors were encountered: