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""" 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)) 225