blob: 9ced101a294c40b1654f57a8c440802274fa5763 [file] [log] [blame]
Jean-Jacques Hiblot8aea8a62019-02-13 12:15:27 +01001# 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"""
8This test verifies unlink operation (deleting a file or a directory)
9on file system.
10"""
11
12import pytest
13import re
14from fstest_defs import *
15from fstest_helpers import assert_fs_integrity
16
17
18@pytest.mark.boardspec('sandbox')
19@pytest.mark.slow
20class 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)