}
androiddir = fmt.Sprintf("/data/local/tmp/testcshared-%d", os.Getpid())
+ if GOOS == "android" {
+ cmd := exec.Command("adb", "shell", "mkdir", "-p", androiddir)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ log.Fatalf("setupAndroid failed: %v\n%s\n", err, out)
+ }
+ }
+
libgoname = "libgo." + libSuffix
ccOut := goEnv("CC")
os.Remove("libgo.h")
}
-var (
- androidOnce sync.Once
- androidErr error
-)
-
-func setupAndroid(t *testing.T) {
- if GOOS != "android" {
- return
- }
- androidOnce.Do(func() {
- cmd := exec.Command("adb", "shell", "mkdir", "-p", androiddir)
- out, err := cmd.CombinedOutput()
- if err != nil {
- androidErr = fmt.Errorf("setupAndroid failed: %v\n%s\n", err, out)
- }
- })
- if androidErr != nil {
- t.Fatal(androidErr)
- }
-}
-
func cleanupAndroid() {
if GOOS != "android" {
return
// test0: exported symbols in shared lib are accessible.
func TestExportedSymbols(t *testing.T) {
- cmd := "testp"
+ t.Parallel()
+
+ cmd := "testp0"
bin := cmdToRun(cmd)
- setupAndroid(t)
createHeadersOnce(t)
run(t, append(cc, "-I", installdir, "-o", cmd, "main0.c", libgoname)...)
adbPush(t, cmd)
- defer os.Remove("testp")
+ defer os.Remove(cmd)
out := runwithldlibrarypath(t, bin...)
if strings.TrimSpace(out) != "PASS" {
// test1: shared library can be dynamically loaded and exported symbols are accessible.
func TestExportedSymbolsWithDynamicLoad(t *testing.T) {
- cmd := "testp"
+ t.Parallel()
+
+ cmd := "testp1"
bin := cmdToRun(cmd)
- setupAndroid(t)
createHeadersOnce(t)
run(t, append(cc, "-o", cmd, "main1.c", "-ldl")...)
// test2: tests libgo2 which does not export any functions.
func TestUnexportedSymbols(t *testing.T) {
+ t.Parallel()
+
cmd := "testp2"
libname := "libgo2." + libSuffix
bin := cmdToRun(cmd)
- setupAndroid(t)
-
rungocmd(t,
"go", "build",
"-buildmode=c-shared",
// test3: tests main.main is exported on android.
func TestMainExportedOnAndroid(t *testing.T) {
+ t.Parallel()
+
if GOOS != "android" {
return
}
cmd := "testp3"
bin := cmdToRun(cmd)
- setupAndroid(t)
createHeadersOnce(t)
run(t, append(cc, "-o", cmd, "main3.c", "-ldl")...)
// test4: test signal handlers
func TestSignalHandlers(t *testing.T) {
+ t.Parallel()
+
cmd := "testp4"
libname := "libgo4." + libSuffix
bin := cmdToRun(cmd)
- setupAndroid(t)
-
rungocmd(t,
"go", "build",
"-buildmode=c-shared",
// test5: test signal handlers with os/signal.Notify
func TestSignalHandlersWithNotify(t *testing.T) {
+ t.Parallel()
+
cmd := "testp5"
libname := "libgo5." + libSuffix
bin := cmdToRun(cmd)
- setupAndroid(t)
-
rungocmd(t,
"go", "build",
"-buildmode=c-shared",
}
func TestPIE(t *testing.T) {
+ t.Parallel()
+
switch GOOS {
case "linux", "android":
break