diff --git a/integration_tests/helpers.go b/integration_tests/helpers.go index e5458c9..4adce97 100644 --- a/integration_tests/helpers.go +++ b/integration_tests/helpers.go @@ -1,6 +1,7 @@ package integration_tests import ( + "path/filepath" "crypto/md5" "encoding/hex" "fmt" @@ -176,3 +177,38 @@ func testRename(t *testing.T, plainDir string) { } syscall.Unlink(file2) } + +// verifyExistence - check in 3 ways that "path" exists: +// stat, open, readdir +func verifyExistence(path string) bool { + + // Check that file can be stated + _, err := os.Stat(path) + if err != nil { + //t.Log(err) + return false + } + + // Check that file can be opened + fd, err := os.Open(path) + if err != nil { + //t.Log(err) + return false + } + fd.Close() + + // Check that file shows up in directory listing + dir := filepath.Dir(path) + name := filepath.Base(path) + fi, err := ioutil.ReadDir(dir) + if err != nil { + //t.Log(err) + return false + } + for _, i := range(fi) { + if i.Name() == name { + return true + } + } + return false +} diff --git a/integration_tests/main_test.go b/integration_tests/main_test.go index 03b26f9..6ac03e1 100644 --- a/integration_tests/main_test.go +++ b/integration_tests/main_test.go @@ -3,6 +3,7 @@ package integration_tests // File reading, writing, modification, truncate import ( + "syscall" "bytes" "crypto/md5" "encoding/hex" @@ -350,3 +351,50 @@ func TestDirOverwrite(t *testing.T) { t.Fatal(err) } } + +func TestLongNames(t *testing.T) { + // Create + wd := defaultPlainDir + n255x := string(bytes.Repeat([]byte("x"), 255)) + f, err := os.Create(wd+n255x) + if err != nil { + t.Fatalf("Could not create n255x") + } + f.Close() + if !verifyExistence(wd+n255x) { + t.Errorf("n255x is not in directory listing") + } + // Rename long to long + n255y := string(bytes.Repeat([]byte("y"), 255)) + err = os.Rename(wd+n255x, wd+n255y) + if err != nil { + t.Fatalf("Could not rename n255x to n255y") + } + if !verifyExistence(wd+n255y) { + t.Errorf("n255y is not in directory listing") + } + // Rename long to short + err = os.Rename(wd+n255y, wd+"short") + if err != nil { + t.Fatalf("Could not rename n255y to short") + } + if !verifyExistence(wd+"short") { + t.Errorf("short is not in directory listing") + } + // Rename short to long + err = os.Rename(wd+"short", wd+n255x) + if err != nil { + t.Fatalf("Could not rename short to n255x") + } + if !verifyExistence(wd+n255x) { + t.Errorf("255x is not in directory listing II") + } + // Unlink + err = syscall.Unlink(wd+n255x) + if err != nil { + t.Fatalf("Could not unlink n255x") + } + if verifyExistence(wd+n255x) { + t.Errorf("n255x still there after unlink") + } +} diff --git a/internal/toggledlog/log.go b/internal/toggledlog/log.go index 4a2ad03..5e5191a 100644 --- a/internal/toggledlog/log.go +++ b/internal/toggledlog/log.go @@ -25,7 +25,7 @@ type toggledLogger struct { // Enable or disable output Enabled bool // Panic after logging a message, useful in regression tests - PanicAfter bool + Wpanic bool *log.Logger } @@ -34,8 +34,8 @@ func (l *toggledLogger) Printf(format string, v ...interface{}) { return } l.Logger.Printf(format, v...) - if l.PanicAfter { - panic("PanicAfter: " + fmt.Sprintf(format, v...)) + if l.Wpanic { + panic("-wpanic turns warning into panic: " + fmt.Sprintf(format, v...)) } } func (l *toggledLogger) Println(v ...interface{}) { @@ -43,8 +43,8 @@ func (l *toggledLogger) Println(v ...interface{}) { return } l.Logger.Println(v...) - if l.PanicAfter { - panic("PanicAfter: " + fmt.Sprintln(v...)) + if l.Wpanic { + panic("-wpanic turns warning into panic: " + fmt.Sprintln(v...)) } } diff --git a/main.go b/main.go index 2c1a26c..ef93440 100644 --- a/main.go +++ b/main.go @@ -192,7 +192,7 @@ func main() { toggledlog.Debug.Printf("Debug output enabled") } if args.wpanic { - toggledlog.Warn.PanicAfter = true + toggledlog.Warn.Wpanic = true toggledlog.Debug.Printf("Panicing on warnings") } // Every operation below requires CIPHERDIR. Check that we have it.