blob: df2b2fd2945d73ca997182766a31db2a5321b4fe [file] [log] [blame]
Gabriel Dalimonte4b93d6e2025-02-17 13:26:44 -05001# SPDX-License-Identifier: GPL-2.0+
2# Copyright 2025 Gabriel Dalimonte <gabriel.dalimonte@gmail.com>
3#
4# U-Boot File System:rename Test
5
6
7import pytest
8
9from fstest_defs import *
10from fstest_helpers import assert_fs_integrity
11
12@pytest.mark.boardspec('sandbox')
13@pytest.mark.slow
14class TestRename(object):
15 def test_rename1(self, u_boot_console, fs_obj_rename):
16 """
17 Test Case 1 - rename a file (successful mv)
18 """
19 fs_type, fs_img, md5val = fs_obj_rename
20 with u_boot_console.log.section('Test Case 1 - rename a file'):
21 d = 'test1'
22 src = '%s/file1' % d
23 dst = '%s/file2' % d
24 output = u_boot_console.run_command_list([
25 'host bind 0 %s' % fs_img,
26 'setenv filesize',
27 'mv host 0:0 %s %s' % (src, dst),
28 ])
29 assert('' == ''.join(output))
30
31 output = u_boot_console.run_command_list([
32 'load host 0:0 %x /%s' % (ADDR, dst),
33 'printenv filesize'])
34 assert('filesize=400' in output)
35
36 output = u_boot_console.run_command_list([
37 'ls host 0:0 %s' % (d),
38 ])
39 assert('file1' not in ''.join(output))
40
41 output = u_boot_console.run_command_list([
42 'md5sum %x $filesize' % ADDR,
43 'setenv filesize'])
44 assert(md5val['test1'] in ''.join(output))
45 assert_fs_integrity(fs_type, fs_img)
46
47 def test_rename2(self, u_boot_console, fs_obj_rename):
48 """
49 Test Case 2 - rename a file to an existing file (successful mv)
50 """
51 fs_type, fs_img, md5val = fs_obj_rename
52 with u_boot_console.log.section('Test Case 2 - rename a file to an existing file'):
53 d = 'test2'
54 src = '%s/file1' % d
55 dst = '%s/file_exist' % d
56 output = u_boot_console.run_command_list([
57 'host bind 0 %s' % fs_img,
58 'setenv filesize',
59 'mv host 0:0 %s %s' % (src, dst),
60 ])
61 assert('' == ''.join(output))
62
63 output = u_boot_console.run_command_list([
64 'load host 0:0 %x /%s' % (ADDR, dst),
65 'printenv filesize'])
66 assert('filesize=400' in output)
67
68 output = u_boot_console.run_command_list([
69 'ls host 0:0 %s' % (d),
70 ])
71 assert('file1' not in ''.join(output))
72
73 output = u_boot_console.run_command_list([
74 'md5sum %x $filesize' % ADDR,
75 'setenv filesize'])
76 assert(md5val['test2'] in ''.join(output))
77 assert_fs_integrity(fs_type, fs_img)
78
79 def test_rename3(self, u_boot_console, fs_obj_rename):
80 """
81 Test Case 3 - rename a directory (successful mv)
82 """
83 fs_type, fs_img, md5val = fs_obj_rename
84 with u_boot_console.log.section('Test Case 3 - rename a directory'):
85 d = 'test3'
86 src = '%s/dir1' % d
87 dst = '%s/dir2' % d
88 output = u_boot_console.run_command_list([
89 'host bind 0 %s' % fs_img,
90 'setenv filesize',
91 'mv host 0:0 %s %s' % (src, dst),
92 ])
93 assert('' == ''.join(output))
94
95 output = u_boot_console.run_command_list([
96 'load host 0:0 %x /%s/file1' % (ADDR, dst),
97 'printenv filesize'])
98 assert('filesize=400' in output)
99
100 output = u_boot_console.run_command_list([
101 'ls host 0:0 %s' % (d),
102 ])
103 assert('dir1' not in ''.join(output))
104
105 output = u_boot_console.run_command_list([
106 'md5sum %x $filesize' % ADDR,
107 'setenv filesize'])
108 assert(md5val['test3'] in ''.join(output))
109 assert_fs_integrity(fs_type, fs_img)
110
111 def test_rename4(self, u_boot_console, fs_obj_rename):
112 """
113 Test Case 4 - rename a directory to an existing directory (successful
114 mv)
115 """
116 fs_type, fs_img, md5val = fs_obj_rename
117 with u_boot_console.log.section('Test Case 4 - rename a directory to an existing directory'):
118 d = 'test4'
119 src = '%s/dir1' % d
120 dst = '%s/dir2' % d
121 output = u_boot_console.run_command_list([
122 'host bind 0 %s' % fs_img,
123 'setenv filesize',
124 'mv host 0:0 %s %s' % (src, dst),
125 ])
126 assert('' == ''.join(output))
127
128 output = u_boot_console.run_command_list([
129 'load host 0:0 %x /%s/dir1/file1' % (ADDR, dst),
130 'printenv filesize'])
131 assert('filesize=400' in output)
132
133 output = u_boot_console.run_command_list([
134 'ls host 0:0 %s' % (d),
135 ])
136 assert('dir1' not in ''.join(output))
137
138 output = u_boot_console.run_command_list([
139 'md5sum %x $filesize' % ADDR,
140 'setenv filesize'])
141 assert(md5val['test4'] in ''.join(output))
142 assert_fs_integrity(fs_type, fs_img)
143
144 def test_rename5(self, u_boot_console, fs_obj_rename):
145 """
146 Test Case 5 - rename a directory to an existing file (failed mv)
147 """
148 fs_type, fs_img, md5val = fs_obj_rename
149 with u_boot_console.log.section('Test Case 5 - rename a directory to an existing file'):
150 d = 'test5'
151 src = '%s/dir1' % d
152 dst = '%s/file2' % d
153 output = u_boot_console.run_command_list([
154 'host bind 0 %s' % fs_img,
155 'setenv filesize',
156 'mv host 0:0 %s %s' % (src, dst),
157 ])
158 assert('' == ''.join(output))
159
160 output = u_boot_console.run_command_list([
161 'ls host 0:0 %s' % (d),
162 ])
163 assert('dir1' in ''.join(output))
164 assert('file2' in ''.join(output))
165
166 output = u_boot_console.run_command_list([
167 'load host 0:0 %x /%s' % (ADDR, dst),
168 'printenv filesize'])
169 assert('filesize=400' in output)
170
171 output = u_boot_console.run_command_list([
172 'md5sum %x $filesize' % ADDR,
173 'setenv filesize'])
174 assert(md5val['test5'] in ''.join(output))
175 assert_fs_integrity(fs_type, fs_img)
176
177 def test_rename6(self, u_boot_console, fs_obj_rename):
178 """
179 Test Case 6 - rename a file to an existing empty directory (failed mv)
180 """
181 fs_type, fs_img, md5val = fs_obj_rename
182 with u_boot_console.log.section('Test Case 6 - rename a file to an existing empty directory'):
183 d = 'test6'
184 src = '%s/existing' % d
185 dst = '%s/dir2' % d
186 output = u_boot_console.run_command_list([
187 'host bind 0 %s' % fs_img,
188 'setenv filesize',
189 'mv host 0:0 %s %s' % (src, dst),
190 ])
191 assert('' == ''.join(output))
192
193 output = u_boot_console.run_command_list([
194 'load host 0:0 %x /%s' % (ADDR, src),
195 'printenv filesize'])
196 assert('filesize=400' in output)
197
198 output = u_boot_console.run_command_list([
199 'ls host 0:0 %s' % (d),
200 ])
201 assert('dir2' in ''.join(output))
202 assert('existing' in ''.join(output))
203
204 output = u_boot_console.run_command_list([
205 'md5sum %x $filesize' % ADDR,
206 'setenv filesize'])
207 assert(md5val['test6'] in ''.join(output))
208 assert_fs_integrity(fs_type, fs_img)
209
210 def test_rename7(self, u_boot_console, fs_obj_rename):
211 """
212 Test Case 7 - rename a directory to a non-empty directory (failed mv)
213 """
214 fs_type, fs_img, md5val = fs_obj_rename
215 with u_boot_console.log.section('Test Case 7 - rename a directory to a non-empty directory'):
216 d = 'test7'
217 src = '%s/dir1' % d
218 dst = '%s/dir2' % d
219 output = u_boot_console.run_command_list([
220 'host bind 0 %s' % fs_img,
221 'setenv filesize',
222 'mv host 0:0 %s %s' % (src, dst),
223 ])
224 assert('' == ''.join(output))
225
226 output = u_boot_console.run_command_list([
227 'load host 0:0 %x /%s/dir1/file1' % (ADDR, dst),
228 'printenv filesize'])
229 assert('filesize=400' in output)
230
231 output = u_boot_console.run_command_list([
232 'ls host 0:0 %s' % (d),
233 ])
234 assert('dir1' in ''.join(output))
235 assert('dir2' in ''.join(output))
236
237 output = u_boot_console.run_command_list([
238 'md5sum %x $filesize' % ADDR,
239 'setenv filesize'])
240 assert(md5val['test7'] in ''.join(output))
241 assert_fs_integrity(fs_type, fs_img)
242
243 def test_rename8(self, u_boot_console, fs_obj_rename):
244 """
245 Test Case 8 - rename a directory inside itself (failed mv)
246 """
247 fs_type, fs_img, md5val = fs_obj_rename
248 with u_boot_console.log.section('Test Case 8 - rename a directory inside itself'):
249 d = 'test8'
250 src = '%s/dir1' % d
251 dst = '%s/dir1/dir1' % d
252 output = u_boot_console.run_command_list([
253 'host bind 0 %s' % fs_img,
254 'setenv filesize',
255 'mv host 0:0 %s %s' % (src, dst),
256 ])
257 assert('' == ''.join(output))
258
259 output = u_boot_console.run_command_list([
260 'load host 0:0 %x /%s/file1' % (ADDR, src),
261 'printenv filesize'])
262 assert('filesize=400' in output)
263
264 output = u_boot_console.run_command_list([
265 'ls host 0:0 %s' % (d),
266 ])
267 assert('dir1' in ''.join(output))
268
269 output = u_boot_console.run_command_list([
270 'ls host 0:0 %s' % (src),
271 ])
272 assert('file1' in ''.join(output))
273 assert('dir1' not in ''.join(output))
274
275 output = u_boot_console.run_command_list([
276 'md5sum %x $filesize' % ADDR,
277 'setenv filesize'])
278 assert(md5val['test8'] in ''.join(output))
279 assert_fs_integrity(fs_type, fs_img)
280
281 def test_rename9(self, u_boot_console, fs_obj_rename):
282 """
283 Test Case 9 - rename a directory inside itself with backtracks (failed
284 mv)
285 """
286 fs_type, fs_img, md5val = fs_obj_rename
287 with u_boot_console.log.section('Test Case 9 - rename a directory inside itself with backtracks'):
288 d = 'test9'
289 src = '%s/dir1/nested' % d
290 dst = '%s/dir1/nested/inner/./../../../dir1/nested/inner/another' % d
291 output = u_boot_console.run_command_list([
292 'host bind 0 %s' % fs_img,
293 'setenv filesize',
294 'mv host 0:0 %s %s' % (src, dst),
295 ])
296 assert('' == ''.join(output))
297
298 output = u_boot_console.run_command_list([
299 'ls host 0:0 %s/dir1' % (d),
300 ])
301 assert('nested' in ''.join(output))
302
303 output = u_boot_console.run_command_list([
304 'ls host 0:0 %s' % (src),
305 ])
306 assert('inner' in ''.join(output))
307 assert('nested' not in ''.join(output))
308 assert_fs_integrity(fs_type, fs_img)
309
310 def test_rename10(self, u_boot_console, fs_obj_rename):
311 """
312 Test Case 10 - rename a file to itself (successful mv)
313 """
314 fs_type, fs_img, md5val = fs_obj_rename
315 with u_boot_console.log.section('Test Case 10 - rename a file to itself'):
316 d = 'test10'
317 src = '%s/file1' % d
318 output = u_boot_console.run_command_list([
319 'host bind 0 %s' % fs_img,
320 'setenv filesize',
321 'mv host 0:0 %s %s' % (src, src),
322 ])
323 assert('' == ''.join(output))
324
325 output = u_boot_console.run_command_list([
326 'load host 0:0 %x /%s' % (ADDR, src),
327 'printenv filesize'])
328 assert('filesize=400' in output)
329
330 output = u_boot_console.run_command_list([
331 'ls host 0:0 %s' % (d),
332 ])
333 assert('file1' in ''.join(output))
334
335 output = u_boot_console.run_command_list([
336 'md5sum %x $filesize' % ADDR,
337 'setenv filesize'])
338 assert(md5val['test10'] in ''.join(output))
339 assert_fs_integrity(fs_type, fs_img)
340
341 def test_rename11(self, u_boot_console, fs_obj_rename):
342 """
343 Test Case 11 - rename a directory to itself (successful mv)
344 """
345 fs_type, fs_img, md5val = fs_obj_rename
346 with u_boot_console.log.section('Test Case 11 - rename a directory to itself'):
347 # / at the end here is intentional. Ensures trailing / doesn't
348 # affect mv producing an updated dst path for fs_rename
349 d = 'test11/'
350 src = '%sdir1' % d
351 output = u_boot_console.run_command_list([
352 'host bind 0 %s' % fs_img,
353 'setenv filesize',
354 'mv host 0:0 %s %s' % (src, d),
355 ])
356 assert('' == ''.join(output))
357
358 output = u_boot_console.run_command_list([
359 'load host 0:0 %x /%s/file1' % (ADDR, src),
360 'printenv filesize'])
361 assert('filesize=400' in output)
362
363 output = u_boot_console.run_command_list([
364 'ls host 0:0 %s' % (d),
365 ])
366 assert('dir1' in ''.join(output))
367
368 output = u_boot_console.run_command_list([
369 'md5sum %x $filesize' % ADDR,
370 'setenv filesize'])
371 assert(md5val['test11'] in ''.join(output))
372 assert_fs_integrity(fs_type, fs_img)