diff --git a/erp5/util/testnode/SlapOSControler.py b/erp5/util/testnode/SlapOSControler.py index d781a76011bc43e8b7fe57774e257237877cb993..ebd232c638e5e87d2f0eff0f8351272197c50122 100644 --- a/erp5/util/testnode/SlapOSControler.py +++ b/erp5/util/testnode/SlapOSControler.py @@ -234,18 +234,31 @@ class SlapOSControler(object): proxy = subprocess.Popen([config['slapos_binary'], 'proxy', 'start', '--cfg' , self.slapos_config], **kwargs) process_manager.process_pid_set.add(proxy.pid) - # XXX: dirty, giving some time for proxy to being able to accept - # connections - time.sleep(20) + + slap = self.slap = slapos.slap.slap() + # Wait for proxy to accept connections + retries = 0 + while True: + time.sleep(.5) + try: + slap.initializeConnection(config['master_url']) + computer = slap.registerComputer(config['computer_id']) + # Call a method to ensure connection to master can be established + computer.getComputerPartitionList() + except slapos.slap.ConnectionError, e: + retries += 1 + if retries >= 20: + raise + logger.debug("Proxy still not started %s, retrying", e) + else: + break + try: - slap = self.slap = slapos.slap.slap() - slap.initializeConnection(config['master_url']) # register software profile for path in self.software_path_list: slap.registerSupply().supply( path, computer_guid=config['computer_id']) - computer = slap.registerComputer(config['computer_id']) except Exception: logger.exception("SlapOSControler.initializeSlapOSControler") raise ValueError("Unable to registerSupply")