feat: add portable directory safeguards
This commit is contained in:
@@ -81,6 +81,36 @@ func TestInstanceDataRemoverHonorsCanceledContext(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestInstanceDataPreparerCreatesAndVerifiesWritableDirectory(t *testing.T) {
|
||||
target := filepath.Join(t.TempDir(), "new-profile")
|
||||
if err := NewInstanceDataPreparer().PrepareInstanceDataDir(context.Background(), target); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
info, err := os.Stat(target)
|
||||
if err != nil || !info.IsDir() {
|
||||
t.Fatalf("prepared directory = %#v, error = %v", info, err)
|
||||
}
|
||||
probes, err := filepath.Glob(filepath.Join(target, ".chub-write-*"))
|
||||
if err != nil || len(probes) != 0 {
|
||||
t.Fatalf("write probes = %#v, error = %v", probes, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInstanceDataPreparerRejectsUnavailableDirectoryBeforeBrowserLaunch(t *testing.T) {
|
||||
target := filepath.Join(t.TempDir(), "profile")
|
||||
preparer := newInstanceDataPreparer(os.MkdirAll, os.Lstat, func(string, string) (*os.File, error) {
|
||||
return nil, errors.New("denied")
|
||||
}, os.Remove)
|
||||
if err := preparer.PrepareInstanceDataDir(context.Background(), target); !errors.Is(err, ErrInstanceDataDirectoryUnavailable) {
|
||||
t.Fatalf("unwritable directory error = %v", err)
|
||||
}
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
if err := NewInstanceDataPreparer().PrepareInstanceDataDir(ctx, filepath.Join(t.TempDir(), "canceled")); !errors.Is(err, context.Canceled) {
|
||||
t.Fatalf("canceled preparation error = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
type fakeFileInfo struct {
|
||||
mode os.FileMode
|
||||
sys any
|
||||
|
||||
Reference in New Issue
Block a user