1#!/bin/bash 2 3efivarfs_mount=/sys/firmware/efi/efivars 4test_guid=210be57c-9849-4fc7-a635-e6382d1aec27 5 6check_prereqs() 7{ 8 local msg="skip all tests:" 9 10 if [ $UID != 0 ]; then 11 echo $msg must be run as root >&2 12 exit 0 13 fi 14 15 if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then 16 echo $msg efivarfs is not mounted on $efivarfs_mount >&2 17 exit 0 18 fi 19} 20 21run_test() 22{ 23 local test="$1" 24 25 echo "--------------------" 26 echo "running $test" 27 echo "--------------------" 28 29 if [ "$(type -t $test)" = 'function' ]; then 30 ( $test ) 31 else 32 ( ./$test ) 33 fi 34 35 if [ $? -ne 0 ]; then 36 echo " [FAIL]" 37 rc=1 38 else 39 echo " [PASS]" 40 fi 41} 42 43test_create() 44{ 45 local attrs='\x07\x00\x00\x00' 46 local file=$efivarfs_mount/$FUNCNAME-$test_guid 47 48 printf "$attrs\x00" > $file 49 50 if [ ! -e $file ]; then 51 echo "$file couldn't be created" >&2 52 exit 1 53 fi 54 55 if [ $(stat -c %s $file) -ne 5 ]; then 56 echo "$file has invalid size" >&2 57 exit 1 58 fi 59} 60 61test_create_empty() 62{ 63 local file=$efivarfs_mount/$FUNCNAME-$test_guid 64 65 : > $file 66 67 if [ ! -e $file ]; then 68 echo "$file can not be created without writing" >&2 69 exit 1 70 fi 71} 72 73test_create_read() 74{ 75 local file=$efivarfs_mount/$FUNCNAME-$test_guid 76 ./create-read $file 77} 78 79test_delete() 80{ 81 local attrs='\x07\x00\x00\x00' 82 local file=$efivarfs_mount/$FUNCNAME-$test_guid 83 84 printf "$attrs\x00" > $file 85 86 if [ ! -e $file ]; then 87 echo "$file couldn't be created" >&2 88 exit 1 89 fi 90 91 rm $file 92 93 if [ -e $file ]; then 94 echo "$file couldn't be deleted" >&2 95 exit 1 96 fi 97 98} 99 100# test that we can remove a variable by issuing a write with only 101# attributes specified 102test_zero_size_delete() 103{ 104 local attrs='\x07\x00\x00\x00' 105 local file=$efivarfs_mount/$FUNCNAME-$test_guid 106 107 printf "$attrs\x00" > $file 108 109 if [ ! -e $file ]; then 110 echo "$file does not exist" >&2 111 exit 1 112 fi 113 114 printf "$attrs" > $file 115 116 if [ -e $file ]; then 117 echo "$file should have been deleted" >&2 118 exit 1 119 fi 120} 121 122test_open_unlink() 123{ 124 local file=$efivarfs_mount/$FUNCNAME-$test_guid 125 ./open-unlink $file 126} 127 128# test that we can create a range of filenames 129test_valid_filenames() 130{ 131 local attrs='\x07\x00\x00\x00' 132 local ret=0 133 134 local file_list="abc dump-type0-11-1-1362436005 1234 -" 135 for f in $file_list; do 136 local file=$efivarfs_mount/$f-$test_guid 137 138 printf "$attrs\x00" > $file 139 140 if [ ! -e $file ]; then 141 echo "$file could not be created" >&2 142 ret=1 143 else 144 rm $file 145 fi 146 done 147 148 exit $ret 149} 150 151test_invalid_filenames() 152{ 153 local attrs='\x07\x00\x00\x00' 154 local ret=0 155 156 local file_list=" 157 -1234-1234-1234-123456789abc 158 foo 159 foo-bar 160 -foo- 161 foo-barbazba-foob-foob-foob-foobarbazfoo 162 foo------------------------------------- 163 -12345678-1234-1234-1234-123456789abc 164 a-12345678=1234-1234-1234-123456789abc 165 a-12345678-1234=1234-1234-123456789abc 166 a-12345678-1234-1234=1234-123456789abc 167 a-12345678-1234-1234-1234=123456789abc 168 1112345678-1234-1234-1234-123456789abc" 169 170 for f in $file_list; do 171 local file=$efivarfs_mount/$f 172 173 printf "$attrs\x00" 2>/dev/null > $file 174 175 if [ -e $file ]; then 176 echo "Creating $file should have failed" >&2 177 rm $file 178 ret=1 179 fi 180 done 181 182 exit $ret 183} 184 185check_prereqs 186 187rc=0 188 189run_test test_create 190run_test test_create_empty 191run_test test_create_read 192run_test test_delete 193run_test test_zero_size_delete 194run_test test_open_unlink 195run_test test_valid_filenames 196run_test test_invalid_filenames 197 198exit $rc 199