X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/49a647b963d16c7035d514ea6a09a11afe3a5d19..089b68192e6fd089c03331c389da1dace039c899:/services/nodemanager/tests/testutil.py diff --git a/services/nodemanager/tests/testutil.py b/services/nodemanager/tests/testutil.py index 15337c4120..2ec13c0b8b 100644 --- a/services/nodemanager/tests/testutil.py +++ b/services/nodemanager/tests/testutil.py @@ -1,4 +1,7 @@ #!/usr/bin/env python +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 from __future__ import absolute_import, print_function @@ -52,7 +55,7 @@ def cloud_object_mock(name_id, **extra): def cloud_node_fqdn(node): # We intentionally put the FQDN somewhere goofy to make sure tested code is # using this function for lookups. - return node.extra.get('testname', 'NoTestName') + return node.extra.get('testname', node.name+'.NoTestName.invalid') def ip_address_mock(last_octet): return '10.20.30.{}'.format(last_octet) @@ -75,14 +78,17 @@ class MockShutdownTimer(object): class MockSize(object): - def __init__(self, factor): + def __init__(self, factor, preemptable=False): self.id = 'z{}.test'.format(factor) - self.name = self.id + self.name = 'test size '+self.id self.ram = 128 * factor - self.disk = 100 * factor + self.disk = factor # GB + self.scratch = 1000 * factor # MB self.bandwidth = 16 * factor self.price = float(factor) self.extra = {} + self.real = self + self.preemptable = preemptable def __eq__(self, other): return self.id == other.id @@ -119,7 +125,10 @@ class ActorTestMixin(object): pykka.ActorRegistry.stop_all() def stop_proxy(self, proxy): - return proxy.actor_ref.stop(timeout=self.TIMEOUT) + th = proxy.get_thread().get() + t = proxy.actor_ref.stop(timeout=self.TIMEOUT) + th.join() + return t def wait_for_assignment(self, proxy, attr_name, unassigned=None, timeout=TIMEOUT): @@ -132,11 +141,13 @@ class ActorTestMixin(object): if result is not unassigned: return result - def busywait(self, f): + def busywait(self, f, finalize=None): n = 0 - while not f() and n < 10: + while not f() and n < 20: time.sleep(.1) n += 1 + if finalize is not None: + finalize() self.assertTrue(f()) @@ -209,7 +220,9 @@ class RemotePollLoopActorTestMixin(ActorTestMixin): self.monitor = self.TEST_CLASS.start( self.client, self.timer, *args, **kwargs).proxy() -def cloud_node_mock(node_num=99, size=MockSize(1), **extra): +def cloud_node_mock(node_num=99, size=None, **extra): + if size is None: + size = MockSize(node_num) node = mock.NonCallableMagicMock( ['id', 'name', 'state', 'public_ips', 'private_ips', 'driver', 'size', 'image', 'extra'],