Skip to content

Commit d945316

Browse files
Josverldpgeorge
authored andcommitted
tools/mpremote/tests: Add tests for 'fs tree' command.
Signed-off-by: Jos Verlinde <[email protected]>
1 parent 1dfb509 commit d945316

File tree

4 files changed

+344
-0
lines changed

4 files changed

+344
-0
lines changed

tools/mpremote/tests/test_filesystem.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,3 +237,6 @@ echo -----
237237
# try to delete existing folder in mounted filesystem
238238
$MPREMOTE mount "${TMP}" + rm -rv :package || echo "expect error"
239239
echo -----
240+
# fs without command should raise error
241+
$MPREMOTE fs 2>/dev/null || echo "expect error: $?"
242+
echo -----

tools/mpremote/tests/test_filesystem.sh.exp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,5 @@ rm :package
272272
mpremote: rm -r not permitted on /remote directory
273273
expect error
274274
-----
275+
expect error: 2
276+
-----

tools/mpremote/tests/test_fs_tree.sh

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Creates a RAM disk big enough to hold two copies of the test directory
5+
# structure.
6+
cat << EOF > "${TMP}/ramdisk.py"
7+
class RAMBlockDev:
8+
def __init__(self, block_size, num_blocks):
9+
self.block_size = block_size
10+
self.data = bytearray(block_size * num_blocks)
11+
12+
def readblocks(self, block_num, buf):
13+
for i in range(len(buf)):
14+
buf[i] = self.data[block_num * self.block_size + i]
15+
16+
def writeblocks(self, block_num, buf):
17+
for i in range(len(buf)):
18+
self.data[block_num * self.block_size + i] = buf[i]
19+
20+
def ioctl(self, op, arg):
21+
if op == 4: # get number of blocks
22+
return len(self.data) // self.block_size
23+
if op == 5: # get block size
24+
return self.block_size
25+
26+
import os
27+
28+
bdev = RAMBlockDev(512, 50)
29+
os.VfsFat.mkfs(bdev)
30+
os.mount(bdev, '/ramdisk')
31+
os.chdir('/ramdisk')
32+
EOF
33+
34+
# setup
35+
echo -----
36+
$MPREMOTE run "${TMP}/ramdisk.py"
37+
$MPREMOTE resume ls
38+
39+
echo -----
40+
echo "empty tree"
41+
$MPREMOTE resume tree :
42+
43+
echo -----
44+
$MPREMOTE resume touch :a.py + touch :b.py
45+
$MPREMOTE resume mkdir :foo + touch :foo/aa.py + touch :foo/ba.py
46+
47+
echo "small tree - :"
48+
$MPREMOTE resume tree :
49+
50+
echo -----
51+
echo "no path"
52+
$MPREMOTE resume tree
53+
54+
echo -----
55+
echo "path = '.'"
56+
$MPREMOTE resume tree .
57+
58+
echo -----
59+
echo "path = ':.'"
60+
$MPREMOTE resume tree :.
61+
62+
63+
echo -----
64+
echo "multiple trees"
65+
$MPREMOTE resume mkdir :bar + touch :bar/aaa.py + touch :bar/bbbb.py
66+
$MPREMOTE resume mkdir :bar/baz + touch :bar/baz/aaa.py + touch :bar/baz/bbbb.py
67+
$MPREMOTE resume mkdir :bar/baz/quux + touch :bar/baz/quux/aaa.py + touch :bar/baz/quux/bbbb.py
68+
$MPREMOTE resume mkdir :bar/baz/quux/xen + touch :bar/baz/quux/xen/aaa.py
69+
70+
$MPREMOTE resume tree
71+
72+
echo -----
73+
echo single path
74+
$MPREMOTE resume tree :foo
75+
76+
echo -----
77+
echo "multiple paths"
78+
$MPREMOTE resume tree :foo :bar
79+
80+
echo -----
81+
echo "subtree"
82+
$MPREMOTE resume tree bar/baz
83+
84+
echo -----
85+
echo mountpoint
86+
$MPREMOTE resume tree :/ramdisk
87+
88+
echo -----
89+
echo non-existent folder : error
90+
$MPREMOTE resume tree :not_there || echo "expect error: $?"
91+
92+
echo -----
93+
echo file : error
94+
$MPREMOTE resume tree :a.py || echo "expect error: $?"
95+
96+
echo -----
97+
echo "tree -s :"
98+
mkdir -p "${TMP}/data"
99+
dd if=/dev/zero of="${TMP}/data/file1.txt" bs=1 count=20 > /dev/null 2>&1
100+
dd if=/dev/zero of="${TMP}/data/file2.txt" bs=1 count=204 > /dev/null 2>&1
101+
dd if=/dev/zero of="${TMP}/data/file3.txt" bs=1 count=1096 > /dev/null 2>&1
102+
dd if=/dev/zero of="${TMP}/data/file4.txt" bs=1 count=2192 > /dev/null 2>&1
103+
104+
$MPREMOTE resume cp -r "${TMP}/data" :
105+
$MPREMOTE resume tree -s :
106+
echo -----
107+
echo "tree -s"
108+
$MPREMOTE resume tree -s
109+
echo -----
110+
$MPREMOTE resume tree --human :
111+
echo -----
112+
$MPREMOTE resume tree -s --human : || echo "expect error: $?"
113+
echo -----
114+
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
-----
2+
ls :
3+
-----
4+
empty tree
5+
tree :
6+
:/ramdisk
7+
-----
8+
touch :a.py
9+
touch :b.py
10+
mkdir :foo
11+
touch :foo/aa.py
12+
touch :foo/ba.py
13+
small tree - :
14+
tree :
15+
:/ramdisk
16+
├── a.py
17+
├── b.py
18+
└── foo
19+
├── aa.py
20+
└── ba.py
21+
-----
22+
no path
23+
tree :
24+
:/ramdisk
25+
├── a.py
26+
├── b.py
27+
└── foo
28+
├── aa.py
29+
└── ba.py
30+
-----
31+
path = '.'
32+
tree :.
33+
:/ramdisk
34+
├── a.py
35+
├── b.py
36+
└── foo
37+
├── aa.py
38+
└── ba.py
39+
-----
40+
path = ':.'
41+
tree :.
42+
:/ramdisk
43+
├── a.py
44+
├── b.py
45+
└── foo
46+
├── aa.py
47+
└── ba.py
48+
-----
49+
multiple trees
50+
mkdir :bar
51+
touch :bar/aaa.py
52+
touch :bar/bbbb.py
53+
mkdir :bar/baz
54+
touch :bar/baz/aaa.py
55+
touch :bar/baz/bbbb.py
56+
mkdir :bar/baz/quux
57+
touch :bar/baz/quux/aaa.py
58+
touch :bar/baz/quux/bbbb.py
59+
mkdir :bar/baz/quux/xen
60+
touch :bar/baz/quux/xen/aaa.py
61+
tree :
62+
:/ramdisk
63+
├── a.py
64+
├── b.py
65+
├── bar
66+
│ ├── aaa.py
67+
│ ├── baz
68+
│ │ ├── aaa.py
69+
│ │ ├── bbbb.py
70+
│ │ └── quux
71+
│ │ ├── aaa.py
72+
│ │ ├── bbbb.py
73+
│ │ └── xen
74+
│ │ └── aaa.py
75+
│ └── bbbb.py
76+
└── foo
77+
├── aa.py
78+
└── ba.py
79+
-----
80+
single path
81+
tree :foo
82+
:foo
83+
├── aa.py
84+
└── ba.py
85+
-----
86+
multiple paths
87+
tree :foo
88+
:foo
89+
├── aa.py
90+
└── ba.py
91+
tree :bar
92+
:bar
93+
├── aaa.py
94+
├── baz
95+
│ ├── aaa.py
96+
│ ├── bbbb.py
97+
│ └── quux
98+
│ ├── aaa.py
99+
│ ├── bbbb.py
100+
│ └── xen
101+
│ └── aaa.py
102+
└── bbbb.py
103+
-----
104+
subtree
105+
tree :bar/baz
106+
:bar/baz
107+
├── aaa.py
108+
├── bbbb.py
109+
└── quux
110+
├── aaa.py
111+
├── bbbb.py
112+
└── xen
113+
└── aaa.py
114+
-----
115+
mountpoint
116+
tree :/ramdisk
117+
:/ramdisk
118+
├── a.py
119+
├── b.py
120+
├── bar
121+
│ ├── aaa.py
122+
│ ├── baz
123+
│ │ ├── aaa.py
124+
│ │ ├── bbbb.py
125+
│ │ └── quux
126+
│ │ ├── aaa.py
127+
│ │ ├── bbbb.py
128+
│ │ └── xen
129+
│ │ └── aaa.py
130+
│ └── bbbb.py
131+
└── foo
132+
├── aa.py
133+
└── ba.py
134+
-----
135+
non-existent folder : error
136+
tree :not_there
137+
mpremote: tree: 'not_there' is not a directory
138+
expect error: 1
139+
-----
140+
file : error
141+
tree :a.py
142+
mpremote: tree: 'a.py' is not a directory
143+
expect error: 1
144+
-----
145+
tree -s :
146+
cp ${TMP}/data :
147+
tree :
148+
:/ramdisk
149+
├── [ 0] a.py
150+
├── [ 0] b.py
151+
├── bar
152+
│ ├── [ 0] aaa.py
153+
│ ├── baz
154+
│ │ ├── [ 0] aaa.py
155+
│ │ ├── [ 0] bbbb.py
156+
│ │ └── quux
157+
│ │ ├── [ 0] aaa.py
158+
│ │ ├── [ 0] bbbb.py
159+
│ │ └── xen
160+
│ │ └── [ 0] aaa.py
161+
│ └── [ 0] bbbb.py
162+
├── data
163+
│ ├── [ 20] file1.txt
164+
│ ├── [ 204] file2.txt
165+
│ ├── [ 1096] file3.txt
166+
│ └── [ 2192] file4.txt
167+
└── foo
168+
├── [ 0] aa.py
169+
└── [ 0] ba.py
170+
-----
171+
tree -s
172+
tree :
173+
:/ramdisk
174+
├── [ 0] a.py
175+
├── [ 0] b.py
176+
├── bar
177+
│ ├── [ 0] aaa.py
178+
│ ├── baz
179+
│ │ ├── [ 0] aaa.py
180+
│ │ ├── [ 0] bbbb.py
181+
│ │ └── quux
182+
│ │ ├── [ 0] aaa.py
183+
│ │ ├── [ 0] bbbb.py
184+
│ │ └── xen
185+
│ │ └── [ 0] aaa.py
186+
│ └── [ 0] bbbb.py
187+
├── data
188+
│ ├── [ 20] file1.txt
189+
│ ├── [ 204] file2.txt
190+
│ ├── [ 1096] file3.txt
191+
│ └── [ 2192] file4.txt
192+
└── foo
193+
├── [ 0] aa.py
194+
└── [ 0] ba.py
195+
-----
196+
tree :
197+
:/ramdisk
198+
├── [ 0] a.py
199+
├── [ 0] b.py
200+
├── bar
201+
│ ├── [ 0] aaa.py
202+
│ ├── baz
203+
│ │ ├── [ 0] aaa.py
204+
│ │ ├── [ 0] bbbb.py
205+
│ │ └── quux
206+
│ │ ├── [ 0] aaa.py
207+
│ │ ├── [ 0] bbbb.py
208+
│ │ └── xen
209+
│ │ └── [ 0] aaa.py
210+
│ └── [ 0] bbbb.py
211+
├── data
212+
│ ├── [ 20] file1.txt
213+
│ ├── [ 204] file2.txt
214+
│ ├── [ 1.1K] file3.txt
215+
│ └── [ 2.1K] file4.txt
216+
└── foo
217+
├── [ 0] aa.py
218+
└── [ 0] ba.py
219+
-----
220+
usage: fs [--help] [--recursive | --no-recursive] [--force | --no-force]
221+
[--verbose | --no-verbose] [--size | --human]
222+
command path [path ...] ...
223+
fs: error: argument --human/-h: not allowed with argument --size/-s
224+
expect error: 2
225+
-----

0 commit comments

Comments
 (0)