I recently saw an odd test failure while making changes to some other code (itself using proton-j) that the test was using, even though it seemed like the change should have had no effect on that test. I eventually identified this was due to some unexpected behaviour in other areas that was ultimately occuring because no Open frame had been sent/received, as the original author of the test had not opened the 'client' Connection object. The test should thus never have worked as a result, but it did.
After some further inspection, it seems that:
- proton-j can receive and process other frames without the Open arriving, resulting in different 'default' behaviour than if it were.
- It isnt immediately obvious (to me) whether proton-c guards against the receiving case or not.
EDIT: the work on proton-j based on the following comments was split out to
- proton-j can emit other frames without first sending the Open frame [because the Connection object wasnt actually opened].
- proton-c does not appear to, since it guards in various using a check if the open has been sent yet.