mirror of
https://github.com/golang/go
synced 2024-11-11 21:50:21 -07:00
4122319e5a
When running tests that fails to complete within the test timeout, the go tool sends the test program a SIGQUIT signal to print backtraces. However, for tests running with an exec wrapper, the resulting backtraces will come from the exec wrapper process and not the test program. Change the iOS exec wrapper to forward SIGQUIT signals to the lldb python driver and change the driver to forward the signals to the running test on the device. Before: $ GOARCH=arm64 go test forever_test.go lldb: running program SIGQUIT: quit PC=0x10816fe m=0 sigcode=0 goroutine 54 [syscall]: syscall.Syscall6(0x7, 0x16ab, 0xc000033dfc, 0x0, 0xc000116f30, 0x0, 0x0, 0xc000116f30, 0x0, 0x1328820) /Users/elias/go-tip/src/syscall/asm_darwin_amd64.s:41 +0x5 fp=0xc000033d48 sp=0xc000033d40 pc=0x10816d5 syscall.wait4(0x16ab, 0xc000033dfc, 0x0, 0xc000116f30, 0x90, 0x1200e00, 0x1) /Users/elias/go-tip/src/syscall/zsyscall_darwin_amd64.go:34 +0x7b fp=0xc000033dc0 sp=0xc000033d48 pc=0x107e4eb syscall.Wait4(0x16ab, 0xc000033e4c, 0x0, 0xc000116f30, 0xc0000fd518, 0x0, 0x0) /Users/elias/go-tip/src/syscall/syscall_bsd.go:129 +0x51 fp=0xc000033e10 sp=0xc000033dc0 pc=0x107b7b1 os.(*Process).wait(0xc00008d440, 0x1095e2e, 0xc0000fd518, 0x0) /Users/elias/go-tip/src/os/exec_unix.go:38 +0x7b fp=0xc000033e80 sp=0xc000033e10 pc=0x109af2b os.(*Process).Wait(0xc00008d440, 0xc000033fb0, 0x10, 0x11d1f00) /Users/elias/go-tip/src/os/exec.go:125 +0x2b fp=0xc000033eb0 sp=0xc000033e80 pc=0x109a47b os/exec.(*Cmd).Wait(0xc0000b1ce0, 0xc000033f90, 0x11394df) /Users/elias/go-tip/src/os/exec/exec.go:463 +0x5b fp=0xc000033f28 sp=0xc000033eb0 pc=0x1136f0b main.startDebugBridge.func1(0xc0000b1ce0, 0xc0000b8ae0, 0xc0000e2a80) /Users/elias/go-tip/misc/ios/go_darwin_arm_exec.go:314 +0x40 fp=0xc000033fc8 sp=0xc000033f28 pc=0x11a1980 runtime.goexit() /Users/elias/go-tip/src/runtime/asm_amd64.s:1360 +0x1 fp=0xc000033fd0 sp=0xc000033fc8 pc=0x10565a1 created by main.startDebugBridge /Users/elias/go-tip/misc/ios/go_darwin_arm_exec.go:313 +0x15f ... After: $ GOARCH=arm64 go test forever_test.go lldb: running program === RUN TestForever SIGQUIT: quit PC=0x100144e24 m=0 sigcode=0 ... goroutine 19 [select (no cases)]: command-line-arguments.TestForever(0x1300b60f0) /Users/elias/go-tip/src/forever_test.go:6 +0x18 testing.tRunner(0x1300b60f0, 0x100211aa0) /Users/elias/go-tip/src/testing/testing.go:795 +0xa8 created by testing.(*T).Run /Users/elias/go-tip/src/testing/testing.go:840 +0x22c ... Change-Id: I6b3cf1662d07a43ade0530842733b0944bee1ace Reviewed-on: https://go-review.googlesource.com/112676 Run-TryBot: Elias Naur <elias.naur@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com> |
||
---|---|---|
.. | ||
clangwrap.sh | ||
detect.go | ||
go_darwin_arm_exec.go | ||
README |
Go on iOS ========= For details on developing Go for iOS on macOS, see the documentation in the mobile subrepository: https://github.com/golang/mobile It is necessary to set up the environment before running tests or programs directly on a device. First make sure you have a valid developer certificate and have setup your device properly to run apps signed by your developer certificate. Then install the libimobiledevice and ideviceinstaller tools from https://www.libimobiledevice.org/. Use the HEAD versions from source; the stable versions have bugs that prevents the Go exec wrapper to install and run apps. Second, the Go exec wrapper must be told the developer account signing identity, the team id and a provisioned bundle id to use. They're specified with the environment variables GOIOS_DEV_ID, GOIOS_TEAM_ID and GOIOS_APP_ID. The detect.go program in this directory will attempt to auto-detect suitable values. Run it as go run detect.go which will output something similar to export GOIOS_DEV_ID="iPhone Developer: xxx@yyy.zzz (XXXXXXXX)" export GOIOS_APP_ID=YYYYYYYY.some.bundle.id export GOIOS_TEAM_ID=ZZZZZZZZ If you have multiple devices connected, specify the device UDID with the GOIOS_DEVICE_ID variable. Use `idevice_id -l` to list all available UDIDs. Finally, to run the standard library tests, run iostest.bash with GOARCH set. For example, GOARCH=arm64 ./iostest.bash To use the go tool directly to run programs and tests, put $GOROOT/bin into PATH to ensure the go_darwin_$GOARCH_exec wrapper is found. For example, to run the archive/tar tests export PATH=$GOROOT/bin:$PATH GOARCH=arm64 go test archive/tar Note that the go_darwin_$GOARCH_exec wrapper uninstalls any existing app identified by the bundle id before installing a new app. If the uninstalled app is the last app by the developer identity, the device might also remove the permission to run apps from that developer, and the exec wrapper will fail to install the new app. To avoid that, install another app with the same developer identity but with a different bundle id. That way, the permission to install apps is held on to while the primary app is uninstalled.