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