tendermint/libs/autofile/autofile_test.go

123 lines
3.0 KiB
Go
Raw Normal View History

2016-10-26 16:23:19 -07:00
package autofile
import (
"io/ioutil"
2016-10-26 16:23:19 -07:00
"os"
"syscall"
"testing"
"time"
"github.com/stretchr/testify/require"
2018-07-01 22:36:49 -04:00
cmn "github.com/tendermint/tendermint/libs/common"
2016-10-26 16:23:19 -07:00
)
func TestSIGHUP(t *testing.T) {
// First, create an AutoFile writing to a tempfile dir
file, err := ioutil.TempFile("", "sighup_test")
require.NoError(t, err)
err = file.Close()
require.NoError(t, err)
name := file.Name()
2016-10-26 16:23:19 -07:00
// Here is the actual AutoFile
2017-10-04 00:13:58 -04:00
af, err := OpenAutoFile(name)
require.NoError(t, err)
2016-10-26 16:23:19 -07:00
// Write to the file.
_, err = af.Write([]byte("Line 1\n"))
require.NoError(t, err)
2016-10-26 16:23:19 -07:00
_, err = af.Write([]byte("Line 2\n"))
require.NoError(t, err)
2016-10-26 16:23:19 -07:00
// Move the file over
2017-10-04 00:13:58 -04:00
err = os.Rename(name, name+"_old")
require.NoError(t, err)
2016-10-26 16:23:19 -07:00
// Send SIGHUP to self.
syscall.Kill(syscall.Getpid(), syscall.SIGHUP)
// Wait a bit... signals are not handled synchronously.
time.Sleep(time.Millisecond * 10)
2016-10-26 16:23:19 -07:00
// Write more to the file.
_, err = af.Write([]byte("Line 3\n"))
require.NoError(t, err)
2016-10-26 16:23:19 -07:00
_, err = af.Write([]byte("Line 4\n"))
require.NoError(t, err)
err = af.Close()
require.NoError(t, err)
2016-10-26 16:23:19 -07:00
// Both files should exist
2017-10-03 12:18:21 -04:00
if body := cmn.MustReadFile(name + "_old"); string(body) != "Line 1\nLine 2\n" {
2016-10-26 16:23:19 -07:00
t.Errorf("Unexpected body %s", body)
}
2017-10-03 12:18:21 -04:00
if body := cmn.MustReadFile(name); string(body) != "Line 3\nLine 4\n" {
2016-10-26 16:23:19 -07:00
t.Errorf("Unexpected body %s", body)
}
}
// // Manually modify file permissions, close, and reopen using autofile:
// // We expect the file permissions to be changed back to the intended perms.
// func TestOpenAutoFilePerms(t *testing.T) {
// file, err := ioutil.TempFile("", "permission_test")
// require.NoError(t, err)
// err = file.Close()
// require.NoError(t, err)
// name := file.Name()
// // open and change permissions
// af, err := OpenAutoFile(name)
// require.NoError(t, err)
// err = af.file.Chmod(0755)
// require.NoError(t, err)
// err = af.Close()
// require.NoError(t, err)
// // reopen and expect an ErrPermissionsChanged as Cause
// af, err = OpenAutoFile(name)
// require.Error(t, err)
// if e, ok := err.(*errors.ErrPermissionsChanged); ok {
// t.Logf("%v", e)
// } else {
// t.Errorf("unexpected error %v", e)
// }
// }
2018-11-06 15:54:04 +01:00
func TestAutoFileSize(t *testing.T) {
// First, create an AutoFile writing to a tempfile dir
f, err := ioutil.TempFile("", "sighup_test")
require.NoError(t, err)
err = f.Close()
require.NoError(t, err)
// Here is the actual AutoFile.
af, err := OpenAutoFile(f.Name())
require.NoError(t, err)
// 1. Empty file
size, err := af.Size()
require.Zero(t, size)
require.NoError(t, err)
// 2. Not empty file
data := []byte("Maniac\n")
_, err = af.Write(data)
require.NoError(t, err)
size, err = af.Size()
require.EqualValues(t, len(data), size)
require.NoError(t, err)
// 3. Not existing file
err = af.Close()
require.NoError(t, err)
err = os.Remove(f.Name())
require.NoError(t, err)
size, err = af.Size()
require.EqualValues(t, 0, size, "Expected a new file to be empty")
require.NoError(t, err)
// Cleanup
_ = os.Remove(f.Name())
}