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 73d974f67aSJeremy Kerrtest_create_read() 74d974f67aSJeremy Kerr{ 75d974f67aSJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 76d974f67aSJeremy Kerr ./create-read $file 77d974f67aSJeremy Kerr} 78d974f67aSJeremy Kerr 79455ce1c7SJeremy Kerrtest_delete() 80455ce1c7SJeremy Kerr{ 81455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 82455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 83455ce1c7SJeremy Kerr 84455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 85455ce1c7SJeremy Kerr 86455ce1c7SJeremy Kerr if [ ! -e $file ]; then 87455ce1c7SJeremy Kerr echo "$file couldn't be created" >&2 88455ce1c7SJeremy Kerr exit 1 89455ce1c7SJeremy Kerr fi 90455ce1c7SJeremy Kerr 91455ce1c7SJeremy Kerr rm $file 92455ce1c7SJeremy Kerr 93455ce1c7SJeremy Kerr if [ -e $file ]; then 94455ce1c7SJeremy Kerr echo "$file couldn't be deleted" >&2 95455ce1c7SJeremy Kerr exit 1 96455ce1c7SJeremy Kerr fi 97455ce1c7SJeremy Kerr 98455ce1c7SJeremy Kerr} 99455ce1c7SJeremy Kerr 100455ce1c7SJeremy Kerr# test that we can remove a variable by issuing a write with only 101455ce1c7SJeremy Kerr# attributes specified 102455ce1c7SJeremy Kerrtest_zero_size_delete() 103455ce1c7SJeremy Kerr{ 104455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 105455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 106455ce1c7SJeremy Kerr 107455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 108455ce1c7SJeremy Kerr 109455ce1c7SJeremy Kerr if [ ! -e $file ]; then 110455ce1c7SJeremy Kerr echo "$file does not exist" >&2 111455ce1c7SJeremy Kerr exit 1 112455ce1c7SJeremy Kerr fi 113455ce1c7SJeremy Kerr 114455ce1c7SJeremy Kerr printf "$attrs" > $file 115455ce1c7SJeremy Kerr 116455ce1c7SJeremy Kerr if [ -e $file ]; then 117455ce1c7SJeremy Kerr echo "$file should have been deleted" >&2 118455ce1c7SJeremy Kerr exit 1 119455ce1c7SJeremy Kerr fi 120455ce1c7SJeremy Kerr} 121455ce1c7SJeremy Kerr 122455ce1c7SJeremy Kerrtest_open_unlink() 123455ce1c7SJeremy Kerr{ 124455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 125455ce1c7SJeremy Kerr ./open-unlink $file 126455ce1c7SJeremy Kerr} 127455ce1c7SJeremy Kerr 128455ce1c7SJeremy Kerrcheck_prereqs 129455ce1c7SJeremy Kerr 130455ce1c7SJeremy Kerrrc=0 131455ce1c7SJeremy Kerr 132455ce1c7SJeremy Kerrrun_test test_create 133033a1a7fSJeremy Kerrrun_test test_create_empty 134d974f67aSJeremy Kerrrun_test test_create_read 135455ce1c7SJeremy Kerrrun_test test_delete 136455ce1c7SJeremy Kerrrun_test test_zero_size_delete 137455ce1c7SJeremy Kerrrun_test test_open_unlink 138455ce1c7SJeremy Kerr 139455ce1c7SJeremy Kerrexit $rc 140