42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package fileio
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestSafePathRejectsUnsafeNames(t *testing.T) {
|
|
for _, name := range []string{"/tmp/x", "a/../x", "a//x", `a\\x`} {
|
|
if _, err := SafePath(t.TempDir(), name); err == nil {
|
|
t.Fatalf("SafePath(%q) accepted unsafe path", name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestWriteBytesIsAtomicAndUsesRequestedModes(t *testing.T) {
|
|
root := t.TempDir()
|
|
if err := WriteBytes(root, "nested/value", []byte("value"), 0o700, 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for path, want := range map[string]os.FileMode{filepath.Join(root, "nested"): 0o700, filepath.Join(root, "nested", "value"): 0o600} {
|
|
info, err := os.Stat(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if info.Mode().Perm() != want {
|
|
t.Fatalf("%s mode=%#o want %#o", path, info.Mode().Perm(), want)
|
|
}
|
|
}
|
|
entries, err := os.ReadDir(filepath.Join(root, "nested"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, entry := range entries {
|
|
if strings.Contains(entry.Name(), ".tmp-") {
|
|
t.Fatalf("temporary file remains: %s", entry.Name())
|
|
}
|
|
}
|
|
}
|