(t *testing.T)
| 149 | } |
| 150 | |
| 151 | func 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 { |
nothing calls this directly
no test coverage detected
searching dependent graphs…