diff options
Diffstat (limited to 'packages/meshbay-hub/tests/test_transport_contracts.py')
| -rw-r--r-- | packages/meshbay-hub/tests/test_transport_contracts.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/packages/meshbay-hub/tests/test_transport_contracts.py b/packages/meshbay-hub/tests/test_transport_contracts.py index c506ff1..ab942e4 100644 --- a/packages/meshbay-hub/tests/test_transport_contracts.py +++ b/packages/meshbay-hub/tests/test_transport_contracts.py @@ -506,3 +506,31 @@ def test_the_refusal_the_loop_keys_on_has_a_message(transport): refusals = transport[transport.index("const HANDSHAKE_REFUSALS"):] refusals = refusals[:refusals.index("};")] assert "not_hosted:" in refusals + + +# Search had the same `nodes[0]` twice — once to read a group's index, once for +# the pooled connection its thumbnails and playback use — and was not part of +# the fix above, so a group with a second, working node counted as unreachable +# there while it opened fine from the sidebar. + +SEARCH_PAGE = STATIC / "search-page.js" + + +def test_search_tries_every_node_the_hub_offers(): + code = _code_only(SEARCH_PAGE.read_text(encoding="utf-8")) + assert "nodes[0]" not in code, "Search takes the head of the node list again" + walk = code[code.index("for (const n of nodesData.nodes)"):] + walk = walk[:walk.index("throw (lastErr")] + assert "not_hosted" in walk and "throw e" in walk, ( + "the walk must stop for a refusal about this browser and move on " + "for one about this node") + + +def test_search_connects_in_one_place(): + """Two call sites with their own connect is how one of them kept `nodes[0]`.""" + code = _code_only(SEARCH_PAGE.read_text(encoding="utf-8")) + assert code.count("transport.connect(") == 1 + pool = code[code.index("async _doConnect("):code.index("_evict() {")] + index = code[code.index("async function fetchGroupIndex("): + code.index("async function fetchAllIndexes(")] + assert "connectToGroup(" in pool and "connectToGroup(" in index |