199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest target commands: target.auto-install-main-executable. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprechtimport time 699451b44SJordan Rupprechtimport gdbremote_testcase 799451b44SJordan Rupprecht 899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprechtclass TestAutoInstallMainExecutable(gdbremote_testcase.GdbRemoteTestCaseBase): 1499451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht @llgs_test 1799451b44SJordan Rupprecht @no_debug_info_test 1899451b44SJordan Rupprecht @skipIf(remote=False) 1999451b44SJordan Rupprecht @expectedFailureAll(hostoslist=["windows"], triple='.*-android') 2099451b44SJordan Rupprecht def test_target_auto_install_main_executable(self): 2199451b44SJordan Rupprecht self.build() 2299451b44SJordan Rupprecht self.init_llgs_test(False) 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht # Manually install the modified binary. 2599451b44SJordan Rupprecht working_dir = lldb.remote_platform.GetWorkingDirectory() 2699451b44SJordan Rupprecht src_device = lldb.SBFileSpec(self.getBuildArtifact("a.device.out")) 2799451b44SJordan Rupprecht dest = lldb.SBFileSpec(os.path.join(working_dir, "a.out")) 2899451b44SJordan Rupprecht err = lldb.remote_platform.Put(src_device, dest) 2999451b44SJordan Rupprecht if err.Fail(): 3099451b44SJordan Rupprecht raise RuntimeError( 3199451b44SJordan Rupprecht "Unable copy '%s' to '%s'.\n>>> %s" % 3299451b44SJordan Rupprecht (src_device.GetFilename(), working_dir, err.GetCString())) 3399451b44SJordan Rupprecht 3499451b44SJordan Rupprecht m = re.search("^(.*)://([^/]*):(.*)$", configuration.lldb_platform_url) 3599451b44SJordan Rupprecht protocol = m.group(1) 3699451b44SJordan Rupprecht hostname = m.group(2) 3799451b44SJordan Rupprecht hostport = int(m.group(3)) 3899451b44SJordan Rupprecht listen_url = "*:"+str(hostport+1) 3999451b44SJordan Rupprecht 4099451b44SJordan Rupprecht commandline_args = [ 4199451b44SJordan Rupprecht "platform", 4299451b44SJordan Rupprecht "--listen", 4399451b44SJordan Rupprecht listen_url, 4499451b44SJordan Rupprecht "--server" 4599451b44SJordan Rupprecht ] 4699451b44SJordan Rupprecht 4799451b44SJordan Rupprecht self.spawnSubprocess( 4899451b44SJordan Rupprecht self.debug_monitor_exe, 4999451b44SJordan Rupprecht commandline_args, 5099451b44SJordan Rupprecht install_remote=False) 5199451b44SJordan Rupprecht self.addTearDownHook(self.cleanupSubprocesses) 5299451b44SJordan Rupprecht 5399451b44SJordan Rupprecht # Wait for the new process gets ready. 5499451b44SJordan Rupprecht time.sleep(0.1) 5599451b44SJordan Rupprecht 56*a31130f6STatyana Krasnukha self.dbg.SetAsync(False) 5799451b44SJordan Rupprecht 5899451b44SJordan Rupprecht new_platform = lldb.SBPlatform(lldb.remote_platform.GetName()) 59*a31130f6STatyana Krasnukha self.dbg.SetSelectedPlatform(new_platform) 60*a31130f6STatyana Krasnukha interpreter = self.dbg.GetCommandInterpreter() 6199451b44SJordan Rupprecht 6299451b44SJordan Rupprecht connect_url = "%s://%s:%s" % (protocol, hostname, str(hostport+1)) 6399451b44SJordan Rupprecht 6499451b44SJordan Rupprecht command = "platform connect %s" % (connect_url) 6599451b44SJordan Rupprecht 6699451b44SJordan Rupprecht result = lldb.SBCommandReturnObject() 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht # Test the default setting. 69*a31130f6STatyana Krasnukha interpreter.HandleCommand("settings show target.auto-install-main-executable", result) 7099451b44SJordan Rupprecht self.assertTrue( 7199451b44SJordan Rupprecht result.Succeeded() and 7299451b44SJordan Rupprecht "target.auto-install-main-executable (boolean) = true" in result.GetOutput(), 7399451b44SJordan Rupprecht "Default settings for target.auto-install-main-executable failed.: %s - %s" % 7499451b44SJordan Rupprecht (result.GetOutput(), result.GetError())) 7599451b44SJordan Rupprecht 7699451b44SJordan Rupprecht # Disable the auto install. 77*a31130f6STatyana Krasnukha interpreter.HandleCommand("settings set target.auto-install-main-executable false", result) 78*a31130f6STatyana Krasnukha interpreter.HandleCommand("settings show target.auto-install-main-executable", result) 7999451b44SJordan Rupprecht self.assertTrue( 8099451b44SJordan Rupprecht result.Succeeded() and 8199451b44SJordan Rupprecht "target.auto-install-main-executable (boolean) = false" in result.GetOutput(), 8299451b44SJordan Rupprecht "Default settings for target.auto-install-main-executable failed.: %s - %s" % 8399451b44SJordan Rupprecht (result.GetOutput(), result.GetError())) 8499451b44SJordan Rupprecht 85*a31130f6STatyana Krasnukha interpreter.HandleCommand("platform select %s"%configuration.lldb_platform_name, result) 86*a31130f6STatyana Krasnukha interpreter.HandleCommand(command, result) 8799451b44SJordan Rupprecht 8899451b44SJordan Rupprecht self.assertTrue( 8999451b44SJordan Rupprecht result.Succeeded(), 9099451b44SJordan Rupprecht "platform process connect failed: %s - %s" % 9199451b44SJordan Rupprecht (result.GetOutput(),result.GetError())) 9299451b44SJordan Rupprecht 9399451b44SJordan Rupprecht # Create the target with the original file. 94*a31130f6STatyana Krasnukha interpreter.HandleCommand("target create --remote-file %s %s "% 9599451b44SJordan Rupprecht (os.path.join(working_dir,dest.GetFilename()), self.getBuildArtifact("a.out")), 9699451b44SJordan Rupprecht result) 9799451b44SJordan Rupprecht self.assertTrue( 9899451b44SJordan Rupprecht result.Succeeded(), 9999451b44SJordan Rupprecht "platform create failed: %s - %s" % 10099451b44SJordan Rupprecht (result.GetOutput(),result.GetError())) 10199451b44SJordan Rupprecht 10299451b44SJordan Rupprecht target = new_debugger.GetSelectedTarget() 10399451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByName("main") 10499451b44SJordan Rupprecht 10599451b44SJordan Rupprecht launch_info = lldb.SBLaunchInfo(None) 10699451b44SJordan Rupprecht error = lldb.SBError() 10799451b44SJordan Rupprecht process = target.Launch(launch_info, error) 10899451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 10999451b44SJordan Rupprecht 11099451b44SJordan Rupprecht thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) 11199451b44SJordan Rupprecht self.assertTrue( 11299451b44SJordan Rupprecht thread.IsValid(), 11399451b44SJordan Rupprecht "There should be a thread stopped due to breakpoint") 11499451b44SJordan Rupprecht 11599451b44SJordan Rupprecht frame = thread.GetFrameAtIndex(0) 11699451b44SJordan Rupprecht self.assertEqual(frame.GetFunction().GetName(), "main") 11799451b44SJordan Rupprecht 118*a31130f6STatyana Krasnukha interpreter.HandleCommand("target variable build", result) 11999451b44SJordan Rupprecht self.assertTrue( 12099451b44SJordan Rupprecht result.Succeeded() and 12199451b44SJordan Rupprecht '"device"' in result.GetOutput(), 12299451b44SJordan Rupprecht "Magic in the binary is wrong: %s " % result.GetOutput()) 12399451b44SJordan Rupprecht 12499451b44SJordan Rupprecht process.Continue() 125