JDevlieghere created this revision. JDevlieghere added a reviewer: aprantl. JDevlieghere requested review of this revision.
The current code fails when the the first attempt to read the PID from stderr doesn't match the given regex. This patch changes the code to make up to 10 attempts. Repository: rLLDB LLDB https://reviews.llvm.org/D85758 Files: lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py Index: lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py =================================================================== --- lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py +++ lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py @@ -12,9 +12,13 @@ mydir = TestBase.compute_mydir(__file__) + # Number of attempts to read the PID from the simctl output. + PID_RETRIES = 10 + def check_simulator_ostype(self, sdk, platform, arch='x86_64'): - sim_devices_str = subprocess.check_output(['xcrun', 'simctl', 'list', - '-j', 'devices']).decode("utf-8") + cmd = ['xcrun', 'simctl', 'list', '-j', 'devices'] + self.trace(' '.join(cmd)) + sim_devices_str = subprocess.check_output(cmd).decode("utf-8") sim_devices = json.loads(sim_devices_str)['devices'] # Find an available simulator for the requested platform deviceUDID = None @@ -48,19 +52,27 @@ self.build(dictionary={ 'EXE': exe_name, 'SDKROOT': sdkroot.strip(), 'ARCH': arch }) exe_path = self.getBuildArtifact(exe_name) - sim_launcher = subprocess.Popen(['xcrun', 'simctl', 'spawn', '-s', - deviceUDID, exe_path, - 'print-pid', 'sleep:10'], - stderr=subprocess.PIPE) + cmd = [ + 'xcrun', 'simctl', 'spawn', '-s', deviceUDID, exe_path, + 'print-pid', 'sleep:10' + ] + self.trace(' '.join(cmd)) + sim_launcher = subprocess.Popen(cmd, stderr=subprocess.PIPE) # Get the PID from the process output pid = None - while not pid: + + # Make PID_RETRIES attempt to get the PID. + for _ in range(0, self.PID_RETRIES): stderr = sim_launcher.stderr.readline().decode("utf-8") - if stderr == '': + if not stderr: continue - m = re.match(r"PID: (.*)", stderr) - self.assertIsNotNone(m) - pid = int(m.group(1)) + match = re.match(r"PID: (.*)", stderr) + if match: + pid = int(match.group(1)) + break + + # Make sure we found the PID. + self.assertIsNotNone(pid) # Launch debug monitor attaching to the simulated process self.init_debugserver_test()
Index: lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py =================================================================== --- lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py +++ lldb/test/API/tools/lldb-server/TestAppleSimulatorOSType.py @@ -12,9 +12,13 @@ mydir = TestBase.compute_mydir(__file__) + # Number of attempts to read the PID from the simctl output. + PID_RETRIES = 10 + def check_simulator_ostype(self, sdk, platform, arch='x86_64'): - sim_devices_str = subprocess.check_output(['xcrun', 'simctl', 'list', - '-j', 'devices']).decode("utf-8") + cmd = ['xcrun', 'simctl', 'list', '-j', 'devices'] + self.trace(' '.join(cmd)) + sim_devices_str = subprocess.check_output(cmd).decode("utf-8") sim_devices = json.loads(sim_devices_str)['devices'] # Find an available simulator for the requested platform deviceUDID = None @@ -48,19 +52,27 @@ self.build(dictionary={ 'EXE': exe_name, 'SDKROOT': sdkroot.strip(), 'ARCH': arch }) exe_path = self.getBuildArtifact(exe_name) - sim_launcher = subprocess.Popen(['xcrun', 'simctl', 'spawn', '-s', - deviceUDID, exe_path, - 'print-pid', 'sleep:10'], - stderr=subprocess.PIPE) + cmd = [ + 'xcrun', 'simctl', 'spawn', '-s', deviceUDID, exe_path, + 'print-pid', 'sleep:10' + ] + self.trace(' '.join(cmd)) + sim_launcher = subprocess.Popen(cmd, stderr=subprocess.PIPE) # Get the PID from the process output pid = None - while not pid: + + # Make PID_RETRIES attempt to get the PID. + for _ in range(0, self.PID_RETRIES): stderr = sim_launcher.stderr.readline().decode("utf-8") - if stderr == '': + if not stderr: continue - m = re.match(r"PID: (.*)", stderr) - self.assertIsNotNone(m) - pid = int(m.group(1)) + match = re.match(r"PID: (.*)", stderr) + if match: + pid = int(match.group(1)) + break + + # Make sure we found the PID. + self.assertIsNotNone(pid) # Launch debug monitor attaching to the simulated process self.init_debugserver_test()
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits