@cryptotaxi247 / kubo / commits / 20b928094

fix(commands): Add sharness tests for streaming

Also fixes issues discovered with sharness tests License: MIT Signed-off-by: hannahhoward <hannah@hannahhoward.net>

hannahhoward committed Nov 8, 2018 at 16:20 UTC 20b928094c990af969e71beadaa47b48c5079c9f
2 files changed +108 -14
core/commands/ls.go
+25 -14
@@ -111,10 +111,9 @@ The JSON output contains type information.
111 ng := merkledag.NewSession(req.Context, nd.DAG)
112 ro := merkledag.NewReadOnlyDagService(ng)
113
114 - output := make([]LsObject, len(req.Arguments))
115 -
114 stream, _ := req.Options[lsStreamOptionName].(bool)
115 if !stream {
116 + output := make([]LsObject, len(req.Arguments))
117
118 for i, dagnode := range dagnodes {
119 dir, err := uio.NewDirectoryFromNode(ro, dagnode)
@@ -148,14 +147,6 @@ The JSON output contains type information.
147 return cmds.EmitOnce(res, &LsOutput{output})
148 }
149
151 - outputLinks := make([]LsLink, 1)
152 - for i, path := range paths {
153 - output[i] = LsObject{
154 - Hash: path,
155 - Links: nil,
156 - }
157 - }
158 -
150 for i, dagnode := range dagnodes {
151 dir, err := uio.NewDirectoryFromNode(ro, dagnode)
152 if err != nil && err != uio.ErrNotADir {
@@ -169,9 +160,17 @@ The JSON output contains type information.
160 linkResults = dir.EnumLinksAsync(req.Context)
161 }
162
172 - output[i].Links = outputLinks
173 -
163 for linkResult := range linkResults {
164 + output := make([]LsObject, len(req.Arguments))
165 +
166 + for i, path := range paths {
167 + output[i] = LsObject{
168 + Hash: path,
169 + Links: nil,
170 + }
171 + }
172 + outputLinks := make([]LsLink, 1)
173 +
174 if linkResult.Err != nil {
175 return linkResult.Err
176 }
@@ -181,11 +180,11 @@ The JSON output contains type information.
180 return err
181 }
182 outputLinks[0] = *lsLink
183 + output[i].Links = outputLinks
184 if err = res.Emit(&LsOutput{output}); err != nil {
185 return err
186 }
187 }
188 - output[i].Links = nil
188 }
189 return nil
190 },
@@ -193,9 +192,21 @@ The JSON output contains type information.
192 cmds.CLI: func(res cmds.Response, re cmds.ResponseEmitter) error {
193 req := res.Request()
194 headers, _ := req.Options[lsHeadersOptionNameTime].(bool)
195 + stream, _ := req.Options[lsStreamOptionName].(bool)
196 +
197 + // in streaming mode we can't automatically align the tabs
198 + // so we take a best guess
199 + var minTabWidth int
200 + if stream {
201 + minTabWidth = 10
202 + } else {
203 + minTabWidth = 1
204 + }
205 +
206 multipleFolders := len(req.Arguments) > 1
207 lastDirectoryWritten := -1
198 - tw := tabwriter.NewWriter(os.Stdout, 1, 2, 1, ' ', 0)
208 +
209 + tw := tabwriter.NewWriter(os.Stdout, minTabWidth, 2, 1, ' ', 0)
210 for {
211 v, err := res.Next()
212 if err != nil {
test/sharness/t0045-ls.sh
+83
@@ -90,6 +90,87 @@ EOF
90 '
91 }
92
93 +
94 +test_ls_cmd_streaming() {
95 +
96 + test_expect_success "'ipfs add -r testData' succeeds" '
97 + mkdir -p testData testData/d1 testData/d2 &&
98 + echo "test" >testData/f1 &&
99 + echo "data" >testData/f2 &&
100 + echo "hello" >testData/d1/a &&
101 + random 128 42 >testData/d1/128 &&
102 + echo "world" >testData/d2/a &&
103 + random 1024 42 >testData/d2/1024 &&
104 + ipfs add -r testData >actual_add
105 + '
106 +
107 + test_expect_success "'ipfs add' output looks good" '
108 + cat <<-\EOF >expected_add &&
109 +added QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe testData/d1/128
110 +added QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN testData/d1/a
111 +added QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd testData/d2/1024
112 +added QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL testData/d2/a
113 +added QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH testData/f1
114 +added QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M testData/f2
115 +added QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss testData/d1
116 +added QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy testData/d2
117 +added QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj testData
118 +EOF
119 + test_cmp expected_add actual_add
120 + '
121 +
122 + test_expect_success "'ipfs ls --stream <three dir hashes>' succeeds" '
123 + ipfs ls --stream QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_stream
124 + '
125 +
126 + test_expect_success "'ipfs ls --stream <three dir hashes>' output looks good" '
127 + cat <<-\EOF >expected_ls_stream &&
128 +QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj:
129 +QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss 246 d1/
130 +QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy 1143 d2/
131 +QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 13 f1
132 +QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 13 f2
133 +
134 +QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy:
135 +QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1035 1024
136 +QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 14 a
137 +
138 +QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss:
139 +QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 139 128
140 +QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 14 a
141 +
142 +EOF
143 + test_cmp expected_ls_stream actual_ls_stream
144 + '
145 +
146 + test_expect_success "'ipfs ls --stream --headers <three dir hashes>' succeeds" '
147 + ipfs ls --stream --headers QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss >actual_ls_stream_headers
148 + '
149 +
150 + test_expect_success "'ipfs ls --stream --headers <three dir hashes>' output looks good" '
151 + cat <<-\EOF >expected_ls_stream_headers &&
152 +QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj:
153 +Hash Size Name
154 +QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss 246 d1/
155 +QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy 1143 d2/
156 +QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH 13 f1
157 +QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M 13 f2
158 +
159 +QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy:
160 +Hash Size Name
161 +QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd 1035 1024
162 +QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL 14 a
163 +
164 +QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss:
165 +Hash Size Name
166 +QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe 139 128
167 +QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN 14 a
168 +
169 +EOF
170 + test_cmp expected_ls_stream_headers actual_ls_stream_headers
171 + '
172 +}
173 +
174 test_ls_cmd_raw_leaves() {
175 test_expect_success "'ipfs add -r --raw-leaves' then 'ipfs ls' works as expected" '
176 mkdir -p somedir &&
@@ -114,12 +195,14 @@ test_ls_object() {
195
196 # should work offline
197 test_ls_cmd
198 +test_ls_cmd_streaming
199 test_ls_cmd_raw_leaves
200 test_ls_object
201
202 # should work online
203 test_launch_ipfs_daemon
204 test_ls_cmd
205 +test_ls_cmd_streaming
206 test_ls_cmd_raw_leaves
207 test_kill_ipfs_daemon
208 test_ls_object