github.com/qiniu/go-sdk/v7@v7.27.0/storage/form_upload_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package storage 5 6 import ( 7 "bytes" 8 "context" 9 "fmt" 10 "io" 11 "math/rand" 12 "os" 13 "strings" 14 "testing" 15 "time" 16 ) 17 18 func TestFormUploadPutFileWithoutExtra(t *testing.T) { 19 var putRet PutRet 20 ctx := context.TODO() 21 putPolicy := PutPolicy{ 22 Scope: testBucket, 23 DeleteAfterDays: 7, 24 } 25 26 // prepare file for test uploading 27 testLocalFile, err := os.CreateTemp("", "TestFormUploadPutFile") 28 if err != nil { 29 t.Fatalf("os.CreateTemp file failed, err: %v", err) 30 } 31 defer os.Remove(testLocalFile.Name()) 32 33 r := rand.New(rand.NewSource(time.Now().UnixNano())) 34 _, err = io.CopyN(testLocalFile, r, 10*1024*1024) 35 if err != nil { 36 t.Fatalf("os.CreateTemp file write failed, err: %v", err) 37 } 38 _, err = testLocalFile.Seek(0, io.SeekCurrent) 39 if err != nil { 40 t.Fatalf("os.CreateTemp file seek failed, err: %v", err) 41 } 42 43 upToken := putPolicy.UploadToken(mac) 44 testKey := fmt.Sprintf("testPutFileWithoutExtra_%d", r.Int()) 45 46 err = formUploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), nil) 47 if err != nil { 48 t.Fatalf("FormUploader#PutFile() error, %s", err) 49 } 50 t.Logf("Key: %s, Hash:%s", putRet.Key, putRet.Hash) 51 } 52 53 func TestFormUploaderWithInvalidUpHost(t *testing.T) { 54 var putRet PutRet 55 ctx := context.TODO() 56 putPolicy := PutPolicy{ 57 Scope: testBucket, 58 DeleteAfterDays: 7, 59 } 60 61 // prepare file for test uploading 62 testLocalFile, err := os.CreateTemp("", "TestFormUploadPutFile") 63 if err != nil { 64 t.Fatalf("os.CreateTemp file failed, err: %v", err) 65 } 66 defer os.Remove(testLocalFile.Name()) 67 68 r := rand.New(rand.NewSource(time.Now().UnixNano())) 69 _, err = io.CopyN(testLocalFile, r, 1024) 70 if err != nil { 71 t.Fatalf("os.CreateTemp file write failed, err: %v", err) 72 } 73 _, err = testLocalFile.Seek(0, io.SeekCurrent) 74 if err != nil { 75 t.Fatalf("os.CreateTemp file seek failed, err: %v", err) 76 } 77 78 upToken := putPolicy.UploadToken(mac) 79 testKey := fmt.Sprintf("testPutFileWithoutExtra_%d", r.Int()) 80 81 err = formUploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), &PutExtra{ 82 UpHost: "mock.upload.io", 83 }) 84 if err == nil { 85 t.Fatalf("TestFormUploaderWithInvalidUpHost should error, %s", err) 86 } 87 if !strings.Contains(err.Error(), "lookup mock.upload.io: no such host") { 88 t.Fatalf("TestFormUploaderWithInvalidUpHost should use mock host, %s", err) 89 } 90 } 91 92 func TestFormUploadPutFile(t *testing.T) { 93 var putRet PutRet 94 ctx := context.TODO() 95 96 // prepare file for test uploading 97 testLocalFile, err := os.CreateTemp("", "TestFormUploadPutFile") 98 if err != nil { 99 t.Fatalf("os.CreateTemp file failed, err: %v", err) 100 } 101 defer os.Remove(testLocalFile.Name()) 102 103 r := rand.New(rand.NewSource(time.Now().UnixNano())) 104 _, err = io.CopyN(testLocalFile, r, 10*1024*1024) 105 if err != nil { 106 t.Fatalf("os.CreateTemp file write failed, err: %v", err) 107 } 108 _, err = testLocalFile.Seek(0, io.SeekCurrent) 109 if err != nil { 110 t.Fatalf("os.CreateTemp file seek failed, err: %v", err) 111 } 112 113 putPolicy := PutPolicy{ 114 Scope: testBucket, 115 DeleteAfterDays: 7, 116 } 117 upToken := putPolicy.UploadToken(mac) 118 upHosts := []string{testUpHost, "https://" + testUpHost, ""} 119 for _, upHost := range upHosts { 120 testKey := fmt.Sprintf("testPutFileKey_%d", r.Int()) 121 122 err = formUploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), &PutExtra{ 123 UpHost: upHost, 124 }) 125 if err != nil { 126 t.Fatalf("FormUploader#PutFile() error, %s", err) 127 } 128 t.Logf("Key: %s, Hash:%s", putRet.Key, putRet.Hash) 129 } 130 } 131 132 func TestFormUploadTrafficLimit(t *testing.T) { 133 var putRet PutRet 134 ctx := context.TODO() 135 136 testLocalFile, err := os.CreateTemp("", "TestFormUploadPutFile") 137 if err != nil { 138 t.Fatalf("os.CreateTemp file failed, err: %v", err) 139 } 140 defer os.Remove(testLocalFile.Name()) 141 142 putPolicy := PutPolicy{ 143 Scope: testBucket, 144 DeleteAfterDays: 7, 145 TrafficLimit: 100 * 1024 * 8, // 限速 100KB/s,范围:100KB/s - 100MB/s 146 } 147 upToken := putPolicy.UploadToken(mac) 148 r := rand.New(rand.NewSource(time.Now().UnixNano())) 149 testKey := fmt.Sprintf("testPutFileKey_%d", r.Int()) 150 151 st := time.Now().UnixMilli() 152 153 data := make([]byte, 1024*500) 154 err = formUploader.Put(ctx, &putRet, upToken, testKey, bytes.NewReader(data), int64(len(data)), &PutExtra{}) 155 if err != nil { 156 t.Fatalf("FormUploader#PutFile() error, %s", err) 157 } 158 t.Logf("Key: %s, Hash:%s", putRet.Key, putRet.Hash) 159 160 et := time.Now().UnixMilli() 161 162 duration := et - st 163 // 限速后,至少需要 4s 164 if duration < 5000 { 165 // t.Fatal("TestFormUploadTrafficLimit() error, TrafficLimit invalid") 166 } 167 } 168 169 func TestFormUploadPutFileWithBackup(t *testing.T) { 170 var putRet PutRet 171 ctx := context.TODO() 172 putPolicy := PutPolicy{ 173 Scope: testBucket, 174 DeleteAfterDays: 7, 175 } 176 177 // prepare file for test uploading 178 testLocalFile, err := os.CreateTemp("", "TestFormUploadPutFileWithBackup") 179 if err != nil { 180 t.Fatalf("os.CreateTemp file failed, err: %v", err) 181 } 182 defer os.Remove(testLocalFile.Name()) 183 184 region, err := GetRegion(mac.AccessKey, testBucket) 185 if err != nil { 186 t.Fatal("get region error:", err) 187 } 188 189 // mock host 190 customizedHost := []string{"mock.qiniu.com"} 191 customizedHost = append(customizedHost, region.SrcUpHosts...) 192 region.SrcUpHosts = customizedHost 193 cfg := Config{} 194 cfg.UseCdnDomains = false 195 cfg.Region = region 196 uploader := NewFormUploader(&cfg) 197 r := rand.New(rand.NewSource(time.Now().UnixNano())) 198 testKey := fmt.Sprintf("testPutFileKey_%d", r.Int()) 199 200 upToken := putPolicy.UploadToken(mac) 201 err = uploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), &PutExtra{}) 202 if err != nil { 203 t.Fatalf("FormUploader#PutFile() error, %s", err) 204 } 205 t.Logf("Key: %s, Hash:%s", putRet.Key, putRet.Hash) 206 207 // cancel 208 customizedHost = []string{} 209 customizedHost = append(customizedHost, region.SrcUpHosts...) 210 region.SrcUpHosts = customizedHost 211 cfg = Config{} 212 cfg.UseCdnDomains = false 213 cfg.Region = region 214 uploader = NewFormUploader(&cfg) 215 r = rand.New(rand.NewSource(time.Now().UnixNano())) 216 testKey = fmt.Sprintf("testPutFileKey_%d", r.Int()) 217 218 ctx, cancel := context.WithCancel(context.TODO()) 219 go func() { 220 time.Sleep(time.Millisecond * 100) 221 cancel() 222 }() 223 upToken = putPolicy.UploadToken(mac) 224 err = uploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), &PutExtra{}) 225 if err == nil || !strings.Contains(err.Error(), "canceled") { 226 t.Fatal("FormUploader#PutFile() cancel error:", err) 227 } 228 }