github.com/qiniu/go-sdk/v7@v7.27.0/storage/upload_manager_uplog_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package storage 5 6 import ( 7 "context" 8 "encoding/json" 9 "os" 10 "path/filepath" 11 "strings" 12 "testing" 13 "time" 14 15 clientV1 "github.com/qiniu/go-sdk/v7/client" 16 "github.com/qiniu/go-sdk/v7/storagev2/uplog" 17 ) 18 19 func TestUploadManagerUplogForm(t *testing.T) { 20 tmpDir, err := os.MkdirTemp("", "test-uplog-*") 21 if err != nil { 22 t.Fatal(err) 23 } 24 defer os.RemoveAll(tmpDir) 25 26 uplog.SetUplogFileBufferDirPath(tmpDir) 27 defer uplog.SetUplogFileBufferDirPath("") 28 29 if err = uplog.FlushBuffer(); err != nil { 30 t.Fatal(err) 31 } 32 33 writeFileBufferInterval := uplog.GetWriteFileBufferInterval() 34 uplog.SetFlushFileBufferInterval(1 * time.Hour) 35 defer uplog.SetFlushFileBufferInterval(writeFileBufferInterval) 36 37 clientV1.DebugMode = true 38 defer func() { 39 clientV1.DebugMode = false 40 }() 41 42 data := []byte("hello, 七牛!!!") 43 dataLen := int64(len(data)) 44 45 tempFile, err := os.CreateTemp("", "TestUploadManagerFormPut-*") 46 if err != nil { 47 t.Fatalf("create temp file error:%v", err) 48 } 49 defer os.Remove(tempFile.Name()) 50 defer tempFile.Close() 51 52 tempFile.Write(data) 53 54 uploadManager := getUploadManagerV2([]string{"mock03.qiniu.com", "mock04.qiniu.com"}) 55 var ret Ret 56 57 // 上传 file 58 source, err := NewUploadSourceFile(tempFile.Name()) 59 if err != nil { 60 t.Fatalf("upload source file error:%v", err) 61 } 62 err = uploadManager.Put(context.Background(), &ret, getUploadToken(), nil, source, &UploadExtra{ 63 TryTimes: 1, 64 }) 65 if err != nil { 66 t.Fatalf("form upload file error:%v", err) 67 } 68 if len(ret.Key) == 0 || len(ret.Hash) == 0 { 69 t.Fatal("form upload file error, key or hash is empty") 70 } 71 72 time.Sleep(1 * time.Second) 73 74 uplogFile, err := os.Open(filepath.Join(tmpDir, "uplog_v4_01.buffer")) 75 if err != nil { 76 t.Fatalf("uplog file error:%v", err) 77 } 78 defer uplogFile.Close() 79 80 uplogFileJsonDecoder := json.NewDecoder(uplogFile) 81 uplogs := make([]map[string]interface{}, 0, 4) 82 for { 83 var uplog map[string]interface{} 84 if err := uplogFileJsonDecoder.Decode(&uplog); err != nil { 85 break 86 } 87 uplogs = append(uplogs, uplog) 88 } 89 if len(uplogs) != 4 { 90 t.Fatalf("unexpected uplog count:%v", len(uplogs)) 91 } 92 if uplogs[0]["log_type"] != "request" { 93 t.Fatalf("unexpected uplog log_type:%v", uplogs[0]["log_type"]) 94 } 95 if uplogs[0]["api_type"] != "kodo" { 96 t.Fatalf("unexpected uplog api_type:%v", uplogs[0]["api_type"]) 97 } 98 if uplogs[0]["api_name"] != "postObject" { 99 t.Fatalf("unexpected uplog api_name:%v", uplogs[0]["api_name"]) 100 } 101 if uplogs[0]["error_type"] != "unknown_host" { 102 t.Fatalf("unexpected uplog error_type:%v", uplogs[0]["error_type"]) 103 } 104 if uplogs[0]["host"] != "mock03.qiniu.com" { 105 t.Fatalf("unexpected uplog host:%v", uplogs[0]["host"]) 106 } 107 if uplogs[0]["path"] != "/" { 108 t.Fatalf("unexpected uplog path:%v", uplogs[0]["path"]) 109 } 110 if uplogs[0]["method"] != "POST" { 111 t.Fatalf("unexpected uplog method:%v", uplogs[0]["method"]) 112 } 113 if uplogs[0]["target_bucket"] != testBucket { 114 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[0]["target_bucket"]) 115 } 116 if uplogs[1]["log_type"] != "request" { 117 t.Fatalf("unexpected uplog log_type:%v", uplogs[1]["log_type"]) 118 } 119 if uplogs[1]["api_type"] != "kodo" { 120 t.Fatalf("unexpected uplog api_type:%v", uplogs[1]["api_type"]) 121 } 122 if uplogs[1]["api_name"] != "postObject" { 123 t.Fatalf("unexpected uplog api_name:%v", uplogs[1]["api_name"]) 124 } 125 if uplogs[1]["error_type"] != "unknown_host" { 126 t.Fatalf("unexpected uplog error_type:%v", uplogs[1]["error_type"]) 127 } 128 if uplogs[1]["host"] != "mock04.qiniu.com" { 129 t.Fatalf("unexpected uplog host:%v", uplogs[1]["host"]) 130 } 131 if uplogs[1]["target_bucket"] != testBucket { 132 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[1]["target_bucket"]) 133 } 134 if uplogs[1]["path"] != "/" { 135 t.Fatalf("unexpected uplog path:%v", uplogs[1]["path"]) 136 } 137 if uplogs[1]["method"] != "POST" { 138 t.Fatalf("unexpected uplog method:%v", uplogs[1]["method"]) 139 } 140 if uplogs[2]["log_type"] != "request" { 141 t.Fatalf("unexpected uplog log_type:%v", uplogs[2]["log_type"]) 142 } 143 if uplogs[2]["api_type"] != "kodo" { 144 t.Fatalf("unexpected uplog api_type:%v", uplogs[2]["api_type"]) 145 } 146 if uplogs[2]["api_name"] != "postObject" { 147 t.Fatalf("unexpected uplog api_name:%v", uplogs[2]["api_name"]) 148 } 149 if uplogs[2]["error_type"] != nil { 150 t.Fatalf("unexpected uplog error_type:%v", uplogs[2]["error_type"]) 151 } 152 if uplogs[2]["port"] != float64(443) { 153 t.Fatalf("unexpected uplog port:%v", uplogs[2]["port"]) 154 } 155 if uplogs[2]["remote_ip"] == nil { 156 t.Fatalf("unexpected uplog remote_ip:%v", uplogs[2]["remote_ip"]) 157 } 158 if uplogs[2]["target_bucket"] != testBucket { 159 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[2]["target_bucket"]) 160 } 161 if uplogs[2]["path"] != "/" { 162 t.Fatalf("unexpected uplog path:%v", uplogs[2]["path"]) 163 } 164 if uplogs[2]["method"] != "POST" { 165 t.Fatalf("unexpected uplog method:%v", uplogs[2]["method"]) 166 } 167 if uplogs[2]["status_code"] != float64(200) { 168 t.Fatalf("unexpected uplog status_code:%v", uplogs[2]["status_code"]) 169 } 170 if uplogs[3]["log_type"] != "quality" { 171 t.Fatalf("unexpected uplog log_type:%v", uplogs[3]["log_type"]) 172 } 173 if uplogs[3]["result"] != "ok" { 174 t.Fatalf("unexpected uplog result:%v", uplogs[3]["result"]) 175 } 176 if uplogs[3]["up_type"] != "form" { 177 t.Fatalf("unexpected uplog up_type:%v", uplogs[3]["up_type"]) 178 } 179 if uplogs[3]["regions_count"] != float64(2) { 180 t.Fatalf("unexpected uplog regions_count:%v", uplogs[3]["regions_count"]) 181 } 182 if uplogs[3]["api_type"] != "kodo" { 183 t.Fatalf("unexpected uplog api_type:%v", uplogs[3]["api_type"]) 184 } 185 if uplogs[3]["file_size"] != float64(dataLen) { 186 t.Fatalf("unexpected uplog file_size:%v", uplogs[3]["file_size"]) 187 } 188 if uplogs[3]["target_bucket"] != testBucket { 189 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[3]["target_bucket"]) 190 } 191 } 192 193 func TestUploadManagerUplogResumableV1(t *testing.T) { 194 tmpDir, err := os.MkdirTemp("", "test-uplog-*") 195 if err != nil { 196 t.Fatal(err) 197 } 198 defer os.RemoveAll(tmpDir) 199 200 uplog.SetUplogFileBufferDirPath(tmpDir) 201 defer uplog.SetUplogFileBufferDirPath("") 202 203 if err = uplog.FlushBuffer(); err != nil { 204 t.Fatal(err) 205 } 206 207 writeFileBufferInterval := uplog.GetWriteFileBufferInterval() 208 uplog.SetFlushFileBufferInterval(1 * time.Hour) 209 defer uplog.SetFlushFileBufferInterval(writeFileBufferInterval) 210 211 clientV1.DebugMode = true 212 defer func() { 213 clientV1.DebugMode = false 214 }() 215 216 length := 1024 * 1024 * 4 217 data := make([]byte, length, length) 218 data[0] = 8 219 data[length-1] = 8 220 tempFile, err := os.CreateTemp("", "TestUploadManagerResumeV1Upload-*") 221 if err != nil { 222 t.Fatalf("create temp file error:%v", err) 223 } 224 defer func() { 225 tempFile.Close() 226 os.Remove(tempFile.Name()) 227 }() 228 tempFile.Write(data) 229 230 uploadManager := getUploadManagerV2([]string{"mock05.qiniu.com", "mock06.qiniu.com"}) 231 var ret Ret 232 233 // 上传 file 234 source, err := NewUploadSourceFile(tempFile.Name()) 235 if err != nil { 236 t.Fatalf("upload source file error:%v", err) 237 } 238 err = uploadManager.Put(context.Background(), &ret, getUploadToken(), nil, source, &UploadExtra{ 239 TryTimes: 1, 240 UploadResumeVersion: UploadResumeV1, 241 UploadThreshold: 1024 * 1024 * 2, 242 PartSize: 1024 * 1024, 243 }) 244 if err != nil { 245 t.Fatalf("form upload file error:%v", err) 246 } 247 if len(ret.Key) == 0 || len(ret.Hash) == 0 { 248 t.Fatal("form upload file error, key or hash is empty") 249 } 250 251 time.Sleep(1 * time.Second) 252 253 uplogFile, err := os.Open(filepath.Join(tmpDir, "uplog_v4_01.buffer")) 254 if err != nil { 255 t.Fatalf("uplog file error:%v", err) 256 } 257 defer uplogFile.Close() 258 259 uplogFileJsonDecoder := json.NewDecoder(uplogFile) 260 uplogs := make([]map[string]interface{}, 0, 12) 261 for { 262 var uplog map[string]interface{} 263 if err := uplogFileJsonDecoder.Decode(&uplog); err != nil { 264 break 265 } 266 uplogs = append(uplogs, uplog) 267 } 268 if len(uplogs) != 10 { 269 t.Fatalf("unexpected uplog count:%v", len(uplogs)) 270 } 271 if uplogs[0]["log_type"] != "request" { 272 t.Fatalf("unexpected uplog log_type:%v", uplogs[0]["log_type"]) 273 } 274 if uplogs[0]["api_type"] != "kodo" { 275 t.Fatalf("unexpected uplog api_type:%v", uplogs[0]["api_type"]) 276 } 277 if uplogs[0]["api_name"] != "resumableUploadV1MakeBlock" { 278 t.Fatalf("unexpected uplog api_name:%v", uplogs[0]["api_name"]) 279 } 280 if uplogs[0]["error_type"] != "unknown_host" { 281 t.Fatalf("unexpected uplog error_type:%v", uplogs[0]["error_type"]) 282 } 283 if uplogs[0]["host"] != "mock05.qiniu.com" { 284 t.Fatalf("unexpected uplog host:%v", uplogs[0]["host"]) 285 } 286 if uplogs[0]["path"] != "/mkblk/4194304" { 287 t.Fatalf("unexpected uplog path:%v", uplogs[0]["path"]) 288 } 289 if uplogs[0]["method"] != "POST" { 290 t.Fatalf("unexpected uplog method:%v", uplogs[0]["method"]) 291 } 292 if uplogs[0]["target_bucket"] != testBucket { 293 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[0]["target_bucket"]) 294 } 295 if uplogs[1]["log_type"] != "request" { 296 t.Fatalf("unexpected uplog log_type:%v", uplogs[1]["log_type"]) 297 } 298 if uplogs[1]["api_type"] != "kodo" { 299 t.Fatalf("unexpected uplog api_type:%v", uplogs[1]["api_type"]) 300 } 301 if uplogs[1]["api_name"] != "resumableUploadV1MakeBlock" { 302 t.Fatalf("unexpected uplog api_name:%v", uplogs[1]["api_name"]) 303 } 304 if uplogs[1]["error_type"] != "unknown_host" { 305 t.Fatalf("unexpected uplog error_type:%v", uplogs[1]["error_type"]) 306 } 307 if uplogs[1]["host"] != "mock06.qiniu.com" { 308 t.Fatalf("unexpected uplog host:%v", uplogs[1]["host"]) 309 } 310 if uplogs[1]["path"] != "/mkblk/4194304" { 311 t.Fatalf("unexpected uplog path:%v", uplogs[1]["path"]) 312 } 313 if uplogs[1]["method"] != "POST" { 314 t.Fatalf("unexpected uplog method:%v", uplogs[1]["method"]) 315 } 316 if uplogs[1]["target_bucket"] != testBucket { 317 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[1]["target_bucket"]) 318 } 319 if uplogs[2]["log_type"] != "block" { 320 t.Fatalf("unexpected uplog log_type:%v", uplogs[2]["log_type"]) 321 } 322 if uplogs[2]["up_api_version"] != float64(1) { 323 t.Fatalf("unexpected uplog up_api_version:%v", uplogs[2]["up_api_version"]) 324 } 325 if uplogs[2]["requests_count"] != float64(2) { 326 t.Fatalf("unexpected uplog requests_count:%v", uplogs[2]["requests_count"]) 327 } 328 if uplogs[2]["error_type"] != "unknown_host" { 329 t.Fatalf("unexpected uplog error_type:%v", uplogs[2]["error_type"]) 330 } 331 if uplogs[2]["api_type"] != "kodo" { 332 t.Fatalf("unexpected uplog api_type:%v", uplogs[2]["api_type"]) 333 } 334 if uplogs[2]["file_size"] != float64(length) { 335 t.Fatalf("unexpected uplog file_size:%v", uplogs[2]["file_size"]) 336 } 337 if uplogs[2]["target_bucket"] != testBucket { 338 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[2]["target_bucket"]) 339 } 340 if uplogs[3]["log_type"] != "request" { 341 t.Fatalf("unexpected uplog log_type:%v", uplogs[3]["log_type"]) 342 } 343 if uplogs[3]["api_type"] != "kodo" { 344 t.Fatalf("unexpected uplog api_type:%v", uplogs[3]["api_type"]) 345 } 346 if uplogs[3]["api_name"] != "resumableUploadV1MakeBlock" { 347 t.Fatalf("unexpected uplog api_name:%v", uplogs[3]["api_name"]) 348 } 349 if uplogs[3]["error_type"] != nil { 350 t.Fatalf("unexpected uplog error_type:%v", uplogs[3]["error_type"]) 351 } 352 if uplogs[3]["port"] != float64(443) { 353 t.Fatalf("unexpected uplog port:%v", uplogs[3]["port"]) 354 } 355 if uplogs[3]["remote_ip"] == nil { 356 t.Fatalf("unexpected uplog remote_ip:%v", uplogs[3]["remote_ip"]) 357 } 358 if uplogs[3]["target_bucket"] != testBucket { 359 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[3]["target_bucket"]) 360 } 361 if uplogs[3]["path"] != "/mkblk/4194304" { 362 t.Fatalf("unexpected uplog path:%v", uplogs[3]["path"]) 363 } 364 if uplogs[3]["method"] != "POST" { 365 t.Fatalf("unexpected uplog method:%v", uplogs[3]["method"]) 366 } 367 if uplogs[3]["status_code"] != float64(200) { 368 t.Fatalf("unexpected uplog status_code:%v", uplogs[3]["status_code"]) 369 } 370 if uplogs[3]["bytes_sent"] != float64(1024*1024) { 371 t.Fatalf("unexpected uplog bytes_sent:%v", uplogs[3]["bytes_sent"]) 372 } 373 for i := 4; i < 7; i++ { 374 if uplogs[i]["log_type"] != "request" { 375 t.Fatalf("unexpected uplog log_type:%v", uplogs[i]["log_type"]) 376 } 377 if uplogs[i]["api_type"] != "kodo" { 378 t.Fatalf("unexpected uplog api_type:%v", uplogs[i]["api_type"]) 379 } 380 if uplogs[i]["api_name"] != "resumableUploadV1Bput" { 381 t.Fatalf("unexpected uplog api_name:%v", uplogs[i]["api_name"]) 382 } 383 if uplogs[i]["error_type"] != nil { 384 t.Fatalf("unexpected uplog error_type:%v", uplogs[i]["error_type"]) 385 } 386 if uplogs[i]["port"] != float64(443) { 387 t.Fatalf("unexpected uplog port:%v", uplogs[i]["port"]) 388 } 389 if uplogs[i]["remote_ip"] == nil { 390 t.Fatalf("unexpected uplog remote_ip:%v", uplogs[i]["remote_ip"]) 391 } 392 if uplogs[i]["target_bucket"] != testBucket { 393 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[i]["target_bucket"]) 394 } 395 if !strings.HasPrefix(uplogs[i]["path"].(string), "/bput/") { 396 t.Fatalf("unexpected uplog path:%v", uplogs[i]["path"]) 397 } 398 if uplogs[i]["method"] != "POST" { 399 t.Fatalf("unexpected uplog method:%v", uplogs[i]["method"]) 400 } 401 if uplogs[i]["status_code"] != float64(200) { 402 t.Fatalf("unexpected uplog status_code:%v", uplogs[i]["status_code"]) 403 } 404 if uplogs[i]["bytes_sent"] != float64(1024*1024) { 405 t.Fatalf("unexpected uplog bytes_sent:%v", uplogs[i]["bytes_sent"]) 406 } 407 } 408 if uplogs[7]["api_type"] != "kodo" { 409 t.Fatalf("unexpected uplog api_type:%v", uplogs[7]["api_type"]) 410 } 411 if uplogs[7]["api_name"] != "resumableUploadV1MakeFile" { 412 t.Fatalf("unexpected uplog api_name:%v", uplogs[7]["api_name"]) 413 } 414 if uplogs[7]["error_type"] != nil { 415 t.Fatalf("unexpected uplog error_type:%v", uplogs[7]["error_type"]) 416 } 417 if uplogs[7]["port"] != float64(443) { 418 t.Fatalf("unexpected uplog port:%v", uplogs[7]["port"]) 419 } 420 if uplogs[7]["remote_ip"] == nil { 421 t.Fatalf("unexpected uplog remote_ip:%v", uplogs[7]["remote_ip"]) 422 } 423 if uplogs[7]["target_bucket"] != testBucket { 424 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[7]["target_bucket"]) 425 } 426 if uplogs[7]["path"] != "/mkfile/4194304" { 427 t.Fatalf("unexpected uplog path:%v", uplogs[7]["path"]) 428 } 429 if uplogs[7]["method"] != "POST" { 430 t.Fatalf("unexpected uplog method:%v", uplogs[7]["method"]) 431 } 432 if uplogs[7]["status_code"] != float64(200) { 433 t.Fatalf("unexpected uplog status_code:%v", uplogs[7]["status_code"]) 434 } 435 if uplogs[8]["log_type"] != "block" { 436 t.Fatalf("unexpected uplog log_type:%v", uplogs[8]["log_type"]) 437 } 438 if uplogs[8]["up_api_version"] != float64(1) { 439 t.Fatalf("unexpected uplog up_api_version:%v", uplogs[8]["up_api_version"]) 440 } 441 if uplogs[8]["requests_count"] != float64(5) { 442 t.Fatalf("unexpected uplog requests_count:%v", uplogs[8]["requests_count"]) 443 } 444 if uplogs[8]["error_type"] != nil { 445 t.Fatalf("unexpected uplog error_type:%v", uplogs[8]["error_type"]) 446 } 447 if uplogs[8]["api_type"] != "kodo" { 448 t.Fatalf("unexpected uplog api_type:%v", uplogs[8]["api_type"]) 449 } 450 if uplogs[8]["file_size"] != float64(length) { 451 t.Fatalf("unexpected uplog file_size:%v", uplogs[8]["file_size"]) 452 } 453 if uplogs[8]["target_bucket"] != testBucket { 454 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[8]["target_bucket"]) 455 } 456 if uplogs[9]["log_type"] != "quality" { 457 t.Fatalf("unexpected uplog log_type:%v", uplogs[9]["log_type"]) 458 } 459 if uplogs[9]["requests_count"] != float64(7) { 460 t.Fatalf("unexpected uplog requests_count:%v", uplogs[9]["requests_count"]) 461 } 462 if uplogs[9]["result"] != "ok" { 463 t.Fatalf("unexpected uplog result:%v", uplogs[9]["result"]) 464 } 465 if uplogs[9]["up_type"] != "resumable_v1" { 466 t.Fatalf("unexpected uplog up_type:%v", uplogs[9]["up_type"]) 467 } 468 if uplogs[9]["regions_count"] != float64(2) { 469 t.Fatalf("unexpected uplog regions_count:%v", uplogs[9]["regions_count"]) 470 } 471 if uplogs[9]["api_type"] != "kodo" { 472 t.Fatalf("unexpected uplog api_type:%v", uplogs[9]["api_type"]) 473 } 474 if uplogs[9]["file_size"] != float64(length) { 475 t.Fatalf("unexpected uplog file_size:%v", uplogs[9]["file_size"]) 476 } 477 if uplogs[9]["target_bucket"] != testBucket { 478 t.Fatalf("unexpected uplog target_bucket:%v", uplogs[9]["target_bucket"]) 479 } 480 }