github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/pkg/efivarfs/fs_test.go (about) 1 // Copyright 2022 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package efivarfs 6 7 import ( 8 "os" 9 "path/filepath" 10 "testing" 11 12 "golang.org/x/sys/unix" 13 ) 14 15 func TestFSGoodFile(t *testing.T) { 16 d := t.TempDir() 17 f, err := os.Create(filepath.Join(d, "x")) 18 if err != nil { 19 t.Fatalf("os.Create(%s): %v != nil", filepath.Join(d, "x"), err) 20 } 21 i, err := getInodeFlags(f) 22 if err != nil { 23 t.Skipf("Cannot getInodeFlags: %v != nil", err) 24 } 25 26 if err := setInodeFlags(f, i); err != nil { 27 t.Fatalf("setInodeFlags: %v != nil", err) 28 } 29 30 if err := setInodeFlags(f, i|unix.STATX_ATTR_IMMUTABLE); err != nil { 31 t.Skipf("Skipping rest of test, unable to set immutable flag: %+v", err) 32 } 33 if _, err := makeMutable(f); err != nil { 34 t.Fatalf("makeMutable: %v != nil", err) 35 } 36 if i, err = getInodeFlags(f); err != nil { 37 t.Fatalf("Cannot getInodeFlags after makeMutable(): %v != nil", err) 38 } 39 if i&unix.STATX_ATTR_IMMUTABLE == unix.STATX_ATTR_IMMUTABLE { 40 t.Errorf("getInodeFlags shows file is still immutable after makeMutable()") 41 } 42 } 43 44 func TestFSBadFile(t *testing.T) { 45 f, err := os.Open("/dev/null") 46 if err != nil { 47 t.Fatalf("os.Open(/dev/null): %v != nil", err) 48 } 49 i, err := getInodeFlags(f) 50 if err == nil { 51 t.Fatalf("getInodeFlags: nil != an error") 52 } 53 54 if err := setInodeFlags(f, i); err == nil { 55 t.Fatalf("setInodeFlags: nil != an error") 56 } 57 58 if _, err := makeMutable(f); err == nil { 59 t.Fatalf("makeMutable: nil != some error") 60 } 61 }