1455ce1c7SJeremy Kerr#!/bin/bash 2455ce1c7SJeremy Kerr 3455ce1c7SJeremy Kerrefivarfs_mount=/sys/firmware/efi/efivars 4455ce1c7SJeremy Kerrtest_guid=210be57c-9849-4fc7-a635-e6382d1aec27 5455ce1c7SJeremy Kerr 6455ce1c7SJeremy Kerrcheck_prereqs() 7455ce1c7SJeremy Kerr{ 8455ce1c7SJeremy Kerr local msg="skip all tests:" 9455ce1c7SJeremy Kerr 10455ce1c7SJeremy Kerr if [ $UID != 0 ]; then 11455ce1c7SJeremy Kerr echo $msg must be run as root >&2 12455ce1c7SJeremy Kerr exit 0 13455ce1c7SJeremy Kerr fi 14455ce1c7SJeremy Kerr 15455ce1c7SJeremy Kerr if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then 16455ce1c7SJeremy Kerr echo $msg efivarfs is not mounted on $efivarfs_mount >&2 17455ce1c7SJeremy Kerr exit 0 18455ce1c7SJeremy Kerr fi 19455ce1c7SJeremy Kerr} 20455ce1c7SJeremy Kerr 21455ce1c7SJeremy Kerrrun_test() 22455ce1c7SJeremy Kerr{ 23455ce1c7SJeremy Kerr local test="$1" 24455ce1c7SJeremy Kerr 25455ce1c7SJeremy Kerr echo "--------------------" 26455ce1c7SJeremy Kerr echo "running $test" 27455ce1c7SJeremy Kerr echo "--------------------" 28455ce1c7SJeremy Kerr 29455ce1c7SJeremy Kerr if [ "$(type -t $test)" = 'function' ]; then 30455ce1c7SJeremy Kerr ( $test ) 31455ce1c7SJeremy Kerr else 32455ce1c7SJeremy Kerr ( ./$test ) 33455ce1c7SJeremy Kerr fi 34455ce1c7SJeremy Kerr 35455ce1c7SJeremy Kerr if [ $? -ne 0 ]; then 36455ce1c7SJeremy Kerr echo " [FAIL]" 37455ce1c7SJeremy Kerr rc=1 38455ce1c7SJeremy Kerr else 39455ce1c7SJeremy Kerr echo " [PASS]" 40455ce1c7SJeremy Kerr fi 41455ce1c7SJeremy Kerr} 42455ce1c7SJeremy Kerr 43455ce1c7SJeremy Kerrtest_create() 44455ce1c7SJeremy Kerr{ 45455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 46455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 47455ce1c7SJeremy Kerr 48455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 49455ce1c7SJeremy Kerr 50455ce1c7SJeremy Kerr if [ ! -e $file ]; then 51455ce1c7SJeremy Kerr echo "$file couldn't be created" >&2 52455ce1c7SJeremy Kerr exit 1 53455ce1c7SJeremy Kerr fi 54455ce1c7SJeremy Kerr 55455ce1c7SJeremy Kerr if [ $(stat -c %s $file) -ne 5 ]; then 56455ce1c7SJeremy Kerr echo "$file has invalid size" >&2 57455ce1c7SJeremy Kerr exit 1 58455ce1c7SJeremy Kerr fi 59455ce1c7SJeremy Kerr} 60455ce1c7SJeremy Kerr 61033a1a7fSJeremy Kerrtest_create_empty() 62033a1a7fSJeremy Kerr{ 63033a1a7fSJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 64033a1a7fSJeremy Kerr 65033a1a7fSJeremy Kerr : > $file 66033a1a7fSJeremy Kerr 67033a1a7fSJeremy Kerr if [ ! -e $file ]; then 68033a1a7fSJeremy Kerr echo "$file can not be created without writing" >&2 69033a1a7fSJeremy Kerr exit 1 70033a1a7fSJeremy Kerr fi 71033a1a7fSJeremy Kerr} 72033a1a7fSJeremy Kerr 73455ce1c7SJeremy Kerrtest_delete() 74455ce1c7SJeremy Kerr{ 75455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 76455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 77455ce1c7SJeremy Kerr 78455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 79455ce1c7SJeremy Kerr 80455ce1c7SJeremy Kerr if [ ! -e $file ]; then 81455ce1c7SJeremy Kerr echo "$file couldn't be created" >&2 82455ce1c7SJeremy Kerr exit 1 83455ce1c7SJeremy Kerr fi 84455ce1c7SJeremy Kerr 85455ce1c7SJeremy Kerr rm $file 86455ce1c7SJeremy Kerr 87455ce1c7SJeremy Kerr if [ -e $file ]; then 88455ce1c7SJeremy Kerr echo "$file couldn't be deleted" >&2 89455ce1c7SJeremy Kerr exit 1 90455ce1c7SJeremy Kerr fi 91455ce1c7SJeremy Kerr 92455ce1c7SJeremy Kerr} 93455ce1c7SJeremy Kerr 94455ce1c7SJeremy Kerr# test that we can remove a variable by issuing a write with only 95455ce1c7SJeremy Kerr# attributes specified 96455ce1c7SJeremy Kerrtest_zero_size_delete() 97455ce1c7SJeremy Kerr{ 98455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 99455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 100455ce1c7SJeremy Kerr 101455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 102455ce1c7SJeremy Kerr 103455ce1c7SJeremy Kerr if [ ! -e $file ]; then 104455ce1c7SJeremy Kerr echo "$file does not exist" >&2 105455ce1c7SJeremy Kerr exit 1 106455ce1c7SJeremy Kerr fi 107455ce1c7SJeremy Kerr 108455ce1c7SJeremy Kerr printf "$attrs" > $file 109455ce1c7SJeremy Kerr 110455ce1c7SJeremy Kerr if [ -e $file ]; then 111455ce1c7SJeremy Kerr echo "$file should have been deleted" >&2 112455ce1c7SJeremy Kerr exit 1 113455ce1c7SJeremy Kerr fi 114455ce1c7SJeremy Kerr} 115455ce1c7SJeremy Kerr 116455ce1c7SJeremy Kerrtest_open_unlink() 117455ce1c7SJeremy Kerr{ 118455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 119455ce1c7SJeremy Kerr ./open-unlink $file 120455ce1c7SJeremy Kerr} 121455ce1c7SJeremy Kerr 122455ce1c7SJeremy Kerrcheck_prereqs 123455ce1c7SJeremy Kerr 124455ce1c7SJeremy Kerrrc=0 125455ce1c7SJeremy Kerr 126455ce1c7SJeremy Kerrrun_test test_create 127033a1a7fSJeremy Kerrrun_test test_create_empty 128455ce1c7SJeremy Kerrrun_test test_delete 129455ce1c7SJeremy Kerrrun_test test_zero_size_delete 130455ce1c7SJeremy Kerrrun_test test_open_unlink 131455ce1c7SJeremy Kerr 132455ce1c7SJeremy Kerrexit $rc 133