Jean-Jacques Hiblot | 8aea8a6 | 2019-02-13 12:15:27 +0100 | [diff] [blame] | 1 | # SPDX-License-Identifier: GPL-2.0+ |
| 2 | # Copyright (c) 2019, Texas Instrument |
| 3 | # Author: Jean-Jacques Hiblot <jjhiblot@ti.com> |
| 4 | # |
| 5 | # U-Boot File System:symlink Test |
| 6 | |
| 7 | """ |
| 8 | This test verifies unlink operation (deleting a file or a directory) |
| 9 | on file system. |
| 10 | """ |
| 11 | |
| 12 | import pytest |
| 13 | import re |
| 14 | from fstest_defs import * |
| 15 | from fstest_helpers import assert_fs_integrity |
| 16 | |
| 17 | |
| 18 | @pytest.mark.boardspec('sandbox') |
| 19 | @pytest.mark.slow |
| 20 | class TestSymlink(object): |
| 21 | def test_symlink1(self, u_boot_console, fs_obj_symlink): |
| 22 | """ |
| 23 | Test Case 1 - create a link. and follow it when reading |
| 24 | """ |
| 25 | fs_type, fs_img, md5val = fs_obj_symlink |
| 26 | with u_boot_console.log.section('Test Case 1 - create link and read'): |
| 27 | output = u_boot_console.run_command_list([ |
| 28 | 'host bind 0 %s' % fs_img, |
| 29 | 'setenv filesize', |
| 30 | 'ln host 0:0 %s /%s.link ' % (SMALL_FILE, SMALL_FILE), |
| 31 | ]) |
| 32 | assert('' in ''.join(output)) |
| 33 | |
| 34 | output = u_boot_console.run_command_list([ |
| 35 | '%sload host 0:0 %x /%s.link' % (fs_type, ADDR, SMALL_FILE), |
| 36 | 'printenv filesize']) |
| 37 | assert('filesize=100000' in ''.join(output)) |
| 38 | |
| 39 | # Test Case 4b - Read full 1MB of small file |
| 40 | output = u_boot_console.run_command_list([ |
| 41 | 'md5sum %x $filesize' % ADDR, |
| 42 | 'setenv filesize']) |
| 43 | assert(md5val[0] in ''.join(output)) |
| 44 | assert_fs_integrity(fs_type, fs_img) |
| 45 | |
| 46 | def test_symlink2(self, u_boot_console, fs_obj_symlink): |
| 47 | """ |
| 48 | Test Case 2 - create chained links |
| 49 | """ |
| 50 | fs_type, fs_img, md5val = fs_obj_symlink |
| 51 | with u_boot_console.log.section('Test Case 2 - create chained links'): |
| 52 | output = u_boot_console.run_command_list([ |
| 53 | 'host bind 0 %s' % fs_img, |
| 54 | 'setenv filesize', |
| 55 | 'ln host 0:0 %s /%s.link1 ' % (SMALL_FILE, SMALL_FILE), |
| 56 | 'ln host 0:0 /%s.link1 /SUBDIR/%s.link2' % ( |
| 57 | SMALL_FILE, SMALL_FILE), |
| 58 | 'ln host 0:0 SUBDIR/%s.link2 /%s.link3' % ( |
| 59 | SMALL_FILE, SMALL_FILE), |
| 60 | ]) |
| 61 | assert('' in ''.join(output)) |
| 62 | |
| 63 | output = u_boot_console.run_command_list([ |
| 64 | '%sload host 0:0 %x /%s.link3' % (fs_type, ADDR, SMALL_FILE), |
| 65 | 'printenv filesize']) |
| 66 | assert('filesize=100000' in ''.join(output)) |
| 67 | |
| 68 | # Test Case 4b - Read full 1MB of small file |
| 69 | output = u_boot_console.run_command_list([ |
| 70 | 'md5sum %x $filesize' % ADDR, |
| 71 | 'setenv filesize']) |
| 72 | assert(md5val[0] in ''.join(output)) |
| 73 | assert_fs_integrity(fs_type, fs_img) |
| 74 | |
| 75 | def test_symlink3(self, u_boot_console, fs_obj_symlink): |
| 76 | """ |
| 77 | Test Case 3 - replace file/link with link |
| 78 | """ |
| 79 | fs_type, fs_img, md5val = fs_obj_symlink |
| 80 | with u_boot_console.log.section('Test Case 1 - create link and read'): |
| 81 | output = u_boot_console.run_command_list([ |
| 82 | 'host bind 0 %s' % fs_img, |
| 83 | 'setenv filesize', |
| 84 | 'ln host 0:0 %s /%s ' % (MEDIUM_FILE, SMALL_FILE), |
| 85 | 'ln host 0:0 %s /%s.link ' % (MEDIUM_FILE, MEDIUM_FILE), |
| 86 | ]) |
| 87 | assert('' in ''.join(output)) |
| 88 | |
| 89 | output = u_boot_console.run_command_list([ |
| 90 | '%sload host 0:0 %x /%s' % (fs_type, ADDR, SMALL_FILE), |
| 91 | 'printenv filesize']) |
| 92 | assert('filesize=a00000' in ''.join(output)) |
| 93 | |
| 94 | output = u_boot_console.run_command_list([ |
| 95 | 'md5sum %x $filesize' % ADDR, |
| 96 | 'setenv filesize']) |
| 97 | assert(md5val[1] in ''.join(output)) |
| 98 | |
| 99 | output = u_boot_console.run_command_list([ |
| 100 | 'ln host 0:0 %s.link /%s ' % (MEDIUM_FILE, SMALL_FILE), |
| 101 | '%sload host 0:0 %x /%s' % (fs_type, ADDR, SMALL_FILE), |
| 102 | 'printenv filesize']) |
| 103 | assert('filesize=a00000' in ''.join(output)) |
| 104 | |
| 105 | output = u_boot_console.run_command_list([ |
| 106 | 'md5sum %x $filesize' % ADDR, |
| 107 | 'setenv filesize']) |
| 108 | assert(md5val[1] in ''.join(output)) |
| 109 | assert_fs_integrity(fs_type, fs_img) |
| 110 | |
| 111 | def test_symlink4(self, u_boot_console, fs_obj_symlink): |
| 112 | """ |
| 113 | Test Case 4 - create a broken link |
| 114 | """ |
| 115 | fs_type, fs_img, md5val = fs_obj_symlink |
| 116 | with u_boot_console.log.section('Test Case 1 - create link and read'): |
| 117 | |
| 118 | output = u_boot_console.run_command_list([ |
| 119 | 'setenv filesize', |
| 120 | 'ln host 0:0 nowhere /link ', |
| 121 | ]) |
| 122 | assert('' in ''.join(output)) |
| 123 | |
| 124 | output = u_boot_console.run_command( |
| 125 | '%sload host 0:0 %x /link' % |
| 126 | (fs_type, ADDR)) |
| 127 | with u_boot_console.disable_check('error_notification'): |
| 128 | output = u_boot_console.run_command('printenv filesize') |
| 129 | assert('"filesize" not defined' in ''.join(output)) |
| 130 | assert_fs_integrity(fs_type, fs_img) |