Commit | Line | Data |
---|---|---|
455ce1c7 JK |
1 | #!/bin/bash |
2 | ||
3 | efivarfs_mount=/sys/firmware/efi/efivars | |
4 | test_guid=210be57c-9849-4fc7-a635-e6382d1aec27 | |
5 | ||
6 | check_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 | ||
21 | run_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 | ||
43 | test_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 | ||
033a1a7f JK |
61 | test_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 | ||
d974f67a JK |
73 | test_create_read() |
74 | { | |
75 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
76 | ./create-read $file | |
77 | } | |
78 | ||
455ce1c7 JK |
79 | test_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 | |
102 | test_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 | ||
122 | test_open_unlink() | |
123 | { | |
124 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
125 | ./open-unlink $file | |
126 | } | |
127 | ||
123abd76 MF |
128 | # test that we can create a range of filenames |
129 | test_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 | ||
151 | test_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 | ||
455ce1c7 JK |
185 | check_prereqs |
186 | ||
187 | rc=0 | |
188 | ||
189 | run_test test_create | |
033a1a7f | 190 | run_test test_create_empty |
d974f67a | 191 | run_test test_create_read |
455ce1c7 JK |
192 | run_test test_delete |
193 | run_test test_zero_size_delete | |
194 | run_test test_open_unlink | |
123abd76 MF |
195 | run_test test_valid_filenames |
196 | run_test test_invalid_filenames | |
455ce1c7 JK |
197 | |
198 | exit $rc |