@@ -2,6 +2,7 @@ package oss
22
33import (
44 "bytes"
5+ "context"
56 "crypto/hmac"
67 "crypto/sha1"
78 "crypto/tls"
@@ -2279,6 +2280,182 @@ func (s *OssBucketSuite) TestGetConfig(c *C) {
22792280 c .Assert (bucket .GetConfig ().IsEnableMD5 , Equals , false )
22802281}
22812282
2283+ func (s * OssBucketSuite ) TestForcePathStyle (c * C ) {
2284+ url , err := url .ParseRequestURI (endpoint )
2285+ client , err := New (endpoint , accessID , accessKey , ForcePathStyle (true ))
2286+ c .Assert (err , IsNil )
2287+
2288+ _ , err = client .GetBucketInfo (bucketName )
2289+ c .Assert (err , NotNil )
2290+ c .Assert (err .(ServiceError ).Code , Equals , "SecondLevelDomainForbidden" )
2291+ c .Assert (err .(ServiceError ).HostID , Equals , url .Host )
2292+
2293+ bucket , err := client .Bucket (bucketName )
2294+ c .Assert (err , IsNil )
2295+
2296+ c .Assert (bucket .GetConfig ().IsPathStyle , Equals , true )
2297+
2298+ objectName := "demo.txt"
2299+
2300+ err = bucket .PutObject (objectName , strings .NewReader ("hi oss" ))
2301+ c .Assert (err , NotNil )
2302+ c .Assert (err .(ServiceError ).Code , Equals , "SecondLevelDomainForbidden" )
2303+
2304+ str , err := bucket .SignURL (objectName , HTTPPut , 3600 )
2305+ c .Assert (err , IsNil )
2306+ strUrl := endpoint + "/" + bucketName + "/" + objectName
2307+ c .Assert (strings .Contains (str , strUrl ), Equals , true )
2308+ }
2309+
2310+ func (s * OssBucketSuite ) TestUseCname (c * C ) {
2311+ url , err := url .ParseRequestURI (endpoint )
2312+ c .Assert (err , IsNil )
2313+ cnameEndpoint := bucketName + "." + url .Host
2314+ client , err := New (cnameEndpoint , accessID , accessKey , UseCname (true ))
2315+ c .Assert (err , IsNil )
2316+
2317+ info , err := client .GetBucketInfo (bucketName )
2318+
2319+ c .Assert (err , IsNil )
2320+ c .Assert (info .BucketInfo .Name , Equals , bucketName )
2321+
2322+ client , err = New (cnameEndpoint , accessID , accessKey )
2323+ _ , err = client .GetBucketInfo (bucketName )
2324+ c .Assert (err , NotNil )
2325+ c .Assert (err .(ServiceError ).HostID , Equals , bucketName + "." + cnameEndpoint )
2326+ }
2327+
2328+ func (s * OssBucketSuite ) TestContextTimeout (c * C ) {
2329+ client , err := New (endpoint , accessID , accessKey )
2330+ c .Assert (err , IsNil )
2331+
2332+ bucket , err := client .Bucket (bucketName )
2333+ c .Assert (err , IsNil )
2334+
2335+ objectName := objectNamePrefix + RandStr (8 )
2336+ objectValue := "红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月满西楼。"
2337+
2338+ bucketNameDest := bucketNamePrefix + RandLowStr (8 )
2339+ c .Assert (err , IsNil )
2340+
2341+ objectNameDest := objectName + RandLowStr (5 )
2342+
2343+ // Put
2344+ ctx := context .Background ()
2345+ ctx , cancel := context .WithTimeout (ctx , 1 * time .Nanosecond )
2346+ defer cancel ()
2347+ err = bucket .PutObject (objectName , strings .NewReader (objectValue ), WithContext (ctx ))
2348+ c .Assert (err , NotNil )
2349+ c .Assert (strings .Contains (err .Error (), "context deadline exceeded" ), Equals , true )
2350+
2351+ // Get not exist object
2352+ _ , err = bucket .GetObject (objectName )
2353+ c .Assert (err , NotNil )
2354+ c .Assert (err .(ServiceError ).StatusCode , Equals , 404 )
2355+
2356+ err = s .bucket .PutObject (objectName , strings .NewReader (objectValue ))
2357+ c .Assert (err , IsNil )
2358+
2359+ // Get
2360+ _ , err = bucket .GetObject (objectName , WithContext (ctx ))
2361+ c .Assert (err , NotNil )
2362+ c .Assert (strings .Contains (err .Error (), "context deadline exceeded" ), Equals , true )
2363+
2364+ // CopyObjectTo
2365+ _ , err = bucket .CopyObjectTo (bucketNameDest , objectNameDest , objectName , WithContext (ctx ))
2366+ c .Assert (err , NotNil )
2367+ c .Assert (strings .Contains (err .Error (), "context deadline exceeded" ), Equals , true )
2368+ // Delete
2369+ err = s .bucket .DeleteObject (objectName )
2370+ c .Assert (err , IsNil )
2371+
2372+ var nextPos int64
2373+ // String append
2374+ nextPos , err = s .bucket .AppendObject (objectName , strings .NewReader ("红藕香残玉簟秋。轻解罗裳,独上兰舟。" ), nextPos , WithContext (ctx ))
2375+ c .Assert (err , NotNil )
2376+
2377+ // Put with URL
2378+ signedURL , err := bucket .SignURL (objectName , HTTPPut , 3600 )
2379+ c .Assert (err , IsNil )
2380+
2381+ err = bucket .PutObjectWithURL (signedURL , strings .NewReader (objectValue ), WithContext (ctx ))
2382+ c .Assert (err , NotNil )
2383+ c .Assert (strings .Contains (err .Error (), "context deadline exceeded" ), Equals , true )
2384+
2385+ // Get not exist object
2386+ _ , err = bucket .GetObject (objectName )
2387+ c .Assert (err , NotNil )
2388+ c .Assert (err .(ServiceError ).StatusCode , Equals , 404 )
2389+
2390+ err = s .bucket .PutObject (objectName , strings .NewReader (objectValue ))
2391+ c .Assert (err , IsNil )
2392+
2393+ // Get with URL
2394+ signedURL , err = bucket .SignURL (objectName , HTTPGet , 3600 )
2395+ c .Assert (err , IsNil )
2396+
2397+ _ , err = bucket .GetObjectWithURL (signedURL , WithContext (ctx ))
2398+ c .Assert (err , NotNil )
2399+ c .Assert (strings .Contains (err .Error (), "context deadline exceeded" ), Equals , true )
2400+
2401+ err = s .bucket .DeleteObject (objectName )
2402+ c .Assert (err , IsNil )
2403+
2404+ content := RandStr (1024 * 1024 )
2405+ var fileName = "test-file-" + RandStr (8 )
2406+ CreateFile (fileName , content , c )
2407+
2408+ fd , err := os .Open (fileName )
2409+ c .Assert (err , IsNil )
2410+ defer fd .Close ()
2411+
2412+ err = bucket .PutObjectFromFile (objectName , fileName , WithContext (ctx ))
2413+ c .Assert (err , NotNil )
2414+ c .Assert (strings .Contains (err .Error (), "context deadline exceeded" ), Equals , true )
2415+
2416+ os .Remove (fileName )
2417+ }
2418+
2419+ func (s * OssBucketSuite ) TestContextTimeoutBigFile (c * C ) {
2420+ client , err := New (endpoint , accessID , accessKey )
2421+ c .Assert (err , IsNil )
2422+
2423+ bucket , err := client .Bucket (bucketName )
2424+ c .Assert (err , IsNil )
2425+
2426+ objectName := objectNamePrefix + RandStr (8 )
2427+
2428+ //big file
2429+ content := RandStr (5 * 1024 * 1024 )
2430+ var fileName = "test-file-" + RandStr (8 )
2431+ CreateFile (fileName , content , c )
2432+
2433+ fd , err := os .Open (fileName )
2434+ c .Assert (err , IsNil )
2435+ defer fd .Close ()
2436+
2437+ ctx , cancel := context .WithTimeout (context .Background (), 100 * time .Millisecond )
2438+ defer cancel ()
2439+ objectNameBigfile := objectName + "-bigfile"
2440+ err = bucket .PutObjectFromFile (objectNameBigfile , fileName , WithContext (ctx ))
2441+ if ctx != nil {
2442+ select {
2443+ case <- ctx .Done ():
2444+ c .Assert (err , NotNil )
2445+ c .Assert (strings .Contains (err .Error (), "context deadline exceeded" ), Equals , true )
2446+ default :
2447+ c .Fail ()
2448+ }
2449+ }
2450+
2451+ // Get not exist object
2452+ _ , err = bucket .GetObject (objectNameBigfile )
2453+ c .Assert (err , NotNil )
2454+ c .Assert (err .(ServiceError ).StatusCode , Equals , 404 )
2455+
2456+ os .Remove (fileName )
2457+ }
2458+
22822459func (s * OssBucketSuite ) TestSTSToken (c * C ) {
22832460 objectName := objectNamePrefix + RandStr (8 )
22842461 objectValue := "红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月满西楼。"
@@ -2648,6 +2825,37 @@ func (s *OssBucketSuite) TestProcessObject(c *C) {
26482825 c .Assert (err , NotNil )
26492826}
26502827
2828+ // TestAsyncProcessObject
2829+ func (s * OssBucketSuite ) TestAsyncProcessObject (c * C ) {
2830+ videoUrl := "https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/video.mp4?spm=a2c4g.64555.0.0.515675979u4B8w&file=video.mp4"
2831+ fileName := "video.mp4"
2832+ // 发起get请求
2833+ resp , err := http .Get (videoUrl )
2834+ c .Assert (err , IsNil )
2835+ defer resp .Body .Close ()
2836+
2837+ // 创建文件
2838+ file , err := os .Create (fileName )
2839+ c .Assert (err , IsNil )
2840+ defer file .Close ()
2841+ _ , err = io .Copy (file , resp .Body )
2842+ c .Assert (err , IsNil )
2843+
2844+ err = s .bucket .PutObjectFromFile ("demo.avi" , fileName )
2845+ c .Assert (err , IsNil )
2846+
2847+ sourceImageName := "demo.avi"
2848+ style := "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1"
2849+ targetObject := "demo"
2850+ process := fmt .Sprintf ("%s|sys/saveas,b_%v,o_%v" , style , strings .TrimRight (base64 .URLEncoding .EncodeToString ([]byte (bucketName )), "=" ), strings .TrimRight (base64 .URLEncoding .EncodeToString ([]byte (targetObject )), "=" ))
2851+ _ , err = s .bucket .AsyncProcessObject (sourceImageName , process )
2852+ c .Assert (err , NotNil )
2853+ c .Assert (err .(ServiceError ).Code , Equals , "Imm Client" )
2854+ c .Assert (strings .Contains (err .(ServiceError ).Message , "ResourceNotFound, The specified resource Attachment is not found" ), Equals , true )
2855+
2856+ os .Remove (fileName )
2857+ }
2858+
26512859// Private
26522860func CreateFileAndWrite (fileName string , data []byte ) error {
26532861 os .Remove (fileName )
0 commit comments