]> Cypherpunks repositories - gostls13.git/commitdiff
os,time: fix tests on iOS
authorElias Naur <mail@eliasnaur.com>
Wed, 1 May 2019 07:39:49 +0000 (09:39 +0200)
committerElias Naur <mail@eliasnaur.com>
Wed, 1 May 2019 13:53:44 +0000 (13:53 +0000)
When fixing tests for for self-hosted iOS builds, I
broke hosted builds.

Updates #31722

Change-Id: Id4e7d234fbd86cb2d29d320d75f4441efd663d12
Reviewed-on: https://go-review.googlesource.com/c/go/+/174698
Run-TryBot: Elias Naur <mail@eliasnaur.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/os/os_test.go
src/time/zoneinfo_ios.go

index c438508ceb9a6efabeaae3e1a3d52bdc246eecfe..c101281258309a59f5fd4bd07c5e425ba9974d0b 100644 (file)
@@ -1204,6 +1204,7 @@ func TestChdirAndGetwd(t *testing.T) {
        case "darwin":
                switch runtime.GOARCH {
                case "arm", "arm64":
+                       dirs = nil
                        for _, d := range []string{"d1", "d2"} {
                                dir, err := ioutil.TempDir("", d)
                                if err != nil {
index 09383a5b30f0f3bccefbe53779c59c56650a700e..f5a97befd899cc9fff5658fa956317b4f1724f10 100644 (file)
@@ -13,20 +13,31 @@ import (
 )
 
 var zoneSources = []string{
-       getZipParent() + "/zoneinfo.zip",
-       runtime.GOROOT() + "/lib/time/zoneinfo.zip",
+       getZoneRoot() + "/zoneinfo.zip",
 }
 
-func getZipParent() string {
-       wd, err := syscall.Getwd()
-       if err != nil {
-               return "/XXXNOEXIST"
-       }
-
+func getZoneRoot() string {
        // The working directory at initialization is the root of the
        // app bundle: "/private/.../bundlename.app". That's where we
-       // keep zoneinfo.zip.
-       return wd
+       // keep zoneinfo.zip for tethered iOS builds.
+       // For self-hosted iOS builds, the zoneinfo.zip is in GOROOT.
+       roots := []string{runtime.GOROOT() + "/lib/time"}
+       wd, err := syscall.Getwd()
+       if err == nil {
+               roots = append(roots, wd)
+       }
+       for _, r := range roots {
+               var st syscall.Stat_t
+               fd, err := syscall.Open(r, syscall.O_RDONLY, 0)
+               if err != nil {
+                       continue
+               }
+               defer syscall.Close(fd)
+               if err := syscall.Fstat(fd, &st); err == nil {
+                       return r
+               }
+       }
+       return "/XXXNOEXIST"
 }
 
 func initLocal() {