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 91ed8b0de5SPeter Jones rm $file 2>/dev/null 92ed8b0de5SPeter Jones if [ $? -ne 0 ]; then 93ed8b0de5SPeter Jones chattr -i $file 94455ce1c7SJeremy Kerr rm $file 95ed8b0de5SPeter Jones fi 96455ce1c7SJeremy Kerr 97455ce1c7SJeremy Kerr if [ -e $file ]; then 98455ce1c7SJeremy Kerr echo "$file couldn't be deleted" >&2 99455ce1c7SJeremy Kerr exit 1 100455ce1c7SJeremy Kerr fi 101455ce1c7SJeremy Kerr 102455ce1c7SJeremy Kerr} 103455ce1c7SJeremy Kerr 104455ce1c7SJeremy Kerr# test that we can remove a variable by issuing a write with only 105455ce1c7SJeremy Kerr# attributes specified 106455ce1c7SJeremy Kerrtest_zero_size_delete() 107455ce1c7SJeremy Kerr{ 108455ce1c7SJeremy Kerr local attrs='\x07\x00\x00\x00' 109455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 110455ce1c7SJeremy Kerr 111455ce1c7SJeremy Kerr printf "$attrs\x00" > $file 112455ce1c7SJeremy Kerr 113455ce1c7SJeremy Kerr if [ ! -e $file ]; then 114455ce1c7SJeremy Kerr echo "$file does not exist" >&2 115455ce1c7SJeremy Kerr exit 1 116455ce1c7SJeremy Kerr fi 117455ce1c7SJeremy Kerr 118ed8b0de5SPeter Jones chattr -i $file 119455ce1c7SJeremy Kerr printf "$attrs" > $file 120455ce1c7SJeremy Kerr 121455ce1c7SJeremy Kerr if [ -e $file ]; then 122455ce1c7SJeremy Kerr echo "$file should have been deleted" >&2 123455ce1c7SJeremy Kerr exit 1 124455ce1c7SJeremy Kerr fi 125455ce1c7SJeremy Kerr} 126455ce1c7SJeremy Kerr 127455ce1c7SJeremy Kerrtest_open_unlink() 128455ce1c7SJeremy Kerr{ 129455ce1c7SJeremy Kerr local file=$efivarfs_mount/$FUNCNAME-$test_guid 130455ce1c7SJeremy Kerr ./open-unlink $file 131455ce1c7SJeremy Kerr} 132455ce1c7SJeremy Kerr 133123abd76SMatt Fleming# test that we can create a range of filenames 134123abd76SMatt Flemingtest_valid_filenames() 135123abd76SMatt Fleming{ 136123abd76SMatt Fleming local attrs='\x07\x00\x00\x00' 137123abd76SMatt Fleming local ret=0 138123abd76SMatt Fleming 139123abd76SMatt Fleming local file_list="abc dump-type0-11-1-1362436005 1234 -" 140123abd76SMatt Fleming for f in $file_list; do 141123abd76SMatt Fleming local file=$efivarfs_mount/$f-$test_guid 142123abd76SMatt Fleming 143123abd76SMatt Fleming printf "$attrs\x00" > $file 144123abd76SMatt Fleming 145123abd76SMatt Fleming if [ ! -e $file ]; then 146123abd76SMatt Fleming echo "$file could not be created" >&2 147123abd76SMatt Fleming ret=1 148123abd76SMatt Fleming else 149ed8b0de5SPeter Jones rm $file 2>/dev/null 150ed8b0de5SPeter Jones if [ $? -ne 0 ]; then 151ed8b0de5SPeter Jones chattr -i $file 152123abd76SMatt Fleming rm $file 153123abd76SMatt Fleming fi 154ed8b0de5SPeter Jones fi 155123abd76SMatt Fleming done 156123abd76SMatt Fleming 157123abd76SMatt Fleming exit $ret 158123abd76SMatt Fleming} 159123abd76SMatt Fleming 160123abd76SMatt Flemingtest_invalid_filenames() 161123abd76SMatt Fleming{ 162123abd76SMatt Fleming local attrs='\x07\x00\x00\x00' 163123abd76SMatt Fleming local ret=0 164123abd76SMatt Fleming 165123abd76SMatt Fleming local file_list=" 166123abd76SMatt Fleming -1234-1234-1234-123456789abc 167123abd76SMatt Fleming foo 168123abd76SMatt Fleming foo-bar 169123abd76SMatt Fleming -foo- 170123abd76SMatt Fleming foo-barbazba-foob-foob-foob-foobarbazfoo 171123abd76SMatt Fleming foo------------------------------------- 172123abd76SMatt Fleming -12345678-1234-1234-1234-123456789abc 173123abd76SMatt Fleming a-12345678=1234-1234-1234-123456789abc 174123abd76SMatt Fleming a-12345678-1234=1234-1234-123456789abc 175123abd76SMatt Fleming a-12345678-1234-1234=1234-123456789abc 176123abd76SMatt Fleming a-12345678-1234-1234-1234=123456789abc 177123abd76SMatt Fleming 1112345678-1234-1234-1234-123456789abc" 178123abd76SMatt Fleming 179123abd76SMatt Fleming for f in $file_list; do 180123abd76SMatt Fleming local file=$efivarfs_mount/$f 181123abd76SMatt Fleming 182123abd76SMatt Fleming printf "$attrs\x00" 2>/dev/null > $file 183123abd76SMatt Fleming 184123abd76SMatt Fleming if [ -e $file ]; then 185123abd76SMatt Fleming echo "Creating $file should have failed" >&2 186ed8b0de5SPeter Jones rm $file 2>/dev/null 187ed8b0de5SPeter Jones if [ $? -ne 0 ]; then 188ed8b0de5SPeter Jones chattr -i $file 189123abd76SMatt Fleming rm $file 190ed8b0de5SPeter Jones fi 191123abd76SMatt Fleming ret=1 192123abd76SMatt Fleming fi 193123abd76SMatt Fleming done 194123abd76SMatt Fleming 195123abd76SMatt Fleming exit $ret 196123abd76SMatt Fleming} 197123abd76SMatt Fleming 198455ce1c7SJeremy Kerrcheck_prereqs 199455ce1c7SJeremy Kerr 200455ce1c7SJeremy Kerrrc=0 201455ce1c7SJeremy Kerr 202455ce1c7SJeremy Kerrrun_test test_create 203033a1a7fSJeremy Kerrrun_test test_create_empty 204d974f67aSJeremy Kerrrun_test test_create_read 205455ce1c7SJeremy Kerrrun_test test_delete 206455ce1c7SJeremy Kerrrun_test test_zero_size_delete 207455ce1c7SJeremy Kerrrun_test test_open_unlink 208123abd76SMatt Flemingrun_test test_valid_filenames 209123abd76SMatt Flemingrun_test test_invalid_filenames 210455ce1c7SJeremy Kerr 211455ce1c7SJeremy Kerrexit $rc 212