syncthing/lib/model/testos_test.go

87 lines
1.8 KiB
Go

// Copyright (C) 2019 The Syncthing Authors.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
package model
import (
"os"
"time"
)
// fatal is the required common interface between *testing.B and *testing.T
type fatal interface {
Fatal(...interface{})
Helper()
}
type fatalOs struct {
fatal
}
func (f *fatalOs) must(fn func() error) {
f.Helper()
if err := fn(); err != nil {
f.Fatal(err)
}
}
func (f *fatalOs) Chmod(name string, mode os.FileMode) {
f.Helper()
f.must(func() error { return os.Chmod(name, mode) })
}
func (f *fatalOs) Chtimes(name string, atime time.Time, mtime time.Time) {
f.Helper()
f.must(func() error { return os.Chtimes(name, atime, mtime) })
}
func (f *fatalOs) Create(name string) *os.File {
f.Helper()
file, err := os.Create(name)
if err != nil {
f.Fatal(err)
}
return file
}
func (f *fatalOs) Mkdir(name string, perm os.FileMode) {
f.Helper()
f.must(func() error { return os.Mkdir(name, perm) })
}
func (f *fatalOs) MkdirAll(name string, perm os.FileMode) {
f.Helper()
f.must(func() error { return os.MkdirAll(name, perm) })
}
func (f *fatalOs) Remove(name string) {
f.Helper()
if err := os.Remove(name); err != nil && !os.IsNotExist(err) {
f.Fatal(err)
}
}
func (f *fatalOs) RemoveAll(name string) {
f.Helper()
if err := os.RemoveAll(name); err != nil && !os.IsNotExist(err) {
f.Fatal(err)
}
}
func (f *fatalOs) Rename(oldname, newname string) {
f.Helper()
f.must(func() error { return os.Rename(oldname, newname) })
}
func (f *fatalOs) Stat(name string) os.FileInfo {
f.Helper()
info, err := os.Stat(name)
if err != nil {
f.Fatal(err)
}
return info
}