diff options
Diffstat (limited to 'python/test/Ice/asyncio/AllTests.py')
-rw-r--r-- | python/test/Ice/asyncio/AllTests.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/python/test/Ice/asyncio/AllTests.py b/python/test/Ice/asyncio/AllTests.py new file mode 100644 index 00000000000..604d8b8aeb7 --- /dev/null +++ b/python/test/Ice/asyncio/AllTests.py @@ -0,0 +1,87 @@ +# +# Copyright (c) ZeroC, Inc. All rights reserved. +# + +import sys +import asyncio +import Ice +import Test + + +def test(b): + if not b: + raise RuntimeError('test assertion failed') + + +async def allTestsAsync(helper, communicator): + + sref = "test:{0}".format(helper.getTestEndpoint(num=0)) + obj = communicator.stringToProxy(sref) + test(obj) + + p = Test.TestIntfPrx.uncheckedCast(obj) + + sys.stdout.write("testing invocation... ") + sys.stdout.flush() + test(await Ice.wrap_future(p.opAsync()) == 5) + await Ice.wrap_future(p.sleepAsync(0)) + await Ice.wrap_future(p.sleepAsync(20)) + test(await Ice.wrap_future(p.callOpOnAsync(p)) == 5) + print("ok") + + sys.stdout.write("testing exceptions... ") + sys.stdout.flush() + try: + await Ice.wrap_future(p.throwUserException1()) + test(False) + except Test.TestException: + pass + try: + await Ice.wrap_future(p.throwUserException2()) + test(False) + except Test.TestException: + pass + try: + await Ice.wrap_future(p.throwUnhandledException1()) + test(False) + except Ice.UnknownException: + pass + try: + await Ice.wrap_future(p.throwUnhandledException2()) + test(False) + except Ice.UnknownException: + pass + print("ok") + + sys.stdout.write("testing cancellation... ") + sys.stdout.flush() + + future = p.sleepAsync(500) + asyncioFuture = Ice.wrap_future(future) + future.cancel() + try: + await asyncioFuture + test(False) + except asyncio.CancelledError: + test(future.cancelled() and asyncioFuture.cancelled()) + + future = p.sleepAsync(500) + asyncioFuture = Ice.wrap_future(future) + asyncioFuture.cancel() + try: + await asyncioFuture + test(False) + except asyncio.CancelledError: + # Wait a little to ensure the cancellation propagates to the Ice future + await asyncio.sleep(0.01) + test(future.cancelled() and asyncioFuture.cancelled()) + + # Try to cancel a done future + future = p.opAsync() + while not future.done(): + await asyncio.sleep(0.01) + Ice.wrap_future(future).cancel() + + print("ok") + + await Ice.wrap_future(p.shutdownAsync()) |