MCPcopy Index your code
hub / github.com/rclone/rclone / TestMultithreadCopy

Function TestMultithreadCopy

fs/operations/multithread_test.go:151–244  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

149}
150
151func TestMultithreadCopy(t *testing.T) {
152 r := fstest.NewRun(t)
153 ctx := context.Background()
154 chunkSize := skipIfNotMultithread(ctx, t, r)
155 // Check every other transfer for metadata
156 checkMetadata := false
157 ctx, ci := fs.AddConfig(ctx)
158
159 for _, upload := range []bool{false, true} {
160 for _, test := range []struct {
161 size int
162 streams int
163 }{
164 {size: chunkSize*2 - 1, streams: 2},
165 {size: chunkSize * 2, streams: 2},
166 {size: chunkSize*2 + 1, streams: 2},
167 } {
168 checkMetadata = !checkMetadata
169 ci.Metadata = checkMetadata
170 fileName := fmt.Sprintf("test-multithread-copy-%v-%d-%d", upload, test.size, test.streams)
171 t.Run(fmt.Sprintf("upload=%v,size=%v,streams=%v", upload, test.size, test.streams), func(t *testing.T) {
172 if *fstest.SizeLimit > 0 && int64(test.size) > *fstest.SizeLimit {
173 t.Skipf("exceeded file size limit %d > %d", test.size, *fstest.SizeLimit)
174 }
175 var (
176 contents = random.String(test.size)
177 t1 = fstest.Time("2001-02-03T04:05:06.499999999Z")
178 file1 fstest.Item
179 src, dst fs.Object
180 err error
181 testMetadata = fs.Metadata{
182 // System metadata supported by all backends
183 "mtime": t1.Format(time.RFC3339Nano),
184 // User metadata
185 "potato": "jersey",
186 }
187 )
188
189 var fSrc, fDst fs.Fs
190 if upload {
191 file1 = r.WriteFile(fileName, contents, t1)
192 r.CheckRemoteItems(t)
193 r.CheckLocalItems(t, file1)
194 fDst, fSrc = r.Fremote, r.Flocal
195 } else {
196 file1 = r.WriteObject(ctx, fileName, contents, t1)
197 r.CheckRemoteItems(t, file1)
198 r.CheckLocalItems(t)
199 fDst, fSrc = r.Flocal, r.Fremote
200 }
201 src, err = fSrc.NewObject(ctx, fileName)
202 require.NoError(t, err)
203
204 do, canSetMetadata := src.(fs.SetMetadataer)
205 if checkMetadata && canSetMetadata {
206 // Set metadata on the source if required
207 err := do.SetMetadata(ctx, testMetadata)
208 if err == fs.ErrorNotImplemented {

Callers

nothing calls this directly

Calls 15

WriteFileMethod · 0.95
CheckRemoteItemsMethod · 0.95
CheckLocalItemsMethod · 0.95
WriteObjectMethod · 0.95
NewObjectMethod · 0.95
DoneMethod · 0.95
FeaturesMethod · 0.95
NewRunFunction · 0.92
AddConfigFunction · 0.92
StringFunction · 0.92
TimeFunction · 0.92
CheckEntryMetadataFunction · 0.92

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…