-
-
Notifications
You must be signed in to change notification settings - Fork 3k
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
Interop tests are failing against master #7390
Comments
It looks like an issue with the mocha reporter we were using. I'm working on a fix in #7395. |
Reopening because #7395 doesn't solve the problem and the interop tests are still failing against master. Following on from the discussion in #7394 running the tests with pubsub logging turned on shows this sort of thing (js is prefixed with Successful:
Failure:
The key here seems to be the
The warning seems to come from here. From what I can see it's reading a protobuf message out of the stream, then printing the 'unexpected message' warning and ignoring the message. Incoming messages are handled by the |
See libp2p/go-libp2p-pubsub#133. go-libp2p-pubsub uses unidirectional streams. It looks like js-libp2p-pubsub isn't. Is that correct? |
cc @vyzo |
Yes, go-libp2p-pubsub uses unidirectional streams. |
Yes, |
@vasco-santos Sounds like that might be incorrect? Can it be changed to implement the protocol properly and use unidirectional streams? |
Taking into account that an implementation must have this into consideration, we should add a reference for this in the spec.
We have been using bidirectional streams, at least since the async await refactor. I am not sure on how this was implemented with pull streams. I have created libp2p/js-libp2p-pubsub#45 to use unidirectional streams. This is keeping the outbound stream open for all the messages for now. It will need more changes, if we want to open one every time we want to push a message (which is what is being done in go as far as I understood). This PR is on top of new breaking releases of the pubsub subsystem + routers, which need I will now create a branch from the old versions of |
@achingbrain can you retry installing the following branches in ipfs?
Let me know if this works, so that we can handle the reviews and releases |
@vasco-santos running interop with js-ipfs depending on these PRs makes the ipns-pubsub and pubsub tests pass. Ship it! |
|
there is the larger issue that the latest version of js-pubsub is not interoperable with go-pubsub; what were you guys thinking? |
Interesting question. What I'm currently thinking is there's clearly no meaningful interop testing being done between go-libp2p and js-libp2p which is a gap that needs to be filled. I can see there's an interop repo and it has an open issue about doing automated testing. Maybe this is something that go-libp2p and js-libp2p could add to their respective CI builds sooner rather than later. Where automated testing is being done is at the ipfs level and the failing interop tests have so far prevented this PR being merged and js-ipfs claiming compatibility with go-ipfs 0.5.x. The interop tests have been failing in go-ipfs master for months but for whatever reason they haven't been breaking builds which seems to just be a bug which has since been squashed.
Also interesting - stream setup seems pretty fundamental - is it documented anywhere outside of the go source code or GitHub comments? I can't see anything relevant in the spec. |
I agree with @achingbrain Just have a few thoughts to add:
I think that if we have |
We definitely need to add a reference to the spec about unidirectional streams. |
@vyzo in the absence of testground being useable for interop tests, it'd also be incredibly helpful if you could work with @vasco-santos to figure out how to run the existing suite in CI for go & js libp2p as it sounds like he has to jump through a lot of hoops to do this at the moment. That would reduce the likelihood of this sort of bug reappearing. |
Closing this issue as the interop tests are passing again. |
It looks like CI ignores failing interop tests:
https://app.circleci.com/pipelines/github/ipfs/go-ipfs/2908/workflows/0b7a5ebf-cb6c-4960-b19e-fd4c1b61983c/jobs/34278
This doesn't seem great because without passing tests there's no guarantee the code does what it claims to do and can then prevent the release of downstream projects that do not ignore failing interop tests.
The text was updated successfully, but these errors were encountered: