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