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 | ||
ed8b0de5 PJ |
91 | rm $file 2>/dev/null |
92 | if [ $? -ne 0 ]; then | |
93 | chattr -i $file | |
94 | rm $file | |
95 | fi | |
455ce1c7 JK |
96 | |
97 | if [ -e $file ]; then | |
98 | echo "$file couldn't be deleted" >&2 | |
99 | exit 1 | |
100 | fi | |
101 | ||
102 | } | |
103 | ||
104 | # test that we can remove a variable by issuing a write with only | |
105 | # attributes specified | |
106 | test_zero_size_delete() | |
107 | { | |
108 | local attrs='\x07\x00\x00\x00' | |
109 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
110 | ||
111 | printf "$attrs\x00" > $file | |
112 | ||
113 | if [ ! -e $file ]; then | |
114 | echo "$file does not exist" >&2 | |
115 | exit 1 | |
116 | fi | |
117 | ||
ed8b0de5 | 118 | chattr -i $file |
455ce1c7 JK |
119 | printf "$attrs" > $file |
120 | ||
121 | if [ -e $file ]; then | |
122 | echo "$file should have been deleted" >&2 | |
123 | exit 1 | |
124 | fi | |
125 | } | |
126 | ||
127 | test_open_unlink() | |
128 | { | |
129 | local file=$efivarfs_mount/$FUNCNAME-$test_guid | |
130 | ./open-unlink $file | |
131 | } | |
132 | ||
123abd76 MF |
133 | # test that we can create a range of filenames |
134 | test_valid_filenames() | |
135 | { | |
136 | local attrs='\x07\x00\x00\x00' | |
137 | local ret=0 | |
138 | ||
139 | local file_list="abc dump-type0-11-1-1362436005 1234 -" | |
140 | for f in $file_list; do | |
141 | local file=$efivarfs_mount/$f-$test_guid | |
142 | ||
143 | printf "$attrs\x00" > $file | |
144 | ||
145 | if [ ! -e $file ]; then | |
146 | echo "$file could not be created" >&2 | |
147 | ret=1 | |
148 | else | |
ed8b0de5 PJ |
149 | rm $file 2>/dev/null |
150 | if [ $? -ne 0 ]; then | |
151 | chattr -i $file | |
152 | rm $file | |
153 | fi | |
123abd76 MF |
154 | fi |
155 | done | |
156 | ||
157 | exit $ret | |
158 | } | |
159 | ||
160 | test_invalid_filenames() | |
161 | { | |
162 | local attrs='\x07\x00\x00\x00' | |
163 | local ret=0 | |
164 | ||
165 | local file_list=" | |
166 | -1234-1234-1234-123456789abc | |
167 | foo | |
168 | foo-bar | |
169 | -foo- | |
170 | foo-barbazba-foob-foob-foob-foobarbazfoo | |
171 | foo------------------------------------- | |
172 | -12345678-1234-1234-1234-123456789abc | |
173 | a-12345678=1234-1234-1234-123456789abc | |
174 | a-12345678-1234=1234-1234-123456789abc | |
175 | a-12345678-1234-1234=1234-123456789abc | |
176 | a-12345678-1234-1234-1234=123456789abc | |
177 | 1112345678-1234-1234-1234-123456789abc" | |
178 | ||
179 | for f in $file_list; do | |
180 | local file=$efivarfs_mount/$f | |
181 | ||
182 | printf "$attrs\x00" 2>/dev/null > $file | |
183 | ||
184 | if [ -e $file ]; then | |
185 | echo "Creating $file should have failed" >&2 | |
ed8b0de5 PJ |
186 | rm $file 2>/dev/null |
187 | if [ $? -ne 0 ]; then | |
188 | chattr -i $file | |
189 | rm $file | |
190 | fi | |
123abd76 MF |
191 | ret=1 |
192 | fi | |
193 | done | |
194 | ||
195 | exit $ret | |
196 | } | |
197 | ||
455ce1c7 JK |
198 | check_prereqs |
199 | ||
200 | rc=0 | |
201 | ||
202 | run_test test_create | |
033a1a7f | 203 | run_test test_create_empty |
d974f67a | 204 | run_test test_create_read |
455ce1c7 JK |
205 | run_test test_delete |
206 | run_test test_zero_size_delete | |
207 | run_test test_open_unlink | |
123abd76 MF |
208 | run_test test_valid_filenames |
209 | run_test test_invalid_filenames | |
455ce1c7 JK |
210 | |
211 | exit $rc |