github.com/tendermint/tmlibs@v0.9.0/autofile/autofile_test.go (about) 1 package autofile 2 3 import ( 4 "os" 5 "sync/atomic" 6 "syscall" 7 "testing" 8 "time" 9 10 cmn "github.com/tendermint/tmlibs/common" 11 ) 12 13 func TestSIGHUP(t *testing.T) { 14 15 // First, create an AutoFile writing to a tempfile dir 16 file, name := cmn.Tempfile("sighup_test") 17 if err := file.Close(); err != nil { 18 t.Fatalf("Error creating tempfile: %v", err) 19 } 20 // Here is the actual AutoFile 21 af, err := OpenAutoFile(name) 22 if err != nil { 23 t.Fatalf("Error creating autofile: %v", err) 24 } 25 26 // Write to the file. 27 _, err = af.Write([]byte("Line 1\n")) 28 if err != nil { 29 t.Fatalf("Error writing to autofile: %v", err) 30 } 31 _, err = af.Write([]byte("Line 2\n")) 32 if err != nil { 33 t.Fatalf("Error writing to autofile: %v", err) 34 } 35 36 // Move the file over 37 err = os.Rename(name, name+"_old") 38 if err != nil { 39 t.Fatalf("Error moving autofile: %v", err) 40 } 41 42 // Send SIGHUP to self. 43 oldSighupCounter := atomic.LoadInt32(&sighupCounter) 44 syscall.Kill(syscall.Getpid(), syscall.SIGHUP) 45 46 // Wait a bit... signals are not handled synchronously. 47 for atomic.LoadInt32(&sighupCounter) == oldSighupCounter { 48 time.Sleep(time.Millisecond * 10) 49 } 50 51 // Write more to the file. 52 _, err = af.Write([]byte("Line 3\n")) 53 if err != nil { 54 t.Fatalf("Error writing to autofile: %v", err) 55 } 56 _, err = af.Write([]byte("Line 4\n")) 57 if err != nil { 58 t.Fatalf("Error writing to autofile: %v", err) 59 } 60 if err := af.Close(); err != nil { 61 t.Fatalf("Error closing autofile") 62 } 63 64 // Both files should exist 65 if body := cmn.MustReadFile(name + "_old"); string(body) != "Line 1\nLine 2\n" { 66 t.Errorf("Unexpected body %s", body) 67 } 68 if body := cmn.MustReadFile(name); string(body) != "Line 3\nLine 4\n" { 69 t.Errorf("Unexpected body %s", body) 70 } 71 }