@cryptotaxi247 / kubo / commits / fe89e2e18

Add sharness tests for the refs -r command using --max-depth

License: MIT Signed-off-by: Hector Sanjuan <hector@protocol.ai>

Hector Sanjuan committed Aug 27, 2018 at 20:30 UTC fe89e2e185fe380ad7b9cf349600e3ca5360e61d
1 file changed +176
test/sharness/t0095-refs.sh new
+176
@@ -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