master
sh 187 lines 6.41 KB
Raw
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_without_network
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_refs_output() {
75 ARGS=$1
76 FILTER=$2
77
78 test_expect_success "ipfs refs $ARGS -r" '
79 cat <<EOF | $FILTER > expected.txt
80 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
81 QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
82 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
83 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
84 QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
85 QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
86 QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
87 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
88 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
89 QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
90 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
91 QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
92 EOF
93
94 ipfs refs $ARGS -r $refsroot > refsr.txt
95 test_cmp expected.txt refsr.txt
96 '
97
98 # Unique is like above but removing duplicates
99 test_expect_success "ipfs refs $ARGS -r --unique" '
100 cat <<EOF | $FILTER > expected.txt
101 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
102 QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
103 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
104 QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
105 QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
106 EOF
107
108 ipfs refs $ARGS -r --unique $refsroot > refsr.txt
109 test_cmp expected.txt refsr.txt
110 '
111
112 # First level is 1.txt, B, C, D
113 test_expect_success "ipfs refs $ARGS" '
114 cat <<EOF | $FILTER > expected.txt
115 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
116 QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
117 QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
118 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
119 EOF
120 ipfs refs $ARGS $refsroot > refs.txt
121 test_cmp expected.txt refs.txt
122 '
123
124 # max-depth=0 should return an empty list
125 test_expect_success "ipfs refs $ARGS -r --max-depth=0" '
126 cat <<EOF > expected.txt
127 EOF
128 ipfs refs $ARGS -r --max-depth=0 $refsroot > refs.txt
129 test_cmp expected.txt refs.txt
130 '
131
132 # max-depth=1 should be equivalent to running without -r
133 test_expect_success "ipfs refs $ARGS -r --max-depth=1" '
134 ipfs refs $ARGS -r --max-depth=1 $refsroot > refsr.txt
135 ipfs refs $ARGS $refsroot > refs.txt
136 test_cmp refsr.txt refs.txt
137 '
138
139 # We should see the depth limit engage at level 2
140 test_expect_success "ipfs refs $ARGS -r --max-depth=2" '
141 cat <<EOF | $FILTER > expected.txt
142 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
143 QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
144 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
145 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
146 QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
147 QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
148 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
149 QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
150 EOF
151 ipfs refs $ARGS -r --max-depth=2 $refsroot > refsr.txt
152 test_cmp refsr.txt expected.txt
153 '
154
155 # Here branch pruning and re-exploration come into place
156 # At first it should see D at level 2 and don't go deeper.
157 # But then after doing C it will see D at level 1 and go deeper
158 # so that it outputs the hash for 2.txt (-q61).
159 # We also see that C/B is pruned as it's been shown before.
160 #
161 # Excerpt from diagram above:
162 #
163 # L0- _______ A_________
164 # / | \ \
165 # L1- B C D 1.txt
166 # / \ | |
167 # L2- D 1.txt B 2.txt
168 test_expect_success "ipfs refs $ARGS -r --unique --max-depth=2" '
169 cat <<EOF | $FILTER > expected.txt
170 QmdytmR4wULMd3SLo6ePF4s3WcRHWcpnJZ7bHhoj3QB13v
171 QmNkQvpiyAEtbeLviC7kqfifYoK1GXPcsSxTpP1yS3ykLa
172 QmSanP5DpxpqfDdS4yekHY1MqrVge47gtxQcp2e2yZ4UwS
173 QmXXazTjeNCKFnpW1D65vTKsTs8fbgkCWTv8Em4pdK2coH
174 QmSFxnK675wQ9Kc1uqWKyJUaNxvSc2BP5DbXCD3x93oq61
175 EOF
176 ipfs refs $ARGS -r --unique --max-depth=2 $refsroot > refsr.txt
177 test_cmp refsr.txt expected.txt
178 '
179 }
180
181 test_refs_output '' 'cat'
182
183 test_refs_output '--cid-base=base32' 'ipfs cid base32'
184
185 test_kill_ipfs_daemon
186
187 test_done