libs/os: remove unused aliases, add test cases (#5654)

Remove unused ReadFile (unused) and
WriteFile (almost unused, alias of ioutil.WriteFile).

Add testcases for Must{Read,Write}File.
This commit is contained in:
Alessio Treglia
2020-11-13 10:59:45 +00:00
committed by GitHub
parent 95cff1efb4
commit 8bd3d5105f
9 changed files with 71 additions and 85 deletions
+20 -23
View File
@@ -10,8 +10,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
tmos "github.com/tendermint/tendermint/libs/os"
)
func TestSIGHUP(t *testing.T) {
@@ -27,10 +25,9 @@ func TestSIGHUP(t *testing.T) {
dir, err := ioutil.TempDir("", "sighup_test")
require.NoError(t, err)
t.Cleanup(func() {
os.RemoveAll(dir)
_ = os.RemoveAll(dir)
})
err = os.Chdir(dir)
require.NoError(t, err)
require.NoError(t, os.Chdir(dir))
// Create an AutoFile in the temporary directory
name := "sighup_test"
@@ -45,19 +42,16 @@ func TestSIGHUP(t *testing.T) {
require.NoError(t, err)
// Move the file over
err = os.Rename(name, name+"_old")
require.NoError(t, err)
require.NoError(t, os.Rename(name, name+"_old"))
// Move into a different temporary directory
otherDir, err := ioutil.TempDir("", "sighup_test_other")
require.NoError(t, err)
defer os.RemoveAll(otherDir)
err = os.Chdir(otherDir)
require.NoError(t, err)
t.Cleanup(func() { os.RemoveAll(otherDir) })
require.NoError(t, os.Chdir(otherDir))
// Send SIGHUP to self.
err = syscall.Kill(syscall.Getpid(), syscall.SIGHUP)
require.NoError(t, err)
require.NoError(t, syscall.Kill(syscall.Getpid(), syscall.SIGHUP))
// Wait a bit... signals are not handled synchronously.
time.Sleep(time.Millisecond * 10)
@@ -67,14 +61,13 @@ func TestSIGHUP(t *testing.T) {
require.NoError(t, err)
_, err = af.Write([]byte("Line 4\n"))
require.NoError(t, err)
err = af.Close()
require.NoError(t, err)
require.NoError(t, af.Close())
// Both files should exist
if body := tmos.MustReadFile(filepath.Join(dir, name+"_old")); string(body) != "Line 1\nLine 2\n" {
if body := mustReadFile(t, filepath.Join(dir, name+"_old")); string(body) != "Line 1\nLine 2\n" {
t.Errorf("unexpected body %s", body)
}
if body := tmos.MustReadFile(filepath.Join(dir, name)); string(body) != "Line 3\nLine 4\n" {
if body := mustReadFile(t, filepath.Join(dir, name)); string(body) != "Line 3\nLine 4\n" {
t.Errorf("unexpected body %s", body)
}
@@ -115,8 +108,7 @@ 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)
require.NoError(t, f.Close())
// Here is the actual AutoFile.
af, err := OpenAutoFile(f.Name())
@@ -136,14 +128,19 @@ func TestAutoFileSize(t *testing.T) {
require.NoError(t, err)
// 3. Not existing file
err = af.Close()
require.NoError(t, err)
err = os.Remove(f.Name())
require.NoError(t, err)
require.NoError(t, af.Close())
require.NoError(t, os.Remove(f.Name()))
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())
t.Cleanup(func() { os.Remove(f.Name()) })
}
func mustReadFile(t *testing.T, filePath string) []byte {
fileBytes, err := ioutil.ReadFile(filePath)
require.NoError(t, err)
return fileBytes
}
+2 -9
View File
@@ -32,16 +32,9 @@ func Fail() {
}
if callIndex == callIndexToFail {
Exit()
fmt.Printf("*** fail-test %d ***\n", callIndex)
os.Exit(1)
}
callIndex++
}
func Exit() {
fmt.Printf("*** fail-test %d ***\n", callIndex)
os.Exit(1)
// proc, _ := os.FindProcess(os.Getpid())
// proc.Signal(os.Interrupt)
// panic(fmt.Sprintf("*** fail-test %d ***", callIndex))
}
-34
View File
@@ -3,7 +3,6 @@ package os
import (
"fmt"
"io"
"io/ioutil"
"os"
"os/signal"
"syscall"
@@ -29,15 +28,6 @@ func TrapSignal(logger logger, cb func()) {
}()
}
// Kill the running process by sending itself SIGTERM.
func Kill() error {
p, err := os.FindProcess(os.Getpid())
if err != nil {
return err
}
return p.Signal(syscall.SIGTERM)
}
func Exit(s string) {
fmt.Printf(s + "\n")
os.Exit(1)
@@ -58,30 +48,6 @@ func FileExists(filePath string) bool {
return !os.IsNotExist(err)
}
func ReadFile(filePath string) ([]byte, error) {
return ioutil.ReadFile(filePath)
}
func MustReadFile(filePath string) []byte {
fileBytes, err := ioutil.ReadFile(filePath)
if err != nil {
Exit(fmt.Sprintf("MustReadFile failed: %v", err))
return nil
}
return fileBytes
}
func WriteFile(filePath string, contents []byte, mode os.FileMode) error {
return ioutil.WriteFile(filePath, contents, mode)
}
func MustWriteFile(filePath string, contents []byte, mode os.FileMode) {
err := WriteFile(filePath, contents, mode)
if err != nil {
Exit(fmt.Sprintf("MustWriteFile failed: %v", err))
}
}
// CopyFile copies a file. It truncates the destination file if it exists.
func CopyFile(src, dst string) error {
info, err := os.Stat(src)
+20 -7
View File
@@ -6,6 +6,7 @@ import (
"io/ioutil"
"os"
"os/exec"
"syscall"
"testing"
"time"
@@ -47,10 +48,7 @@ func TestTrapSignal(t *testing.T) {
return
}
cmd := exec.Command(os.Args[0], "-test.run="+t.Name())
mockStderr := bytes.NewBufferString("")
cmd.Env = append(os.Environ(), "TM_TRAP_SIGNAL_TEST=1")
cmd.Stderr = mockStderr
cmd, _, mockStderr := newTestProgram(t, "TM_TRAP_SIGNAL_TEST")
err := cmd.Run()
if err == nil {
@@ -67,7 +65,6 @@ func TestTrapSignal(t *testing.T) {
}
t.Fatal("this error should not be triggered")
}
type mockLogger struct{}
@@ -80,10 +77,26 @@ func killer() {
tmos.TrapSignal(logger, func() { _, _ = fmt.Fprintf(os.Stderr, "exiting") })
time.Sleep(1 * time.Second)
// use Kill() to test SIGTERM
if err := tmos.Kill(); err != nil {
p, err := os.FindProcess(os.Getpid())
if err != nil {
panic(err)
}
if err := p.Signal(syscall.SIGTERM); err != nil {
panic(err)
}
time.Sleep(1 * time.Second)
}
func newTestProgram(t *testing.T, environVar string) (cmd *exec.Cmd, stdout *bytes.Buffer, stderr *bytes.Buffer) {
t.Helper()
cmd = exec.Command(os.Args[0], "-test.run="+t.Name())
stdout, stderr = bytes.NewBufferString(""), bytes.NewBufferString("")
cmd.Env = append(os.Environ(), fmt.Sprintf("%s=1", environVar))
cmd.Stdout = stdout
cmd.Stderr = stderr
return
}