files []string
}
-var sysdir = func() (sd *sysDir) {
+var sysdir = func() *sysDir {
switch runtime.GOOS {
case "android":
- sd = &sysDir{
+ return &sysDir{
"/system/etc",
[]string{
"audio_policy.conf",
"system_fonts.xml",
},
}
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ wd, err := syscall.Getwd()
+ if err != nil {
+ wd = err.Error()
+ }
+ return &sysDir{
+ wd,
+ []string{
+ "ResourceRules.plist",
+ "Info.plist",
+ },
+ }
+ }
case "windows":
- sd = &sysDir{
+ return &sysDir{
Getenv("SystemRoot") + "\\system32\\drivers\\etc",
[]string{
"networks",
},
}
case "plan9":
- sd = &sysDir{
+ return &sysDir{
"/lib/ndb",
[]string{
"common",
"local",
},
}
- default:
- sd = &sysDir{
- "/etc",
- []string{
- "group",
- "hosts",
- "passwd",
- },
- }
}
- return
+ return &sysDir{
+ "/etc",
+ []string{
+ "group",
+ "hosts",
+ "passwd",
+ },
+ }
}()
func size(name string, t *testing.T) int64 {
return
}
-func newFile(testName string, t *testing.T) (f *File) {
- // Use a local file system, not NFS.
- // On Unix, override $TMPDIR in case the user
- // has it set to an NFS-mounted directory.
- dir := ""
- if runtime.GOOS != "android" && runtime.GOOS != "windows" {
- dir = "/tmp"
+// localTmp returns a local temporary directory not on NFS.
+func localTmp() string {
+ switch runtime.GOOS {
+ case "android", "windows":
+ return TempDir()
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ return TempDir()
+ }
}
- f, err := ioutil.TempFile(dir, "_Go_"+testName)
+ return "/tmp"
+}
+
+func newFile(testName string, t *testing.T) (f *File) {
+ f, err := ioutil.TempFile(localTmp(), "_Go_"+testName)
if err != nil {
t.Fatalf("TempFile %s: %s", testName, err)
}
}
func newDir(testName string, t *testing.T) (name string) {
- // Use a local file system, not NFS.
- // On Unix, override $TMPDIR in case the user
- // has it set to an NFS-mounted directory.
- dir := ""
- if runtime.GOOS != "android" && runtime.GOOS != "windows" {
- dir = "/tmp"
- }
- name, err := ioutil.TempDir(dir, "_Go_"+testName)
+ name, err := ioutil.TempDir(localTmp(), "_Go_"+testName)
if err != nil {
t.Fatalf("TempDir %s: %s", testName, err)
}
switch runtime.GOOS {
case "android":
dir = "/system/bin"
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ wd, err := Getwd()
+ if err != nil {
+ t.Fatal(err)
+ }
+ dir = wd
+ }
case "plan9":
dir = "/bin"
case "windows":
func TestHardLink(t *testing.T) {
// Hardlinks are not supported under windows or Plan 9.
- if runtime.GOOS == "plan9" {
+ switch runtime.GOOS {
+ case "plan9":
return
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ defer chtmpdir(t)()
+ }
}
from, to := "hardlinktestfrom", "hardlinktestto"
Remove(from) // Just in case.
}
}
+// chtmpdir changes the working directory to a new temporary directory and
+// provides a cleanup function. Used when PWD is read-only.
+func chtmpdir(t *testing.T) func() {
+ oldwd, err := Getwd()
+ if err != nil {
+ t.Fatal("chtmpdir: %v", err)
+ }
+ d, err := ioutil.TempDir("", "test")
+ if err != nil {
+ t.Fatal("chtmpdir: %v", err)
+ }
+ if err := Chdir(d); err != nil {
+ t.Fatal("chtmpdir: %v", err)
+ }
+ return func() {
+ if err := Chdir(oldwd); err != nil {
+ t.Fatal("chtmpdir: %v", err)
+ }
+ RemoveAll(d)
+ }
+}
+
func TestSymlink(t *testing.T) {
switch runtime.GOOS {
case "android", "nacl", "plan9":
if !supportsSymlinks {
t.Skipf("skipping on %s", runtime.GOOS)
}
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ defer chtmpdir(t)()
+ }
}
from, to := "symlinktestfrom", "symlinktestto"
Remove(from) // Just in case.
if !supportsSymlinks {
t.Skipf("skipping on %s", runtime.GOOS)
}
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ defer chtmpdir(t)()
+ }
}
s := "0123456789abcdef"
// Long, but not too long: a common limit is 255.
}
func TestRename(t *testing.T) {
+ if runtime.GOOS == "darwin" && runtime.GOARCH == "arm" {
+ defer chtmpdir(t)()
+ }
from, to := "renamefrom", "renameto"
Remove(to) // Just in case.
file, err := Create(from)
switch runtime.GOOS {
case "android", "nacl":
t.Skipf("skipping on %s", runtime.GOOS)
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ t.Skipf("skipping on %s/%s", runtime.GOOS, runtime.GOARCH)
+ }
}
var dir, cmd string
dirs = []string{"/", "/system/bin"}
case "plan9":
dirs = []string{"/", "/usr"}
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ d1, err := ioutil.TempDir("", "d1")
+ if err != nil {
+ t.Fatalf("TempDir: %v", err)
+ }
+ d2, err := ioutil.TempDir("", "d2")
+ if err != nil {
+ t.Fatalf("TempDir: %v", err)
+ }
+ dirs = []string{d1, d2}
+ }
}
oldwd := Getenv("PWD")
for mode := 0; mode < 2; mode++ {
switch runtime.GOOS {
case "android", "nacl", "plan9", "windows":
t.Skipf("skipping on %s", runtime.GOOS)
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ t.Skipf("skipping on %s/%s", runtime.GOOS, runtime.GOARCH)
+ }
}
// Check internal Hostname() against the output of /bin/hostname.
}
func TestAppend(t *testing.T) {
+ if runtime.GOOS == "darwin" && runtime.GOARCH == "arm" {
+ defer chtmpdir(t)()
+ }
const f = "append.txt"
defer Remove(f)
s := writeFile(t, f, O_CREATE|O_TRUNC|O_RDWR, "new")
}
func TestSameFile(t *testing.T) {
+ if runtime.GOOS == "darwin" && runtime.GOARCH == "arm" {
+ defer chtmpdir(t)()
+ }
fa, err := Create("a")
if err != nil {
t.Fatalf("Create(a): %v", err)
switch runtime.GOOS {
case "android", "nacl":
t.Skipf("skipping on %s", runtime.GOOS)
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ t.Skipf("skipping on %s/%s", runtime.GOOS, runtime.GOARCH)
+ }
}
// Re-exec the test binary itself to emulate "sleep 1".
case "plan9":
// TODO: golang.org/issue/8206
t.Skipf("skipping test on plan9; see issue 8206")
+ case "darwin":
+ if runtime.GOARCH == "arm" {
+ t.Skipf("skipping test on %s/%s, no fork", runtime.GOOS, runtime.GOARCH)
+ }
}
if Getenv("GO_WANT_HELPER_PROCESS") == "1" {