rclone/vendor/github.com/sevlyar/go-daemon/lock_file_test.go

106 lines
2.2 KiB
Go

package daemon
import (
"fmt"
"io/ioutil"
"os"
"testing"
)
var (
filename = os.TempDir() + "/test.lock"
fileperm os.FileMode = 0644
invalidname = "/x/y/unknown"
)
func TestCreatePidFile(test *testing.T) {
if _, err := CreatePidFile(invalidname, fileperm); err == nil {
test.Fatal("CreatePidFile(): Error was not detected on invalid name")
}
lock, err := CreatePidFile(filename, fileperm)
if err != nil {
test.Fatal(err)
}
defer lock.Remove()
data, err := ioutil.ReadFile(filename)
if err != nil {
test.Fatal(err)
}
if string(data) != fmt.Sprint(os.Getpid()) {
test.Fatal("pids not equal")
}
file, err := os.OpenFile(filename, os.O_RDONLY, fileperm)
if err != nil {
test.Fatal(err)
}
if err = NewLockFile(file).WritePid(); err == nil {
test.Fatal("WritePid(): Error was not detected on invalid permissions")
}
}
func TestNewLockFile(test *testing.T) {
lock := NewLockFile(os.NewFile(1001, ""))
err := lock.Remove()
if err == nil {
test.Fatal("Remove(): Error was not detected on invalid fd")
}
err = lock.WritePid()
if err == nil {
test.Fatal("WritePid(): Error was not detected on invalid fd")
}
}
func TestGetFdName(test *testing.T) {
name, err := GetFdName(0)
if err != nil {
test.Error(err)
} else {
if name != "/dev/null" {
test.Errorf("Filename of fd 0: `%s'", name)
}
}
name, err = GetFdName(1011)
if err == nil {
test.Errorf("GetFdName(): Error was not detected on invalid fd, name: `%s'", name)
}
}
func TestReadPid(test *testing.T) {
lock, err := CreatePidFile(filename, fileperm)
if err != nil {
test.Fatal(err)
}
defer lock.Remove()
pid, err := lock.ReadPid()
if err != nil {
test.Fatal("ReadPid(): Unable read pid from file:", err)
}
if pid != os.Getpid() {
test.Fatal("Pid not equal real pid")
}
}
func TestLockFileLock(test *testing.T) {
lock1, err := OpenLockFile(filename, fileperm)
if err != nil {
test.Fatal(err)
}
if err := lock1.Lock(); err != nil {
test.Fatal(err)
}
defer lock1.Remove()
lock2, err := OpenLockFile(filename, fileperm)
if err != nil {
test.Fatal(err)
}
if err := lock2.Lock(); err != ErrWouldBlock {
test.Fatal("To lock file more than once must be unavailable.")
}
}