Merge branch 'master' of git://git.denx.de/u-boot-spi
[platform/kernel/u-boot.git] / test / py / tests / test_fs / test_ext.py
1 # SPDX-License-Identifier:      GPL-2.0+
2 # Copyright (c) 2018, Linaro Limited
3 # Author: Takahiro Akashi <takahiro.akashi@linaro.org>
4 #
5 # U-Boot File System:Exntented Test
6
7 """
8 This test verifies extended write operation on file system.
9 """
10
11 import pytest
12 import re
13 from fstest_defs import *
14
15 @pytest.mark.boardspec('sandbox')
16 @pytest.mark.slow
17 class TestFsExt(object):
18     def test_fs_ext1(self, u_boot_console, fs_obj_ext):
19         """
20         Test Case 1 - write a file with absolute path
21         """
22         fs_type,fs_img,md5val = fs_obj_ext
23         with u_boot_console.log.section('Test Case 1 - write with abs path'):
24             # Test Case 1a - Check if command successfully returned
25             output = u_boot_console.run_command_list([
26                 'host bind 0 %s' % fs_img,
27                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
28                 '%swrite host 0:0 %x /dir1/%s.w1 $filesize'
29                     % (fs_type, ADDR, MIN_FILE)])
30             assert('20480 bytes written' in ''.join(output))
31
32             # Test Case 1b - Check md5 of file content
33             output = u_boot_console.run_command_list([
34                 'mw.b %x 00 100' % ADDR,
35                 '%sload host 0:0 %x /dir1/%s.w1' % (fs_type, ADDR, MIN_FILE),
36                 'md5sum %x $filesize' % ADDR,
37                 'setenv filesize'])
38             assert(md5val[0] in ''.join(output))
39
40     def test_fs_ext2(self, u_boot_console, fs_obj_ext):
41         """
42         Test Case 2 - write to a file with relative path
43         """
44         fs_type,fs_img,md5val = fs_obj_ext
45         with u_boot_console.log.section('Test Case 2 - write with rel path'):
46             # Test Case 2a - Check if command successfully returned
47             output = u_boot_console.run_command_list([
48                 'host bind 0 %s' % fs_img,
49                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
50                 '%swrite host 0:0 %x dir1/%s.w2 $filesize'
51                     % (fs_type, ADDR, MIN_FILE)])
52             assert('20480 bytes written' in ''.join(output))
53
54             # Test Case 2b - Check md5 of file content
55             output = u_boot_console.run_command_list([
56                 'mw.b %x 00 100' % ADDR,
57                 '%sload host 0:0 %x dir1/%s.w2' % (fs_type, ADDR, MIN_FILE),
58                 'md5sum %x $filesize' % ADDR,
59                 'setenv filesize'])
60             assert(md5val[0] in ''.join(output))
61
62     def test_fs_ext3(self, u_boot_console, fs_obj_ext):
63         """
64         Test Case 3 - write to a file with invalid path
65         """
66         fs_type,fs_img,md5val = fs_obj_ext
67         with u_boot_console.log.section('Test Case 3 - write with invalid path'):
68             # Test Case 3 - Check if command expectedly failed
69             output = u_boot_console.run_command_list([
70                 'host bind 0 %s' % fs_img,
71                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
72                 '%swrite host 0:0 %x /dir1/none/%s.w3 $filesize'
73                     % (fs_type, ADDR, MIN_FILE)])
74             assert('Unable to write "/dir1/none/' in ''.join(output))
75
76     def test_fs_ext4(self, u_boot_console, fs_obj_ext):
77         """
78         Test Case 4 - write at non-zero offset, enlarging file size
79         """
80         fs_type,fs_img,md5val = fs_obj_ext
81         with u_boot_console.log.section('Test Case 4 - write at non-zero offset, enlarging file size'):
82             # Test Case 4a - Check if command successfully returned
83             output = u_boot_console.run_command_list([
84                 'host bind 0 %s' % fs_img,
85                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
86                 '%swrite host 0:0 %x /dir1/%s.w4 $filesize'
87                     % (fs_type, ADDR, MIN_FILE)])
88             output = u_boot_console.run_command(
89                 '%swrite host 0:0 %x /dir1/%s.w4 $filesize 0x1400'
90                     % (fs_type, ADDR, MIN_FILE))
91             assert('20480 bytes written' in output)
92
93             # Test Case 4b - Check size of written file
94             output = u_boot_console.run_command_list([
95                 '%ssize host 0:0 /dir1/%s.w4' % (fs_type, MIN_FILE),
96                 'printenv filesize',
97                 'setenv filesize'])
98             assert('filesize=6400' in ''.join(output))
99
100             # Test Case 4c - Check md5 of file content
101             output = u_boot_console.run_command_list([
102                 'mw.b %x 00 100' % ADDR,
103                 '%sload host 0:0 %x /dir1/%s.w4' % (fs_type, ADDR, MIN_FILE),
104                 'md5sum %x $filesize' % ADDR,
105                 'setenv filesize'])
106             assert(md5val[1] in ''.join(output))
107
108     def test_fs_ext5(self, u_boot_console, fs_obj_ext):
109         """
110         Test Case 5 - write at non-zero offset, shrinking file size
111         """
112         fs_type,fs_img,md5val = fs_obj_ext
113         with u_boot_console.log.section('Test Case 5 - write at non-zero offset, shrinking file size'):
114             # Test Case 5a - Check if command successfully returned
115             output = u_boot_console.run_command_list([
116                 'host bind 0 %s' % fs_img,
117                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
118                 '%swrite host 0:0 %x /dir1/%s.w5 $filesize'
119                     % (fs_type, ADDR, MIN_FILE)])
120             output = u_boot_console.run_command(
121                 '%swrite host 0:0 %x /dir1/%s.w5 0x1400 0x1400'
122                     % (fs_type, ADDR, MIN_FILE))
123             assert('5120 bytes written' in output)
124
125             # Test Case 5b - Check size of written file
126             output = u_boot_console.run_command_list([
127                 '%ssize host 0:0 /dir1/%s.w5' % (fs_type, MIN_FILE),
128                 'printenv filesize',
129                 'setenv filesize'])
130             assert('filesize=2800' in ''.join(output))
131
132             # Test Case 5c - Check md5 of file content
133             output = u_boot_console.run_command_list([
134                 'mw.b %x 00 100' % ADDR,
135                 '%sload host 0:0 %x /dir1/%s.w5' % (fs_type, ADDR, MIN_FILE),
136                 'md5sum %x $filesize' % ADDR,
137                 'setenv filesize'])
138             assert(md5val[2] in ''.join(output))
139
140     def test_fs_ext6(self, u_boot_console, fs_obj_ext):
141         """
142         Test Case 6 - write nothing at the start, truncating to zero
143         """
144         fs_type,fs_img,md5val = fs_obj_ext
145         with u_boot_console.log.section('Test Case 6 - write nothing at the start, truncating to zero'):
146             # Test Case 6a - Check if command successfully returned
147             output = u_boot_console.run_command_list([
148                 'host bind 0 %s' % fs_img,
149                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
150                 '%swrite host 0:0 %x /dir1/%s.w6 $filesize'
151                     % (fs_type, ADDR, MIN_FILE)])
152             output = u_boot_console.run_command(
153                 '%swrite host 0:0 %x /dir1/%s.w6 0 0'
154                     % (fs_type, ADDR, MIN_FILE))
155             assert('0 bytes written' in output)
156
157             # Test Case 6b - Check size of written file
158             output = u_boot_console.run_command_list([
159                 '%ssize host 0:0 /dir1/%s.w6' % (fs_type, MIN_FILE),
160                 'printenv filesize',
161                 'setenv filesize'])
162             assert('filesize=0' in ''.join(output))
163
164     def test_fs_ext7(self, u_boot_console, fs_obj_ext):
165         """
166         Test Case 7 - write at the end (append)
167         """
168         fs_type,fs_img,md5val = fs_obj_ext
169         with u_boot_console.log.section('Test Case 7 - write at the end (append)'):
170             # Test Case 7a - Check if command successfully returned
171             output = u_boot_console.run_command_list([
172                 'host bind 0 %s' % fs_img,
173                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
174                 '%swrite host 0:0 %x /dir1/%s.w7 $filesize'
175                     % (fs_type, ADDR, MIN_FILE)])
176             output = u_boot_console.run_command(
177                 '%swrite host 0:0 %x /dir1/%s.w7 $filesize $filesize'
178                     % (fs_type, ADDR, MIN_FILE))
179             assert('20480 bytes written' in output)
180
181             # Test Case 7b - Check size of written file
182             output = u_boot_console.run_command_list([
183                 '%ssize host 0:0 /dir1/%s.w7' % (fs_type, MIN_FILE),
184                 'printenv filesize',
185                 'setenv filesize'])
186             assert('filesize=a000' in ''.join(output))
187
188             # Test Case 7c - Check md5 of file content
189             output = u_boot_console.run_command_list([
190                 'mw.b %x 00 100' % ADDR,
191                 '%sload host 0:0 %x /dir1/%s.w7' % (fs_type, ADDR, MIN_FILE),
192                 'md5sum %x $filesize' % ADDR,
193                 'setenv filesize'])
194             assert(md5val[3] in ''.join(output))
195
196     def test_fs_ext8(self, u_boot_console, fs_obj_ext):
197         """
198         Test Case 8 - write at offset beyond the end of file
199         """
200         fs_type,fs_img,md5val = fs_obj_ext
201         with u_boot_console.log.section('Test Case 8 - write beyond the end'):
202             # Test Case 8a - Check if command expectedly failed
203             output = u_boot_console.run_command_list([
204                 'host bind 0 %s' % fs_img,
205                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
206                 '%swrite host 0:0 %x /dir1/%s.w8 $filesize'
207                     % (fs_type, ADDR, MIN_FILE)])
208             output = u_boot_console.run_command(
209                 '%swrite host 0:0 %x /dir1/%s.w8 0x1400 %x'
210                     % (fs_type, ADDR, MIN_FILE, 0x100000 + 0x1400))
211             assert('Unable to write "/dir1' in output)
212
213     def test_fs_ext9(self, u_boot_console, fs_obj_ext):
214         """
215         Test Case 9 - write to a non-existing file at non-zero offset
216         """
217         fs_type,fs_img,md5val = fs_obj_ext
218         with u_boot_console.log.section('Test Case 9 - write to non-existing file with non-zero offset'):
219             # Test Case 9a - Check if command expectedly failed
220             output = u_boot_console.run_command_list([
221                 'host bind 0 %s' % fs_img,
222                 '%sload host 0:0 %x /%s' % (fs_type, ADDR, MIN_FILE),
223                 '%swrite host 0:0 %x /dir1/%s.w9 0x1400 0x1400'
224                     % (fs_type, ADDR, MIN_FILE)])
225             assert('Unable to write "/dir1' in ''.join(output))