blob: 62e20971231f501341aec9ac5d7b4d727c1aa8ec [file] [log] [blame]
// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build windows
package os_test
import (
"errors"
"os"
"path/filepath"
"testing"
)
// Verify that Root.Open rejects Windows reserved names.
func TestRootWindowsDeviceNames(t *testing.T) {
r, err := os.OpenRoot(t.TempDir())
if err != nil {
t.Fatal(err)
}
defer r.Close()
if f, err := r.Open("NUL"); err == nil {
t.Errorf(`r.Open("NUL") succeeded; want error"`)
f.Close()
}
}
// Verify that Root.Open is case-insensitive.
// (The wrong options to NtOpenFile could make operations case-sensitive,
// so this is worth checking.)
func TestRootWindowsCaseInsensitivity(t *testing.T) {
dir := t.TempDir()
if err := os.WriteFile(filepath.Join(dir, "file"), nil, 0666); err != nil {
t.Fatal(err)
}
r, err := os.OpenRoot(dir)
if err != nil {
t.Fatal(err)
}
defer r.Close()
f, err := r.Open("FILE")
if err != nil {
t.Fatal(err)
}
f.Close()
if err := r.Remove("FILE"); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(filepath.Join(dir, "file")); !errors.Is(err, os.ErrNotExist) {
t.Fatalf("os.Stat(file) after deletion: %v, want ErrNotFound", err)
}
}