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  }