mirror of https://github.com/grpc/grpc.git
commit
84d44071b7
6 changed files with 10 additions and 185 deletions
@ -1,115 +0,0 @@ |
||||
# Copyright 2016 gRPC authors. |
||||
# |
||||
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||
# you may not use this file except in compliance with the License. |
||||
# You may obtain a copy of the License at |
||||
# |
||||
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
# |
||||
# Unless required by applicable law or agreed to in writing, software |
||||
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
# See the License for the specific language governing permissions and |
||||
# limitations under the License. |
||||
"""Tests for CleanupThread.""" |
||||
|
||||
import threading |
||||
import time |
||||
import unittest |
||||
|
||||
from grpc import _common |
||||
|
||||
_SHORT_TIME = 0.5 |
||||
_LONG_TIME = 5.0 |
||||
_EPSILON = 0.5 |
||||
|
||||
|
||||
def cleanup(timeout): |
||||
if timeout is not None: |
||||
time.sleep(timeout) |
||||
else: |
||||
time.sleep(_LONG_TIME) |
||||
|
||||
|
||||
def slow_cleanup(timeout): |
||||
# Don't respect timeout |
||||
time.sleep(_LONG_TIME) |
||||
|
||||
|
||||
class CleanupThreadTest(unittest.TestCase): |
||||
|
||||
def testTargetInvocation(self): |
||||
event = threading.Event() |
||||
|
||||
def target(arg1, arg2, arg3=None): |
||||
self.assertEqual('arg1', arg1) |
||||
self.assertEqual('arg2', arg2) |
||||
self.assertEqual('arg3', arg3) |
||||
event.set() |
||||
|
||||
cleanup_thread = _common.CleanupThread( |
||||
behavior=lambda x: None, |
||||
target=target, |
||||
name='test-name', |
||||
args=('arg1', 'arg2'), |
||||
kwargs={ |
||||
'arg3': 'arg3' |
||||
}) |
||||
cleanup_thread.start() |
||||
cleanup_thread.join() |
||||
self.assertEqual(cleanup_thread.name, 'test-name') |
||||
self.assertTrue(event.is_set()) |
||||
|
||||
def testJoinNoTimeout(self): |
||||
cleanup_thread = _common.CleanupThread(behavior=cleanup) |
||||
cleanup_thread.start() |
||||
start_time = time.time() |
||||
cleanup_thread.join() |
||||
end_time = time.time() |
||||
self.assertAlmostEqual( |
||||
_LONG_TIME, end_time - start_time, delta=_EPSILON) |
||||
|
||||
def testJoinTimeout(self): |
||||
cleanup_thread = _common.CleanupThread(behavior=cleanup) |
||||
cleanup_thread.start() |
||||
start_time = time.time() |
||||
cleanup_thread.join(_SHORT_TIME) |
||||
end_time = time.time() |
||||
self.assertAlmostEqual( |
||||
_SHORT_TIME, end_time - start_time, delta=_EPSILON) |
||||
|
||||
def testJoinTimeoutSlowBehavior(self): |
||||
cleanup_thread = _common.CleanupThread(behavior=slow_cleanup) |
||||
cleanup_thread.start() |
||||
start_time = time.time() |
||||
cleanup_thread.join(_SHORT_TIME) |
||||
end_time = time.time() |
||||
self.assertAlmostEqual( |
||||
_LONG_TIME, end_time - start_time, delta=_EPSILON) |
||||
|
||||
def testJoinTimeoutSlowTarget(self): |
||||
event = threading.Event() |
||||
|
||||
def target(): |
||||
event.wait(_LONG_TIME) |
||||
|
||||
cleanup_thread = _common.CleanupThread(behavior=cleanup, target=target) |
||||
cleanup_thread.start() |
||||
start_time = time.time() |
||||
cleanup_thread.join(_SHORT_TIME) |
||||
end_time = time.time() |
||||
self.assertAlmostEqual( |
||||
_SHORT_TIME, end_time - start_time, delta=_EPSILON) |
||||
event.set() |
||||
|
||||
def testJoinZeroTimeout(self): |
||||
cleanup_thread = _common.CleanupThread(behavior=cleanup) |
||||
cleanup_thread.start() |
||||
start_time = time.time() |
||||
cleanup_thread.join(0) |
||||
end_time = time.time() |
||||
self.assertAlmostEqual(0, end_time - start_time, delta=_EPSILON) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
unittest.main(verbosity=2) |
Loading…
Reference in new issue