Skip to content

Commit 35a02ff

Browse files
committed
Add sharness tests for the refs -r command using --max-depth
License: MIT Signed-off-by: Hector Sanjuan <[email protected]>
1 parent 53230db commit 35a02ff

File tree

1 file changed

+176
-0
lines changed

1 file changed

+176
-0
lines changed

test/sharness/t0095-refs.sh

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
#!/usr/bin/env bash
2+
#
3+
# Copyright (c) 2018 Protocol Labs, Inc
4+
# MIT Licensed; see the LICENSE file in this repository.
5+
#
6+
7+
test_description="Test 'ipfs refs' command"
8+
9+
. lib/test-lib.sh
10+
11+
test_init_ipfs
12+
test_launch_ipfs_daemon --offline
13+
14+
# This file performs tests with the following directory
15+
# structure.
16+
#
17+
# L0- _______ A_________
18+
# / | \ \
19+
# L1- B C D 1.txt
20+
# / \ | |
21+
# L2- D 1.txt B 2.txt
22+
# | / \
23+
# L3- 2.txt D 1.txt
24+
# |
25+
# L4- 2.txt
26+
#
27+
# 'ipfs add -r A' output:
28+
#
29+
# added QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v A/1.txt
30+
# added QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v A/B/1.txt
31+
# added QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61 A/B/D/2.txt
32+
# added QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v A/C/B/1.txt
33+
# added QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61 A/C/B/D/2.txt
34+
# added QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61 A/D/2.txt
35+
# added QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS A/B/D
36+
# added QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa A/B
37+
# added QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS A/C/B/D
38+
# added QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa A/C/B
39+
# added QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH A/C
40+
# added QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS A/D
41+
# added QmU6xujRsYzcrkocuR3fhfnkZBB8eyUFFq4WKRGw2aS15h A
42+
#
43+
# 'ipfs refs -r QmU6xujRsYzcrkocuR3fhfnkZBB8eyUFFq4WKRGw2aS15h' sample output
44+
# that shows visit order in a stable go-ipfs version:
45+
#
46+
# QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v - 1.txt
47+
# QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa - B (A/B)
48+
# QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v - 1.txt (A/B/1.txt)
49+
# QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS - D (A/B/D)
50+
# QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61 - 2.txt (A/B/D/2.txt)
51+
# QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH - C (A/C)
52+
# QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa - B (A/C/B)
53+
# QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v - 1.txt (A/C/B/1.txt)
54+
# QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS - D (A/C/B/D)
55+
# QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61 - 2.txt (A/C/B/D/2.txt)
56+
# QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS - D (A/D)
57+
# QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61 - 2.txt (A/D/2.txt)
58+
59+
60+
refsroot=QmU6xujRsYzcrkocuR3fhfnkZBB8eyUFFq4WKRGw2aS15h
61+
62+
test_expect_success "create and add folders for refs" '
63+
mkdir -p A/B/D A/C/B/D A/D
64+
echo "1" > A/1.txt
65+
echo "1" > A/B/1.txt
66+
echo "1" > A/C/B/1.txt
67+
echo "2" > A/B/D/2.txt
68+
echo "2" > A/C/B/D/2.txt
69+
echo "2" > A/D/2.txt
70+
root=$(ipfs add -r -Q A)
71+
[[ "$root" == "$refsroot" ]]
72+
'
73+
74+
test_expect_success "ipfs refs -r" '
75+
cat <<EOF > expected.txt
76+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
77+
QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
78+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
79+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
80+
QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
81+
QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
82+
QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
83+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
84+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
85+
QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
86+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
87+
QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
88+
EOF
89+
90+
ipfs refs -r $refsroot > refsr.txt
91+
test_cmp expected.txt refsr.txt
92+
'
93+
94+
# Unique is like above but removing duplicates
95+
test_expect_success "ipfs refs -r --unique" '
96+
cat <<EOF > expected.txt
97+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
98+
QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
99+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
100+
QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
101+
QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
102+
EOF
103+
104+
ipfs refs -r --unique $refsroot > refsr.txt
105+
test_cmp expected.txt refsr.txt
106+
'
107+
108+
# First level is 1.txt, B, C, D
109+
test_expect_success "ipfs refs" '
110+
cat <<EOF > expected.txt
111+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
112+
QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
113+
QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
114+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
115+
EOF
116+
ipfs refs $refsroot > refs.txt
117+
test_cmp expected.txt refs.txt
118+
'
119+
120+
# max-depth=0 should return an empty list
121+
test_expect_success "ipfs refs -r --max-depth=0" '
122+
cat <<EOF > expected.txt
123+
EOF
124+
ipfs refs -r --max-depth=0 $refsroot > refs.txt
125+
test_cmp expected.txt refs.txt
126+
'
127+
128+
# max-depth=1 should be equivalent to running without -r
129+
test_expect_success "ipfs refs -r --max-depth=1" '
130+
ipfs refs -r --max-depth=1 $refsroot > refsr.txt
131+
ipfs refs $refsroot > refs.txt
132+
test_cmp refsr.txt refs.txt
133+
'
134+
135+
# We should see the depth limit engage at level 2
136+
test_expect_success "ipfs refs -r --max-depth=2" '
137+
cat <<EOF > expected.txt
138+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
139+
QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
140+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
141+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
142+
QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
143+
QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
144+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
145+
QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
146+
EOF
147+
ipfs refs -r --max-depth=2 $refsroot > refsr.txt
148+
test_cmp refsr.txt expected.txt
149+
'
150+
151+
# Here branch pruning and re-exploration come into place
152+
# At first it should see D at level 2 and don't go deeper.
153+
# But then after doing C it will see D at level 1 and go deeper
154+
# so that it outputs the hash for 2.txt (-q61).
155+
# We also see that C/B is pruned as it's been shown before.
156+
#
157+
# Excerpt from diagram above:
158+
#
159+
# L0- _______ A_________
160+
# / | \ \
161+
# L1- B C D 1.txt
162+
# / \ | |
163+
# L2- D 1.txt B 2.txt
164+
test_expect_success "ipfs refs -r --unique --max-depth=2" '
165+
cat <<EOF > expected.txt
166+
QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
167+
QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
168+
QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
169+
QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
170+
QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
171+
EOF
172+
ipfs refs -r --unique --max-depth=2 $refsroot > refsr.txt
173+
test_cmp refsr.txt expected.txt
174+
'
175+
176+
test_done

0 commit comments

Comments
 (0)