blob: 06cad5516d583a6a5da8d77da7d37f9b97360dfc [file] [log] [blame]
AKASHI Takahirodde5d3f2018-09-11 15:59:20 +09001# 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"""
8This test verifies extended write operation on file system.
9"""
10
11import pytest
12import re
13from fstest_defs import *
14
15@pytest.mark.boardspec('sandbox')
Simon Glass3fcb8282018-11-18 08:14:29 -070016@pytest.mark.slow
AKASHI Takahirodde5d3f2018-09-11 15:59:20 +090017class 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))