github.com/evdatsion/aphelion-dpos-bft@v0.32.1/libs/autofile/autofile_test.go (about) 1 package autofile 2 3 import ( 4 "io/ioutil" 5 "os" 6 "syscall" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/require" 11 12 cmn "github.com/evdatsion/aphelion-dpos-bft/libs/common" 13 ) 14 15 func TestSIGHUP(t *testing.T) { 16 // First, create an AutoFile writing to a tempfile dir 17 file, err := ioutil.TempFile("", "sighup_test") 18 require.NoError(t, err) 19 err = file.Close() 20 require.NoError(t, err) 21 name := file.Name() 22 23 // Here is the actual AutoFile 24 af, err := OpenAutoFile(name) 25 require.NoError(t, err) 26 27 // Write to the file. 28 _, err = af.Write([]byte("Line 1\n")) 29 require.NoError(t, err) 30 _, err = af.Write([]byte("Line 2\n")) 31 require.NoError(t, err) 32 33 // Move the file over 34 err = os.Rename(name, name+"_old") 35 require.NoError(t, err) 36 37 // Send SIGHUP to self. 38 syscall.Kill(syscall.Getpid(), syscall.SIGHUP) 39 40 // Wait a bit... signals are not handled synchronously. 41 time.Sleep(time.Millisecond * 10) 42 43 // Write more to the file. 44 _, err = af.Write([]byte("Line 3\n")) 45 require.NoError(t, err) 46 _, err = af.Write([]byte("Line 4\n")) 47 require.NoError(t, err) 48 err = af.Close() 49 require.NoError(t, err) 50 51 // Both files should exist 52 if body := cmn.MustReadFile(name + "_old"); string(body) != "Line 1\nLine 2\n" { 53 t.Errorf("Unexpected body %s", body) 54 } 55 if body := cmn.MustReadFile(name); string(body) != "Line 3\nLine 4\n" { 56 t.Errorf("Unexpected body %s", body) 57 } 58 } 59 60 // // Manually modify file permissions, close, and reopen using autofile: 61 // // We expect the file permissions to be changed back to the intended perms. 62 // func TestOpenAutoFilePerms(t *testing.T) { 63 // file, err := ioutil.TempFile("", "permission_test") 64 // require.NoError(t, err) 65 // err = file.Close() 66 // require.NoError(t, err) 67 // name := file.Name() 68 69 // // open and change permissions 70 // af, err := OpenAutoFile(name) 71 // require.NoError(t, err) 72 // err = af.file.Chmod(0755) 73 // require.NoError(t, err) 74 // err = af.Close() 75 // require.NoError(t, err) 76 77 // // reopen and expect an ErrPermissionsChanged as Cause 78 // af, err = OpenAutoFile(name) 79 // require.Error(t, err) 80 // if e, ok := err.(*errors.ErrPermissionsChanged); ok { 81 // t.Logf("%v", e) 82 // } else { 83 // t.Errorf("unexpected error %v", e) 84 // } 85 // } 86 87 func TestAutoFileSize(t *testing.T) { 88 // First, create an AutoFile writing to a tempfile dir 89 f, err := ioutil.TempFile("", "sighup_test") 90 require.NoError(t, err) 91 err = f.Close() 92 require.NoError(t, err) 93 94 // Here is the actual AutoFile. 95 af, err := OpenAutoFile(f.Name()) 96 require.NoError(t, err) 97 98 // 1. Empty file 99 size, err := af.Size() 100 require.Zero(t, size) 101 require.NoError(t, err) 102 103 // 2. Not empty file 104 data := []byte("Maniac\n") 105 _, err = af.Write(data) 106 require.NoError(t, err) 107 size, err = af.Size() 108 require.EqualValues(t, len(data), size) 109 require.NoError(t, err) 110 111 // 3. Not existing file 112 err = af.Close() 113 require.NoError(t, err) 114 err = os.Remove(f.Name()) 115 require.NoError(t, err) 116 size, err = af.Size() 117 require.EqualValues(t, 0, size, "Expected a new file to be empty") 118 require.NoError(t, err) 119 120 // Cleanup 121 _ = os.Remove(f.Name()) 122 }