message.AssetStatus(handle=1, ids=assetReq.ids, status=message.SUCCESS)) # Send a pending read-request. conn.send( message.Read.Request(reqId=1, handle=1, offset=0, size=1024, timeout=500)) server.expect( message.Read.Request(handle=assetReq.handle, offset=0, size=1024)) # Close upstream server server.close() bithorded.wait_for("Disconnected: evilservant") conn.expect([ message.Read.Response(reqId=1, status=message.NOTFOUND, offset=0), message.AssetStatus(handle=1, status=message.NOTFOUND), ]) # Reconnect upstream server server = TestConnection(bithorded, name='evilservant') # Expect a BindRead to arrive for the stale asset server.expect(message.BindRead(handle=assetReq.handle, ids=assetReq.ids)) server.send( message.AssetStatus(handle=assetReq.handle, ids=assetReq.ids, size=1024, status=message.SUCCESS))
conn = TestConnection(bithorded, name='tester') server = TestConnection(bithorded, name='evilservant') # Open a valid handle conn.send(message.BindRead(handle=1, ids=[message.Identifier(type=message.TREE_TIGER, id='NON-EXISTANT')], timeout=500)) assetReq = server.expect(message.BindRead) server.send(message.AssetStatus(handle=assetReq.handle, ids=assetReq.ids, status=message.SUCCESS, size=1024)) conn.expect(message.AssetStatus(handle=1, ids=assetReq.ids, status=message.SUCCESS)) # Send a pending read-request. conn.send(message.Read.Request(reqId=1, handle=1, offset=0, size=1024, timeout=500)) server.expect(message.Read.Request(handle=assetReq.handle, offset=0, size=1024)) # Close upstream server server.close() bithorded.wait_for("Disconnected: evilservant") conn.expect([ message.Read.Response(reqId=1, status=message.NOTFOUND, offset=0), message.AssetStatus(handle=1, status=message.NOTFOUND), ]) # Reconnect upstream server server = TestConnection(bithorded, name='evilservant') # Expect a BindRead to arrive for the stale asset server.expect(message.BindRead(handle=assetReq.handle, ids=assetReq.ids)) server.send(message.AssetStatus(handle=assetReq.handle, ids=assetReq.ids, size=1024, status=message.SUCCESS)) conn.expect(message.AssetStatus(handle=1, ids=assetReq.ids, status=message.SUCCESS)) # Verify working resend of read conn.send(message.Read.Request(reqId=1, handle=1, offset=0, size=1024, timeout=500))
from bithordetest import message, BithordeD, TestConnection if __name__ == '__main__': bithorded = BithordeD(config={ 'friend.deadservant.addr': '' }) server = TestConnection(bithorded, name='deadservant') conn = TestConnection(bithorded, name='tester') dummy_ids = [message.Identifier(type=message.TREE_TIGER, id='NON-EXISTANT')] # Send request, and wait for it to arrive at server and time out conn.send(message.BindRead(handle=1, ids=dummy_ids, timeout=50)) req = server.expect(message.BindRead) bithorded.wait_for("Failed upstream deadservant") conn.expect(message.AssetStatus(handle=1, status=message.NOTFOUND)) # BithordeD should now have closed the connection. Hold the confirmation. req = server.expect(message.BindRead(handle=req.handle, ids=[])) # Re-bind, now with responding source conn.send(message.BindRead(handle=1, ids=dummy_ids, timeout=5000)) req2 = server.expect(message.BindRead(ids=dummy_ids)) assert req.handle != req2.handle # Since we did not confirm the close before, bithorde should not yet have re-used the handle. server.send(message.AssetStatus(handle=req2.handle, ids=req2.ids, status=message.SUCCESS)) conn.expect(message.AssetStatus(handle=1, status=message.SUCCESS)) # Now close both handles and confirm the closing server.send(message.AssetStatus(handle=req.handle, status=message.NOTFOUND)) conn.send(message.BindRead(handle=1)) # We have to close the client-reference first