diff options
Diffstat (limited to 'python/test/Ice/operations/BatchOnewaysFuture.py')
-rw-r--r-- | python/test/Ice/operations/BatchOnewaysFuture.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/python/test/Ice/operations/BatchOnewaysFuture.py b/python/test/Ice/operations/BatchOnewaysFuture.py new file mode 100644 index 00000000000..e03bddbcfd0 --- /dev/null +++ b/python/test/Ice/operations/BatchOnewaysFuture.py @@ -0,0 +1,88 @@ +# ********************************************************************** +# +# Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +import Ice, Test, array, sys, threading, time + +def test(b): + if not b: + raise RuntimeError('test assertion failed') + +class Callback: + def __init__(self): + self._called = False + self._cond = threading.Condition() + + def check(self): + with self._cond: + while not self._called: + self._cond.wait() + self._called = False + + def called(self): + with self._cond: + self._called = True + self._cond.notify() + +def batchOneways(p): + + if sys.version_info[0] == 2: + bs1 = [] + bs1[0:10 * 1024] = range(0, 10 * 1024) # add 100,000 entries. + bs1 = ['\x00' for x in bs1] # set them all to \x00 + bs1 = ''.join(bs1) # make into a byte array + else: + bs1 = bytes([0 for x in range(0, 10 * 1024)]) + batch = Test.MyClassPrx.uncheckedCast(p.ice_batchOneway()) + + f = batch.ice_flushBatchRequestsAsync() # Empty flush + f.result() + + test(batch.ice_flushBatchRequestsAsync().is_sent()) # Empty flush + test(batch.ice_flushBatchRequestsAsync().done()) # Empty flush + test(batch.ice_flushBatchRequestsAsync().sent_synchronously()) # Empty flush + + for i in range(30): + batch.opByteSOnewayAsync(bs1) + + count = 0 + while count < 27: # 3 * 9 requests auto-flushed. + count += p.opByteSOnewayCallCount() + time.sleep(0.01) + + if p.ice_getConnection(): + + batch1 = Test.MyClassPrx.uncheckedCast(p.ice_batchOneway()) + batch2 = Test.MyClassPrx.uncheckedCast(p.ice_batchOneway()) + + batch1.ice_pingAsync() + batch2.ice_pingAsync() + batch1.ice_flushBatchRequestsAsync().result() + batch1.ice_getConnection().close(False) + batch1.ice_pingAsync() + batch2.ice_pingAsync() + + batch1.ice_getConnection() + batch2.ice_getConnection() + + batch1.ice_getConnection().close(False) + + test(not batch1.ice_pingAsync().done()) + test(not batch2.ice_pingAsync().done()) + + identity = Ice.Identity() + identity.name = "invalid"; + batch3 = batch.ice_identity(identity) + batch3.ice_ping() + batch3.ice_flushBatchRequestsAsync().result() + + # Make sure that a bogus batch request doesn't cause troubles to other ones. + batch3.ice_ping() + batch.ice_ping() + batch.ice_flushBatchRequestsAsync().result() + batch.ice_ping() |