github.com/qiniu/go-sdk/v7@v7.27.0/storage/worker_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package storage 5 6 import ( 7 "context" 8 "fmt" 9 "math/rand" 10 "os" 11 "sync" 12 "testing" 13 "time" 14 ) 15 16 func TestWorkerCopy(t *testing.T) { 17 wg := sync.WaitGroup{} 18 var initOnce sync.Once 19 workers := 10 20 var tasks chan func() 21 initOnce.Do(func() { 22 tasks = make(chan func(), workers) 23 for i := 0; i < workers; i++ { 24 go worker(tasks) 25 } 26 }) 27 28 m := NewBucketManager(mac, nil) 29 30 for i := 0; i < 100; i++ { 31 wg.Add(1) 32 tasks <- func() { 33 defer wg.Done() 34 err := m.Copy(testBucket, "qiniu.png", testBucket, fmt.Sprintf("test_%d", i), true) 35 t.Log(err) 36 } 37 } 38 wg.Wait() 39 } 40 41 func TestWorkerUpload(t *testing.T) { 42 // prepare file for test uploading 43 testLocalFile, err := os.CreateTemp("", "TestWorkerUpload") 44 if err != nil { 45 t.Fatalf("os.CreateTemp file failed, err: %v", err) 46 } 47 defer os.Remove(testLocalFile.Name()) 48 49 wg := sync.WaitGroup{} 50 var initOnce sync.Once 51 workers := 10 52 var tasks chan func() 53 initOnce.Do(func() { 54 tasks = make(chan func(), workers) 55 for i := 0; i < workers; i++ { 56 go worker(tasks) 57 } 58 }) 59 60 uploader := NewResumeUploader(nil) 61 ctx := context.Background() 62 63 for i := 0; i < 20; i++ { 64 wg.Add(1) 65 66 tasks <- func() { 67 defer wg.Done() 68 69 r := rand.New(rand.NewSource(time.Now().UnixNano())) 70 testKey := fmt.Sprintf("testPutFileKey_%d", r.Int()) 71 t.Logf("start to upload %s ...", testKey) 72 73 var putRet PutRet 74 putPolicy := PutPolicy{ 75 Scope: testBucket + ":" + testKey, 76 DeleteAfterDays: 7, 77 } 78 upToken := putPolicy.UploadToken(mac) 79 err := uploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), nil) 80 if err != nil { 81 t.Errorf("TestWorkerUpload error, %s", err) 82 } 83 84 t.Logf("upload success, key: %s, hash:%s", putRet.Key, putRet.Hash) 85 } 86 } 87 88 wg.Wait() 89 }