1- using NUnit . Framework ;
1+ using System ;
2+ using NUnit . Framework ;
23using Qiniu . Tests ;
34using Qiniu . Util ;
4- using System ;
5+
56namespace Qiniu . Storage . Tests
67{
78 [ TestFixture ]
89 public class PutPolicyTests : TestEnv
910 {
1011 [ Test ]
11- public void CreateUptokenTest ( )
12+ public void SimplePutPolicyTest ( )
1213 {
13- Mac mac = new Mac ( AccessKey , SecretKey ) ;
14- PutPolicy putPolicy = null ;
15- // 简单上传凭证
16- putPolicy = new PutPolicy ( ) ;
14+ PutPolicy putPolicy = new PutPolicy ( ) ;
1715 putPolicy . Scope = Bucket ;
18- string upToken = Auth . CreateUploadToken ( mac , putPolicy . ToJsonString ( ) ) ;
19- Console . WriteLine ( upToken ) ;
2016
21- // 自定义凭证有效期(示例2小时)
22- putPolicy = new PutPolicy ( ) ;
17+ string expectedScope = string . Format ( "\" scope\" :\" {0}\" " , Bucket ) ;
18+ string deadlineSubstring = DateTimeOffset . UtcNow . AddSeconds ( 3600 ) . ToUnixTimeSeconds ( ) . ToString ( ) ;
19+ // discard the precision to the second level
20+ deadlineSubstring = deadlineSubstring . Substring ( 0 , deadlineSubstring . Length - 1 ) ;
21+ string expectedDeadline = string . Format ( "\" deadline\" :{0}" , deadlineSubstring ) ;
22+ string actual = putPolicy . ToJsonString ( ) ;
23+
24+ Assert . That ( actual , Does . Contain ( expectedScope ) ) ;
25+ Assert . That ( actual , Does . Contain ( expectedDeadline ) ) ;
26+ }
27+
28+ [ Test ]
29+ public void InsertOnlyPutPolicyTest ( )
30+ {
31+ PutPolicy putPolicy = new PutPolicy ( ) ;
32+ putPolicy . Scope = String . Format ( "{0}:{1}" , Bucket , "key/of/file" ) ;
33+ putPolicy . InsertOnly = 1 ;
34+
35+ string expectedScope = String . Format ( "\" scope\" :\" {0}:{1}\" " , Bucket , "key/of/file" ) ;
36+ string expectedInsertOnly = "\" insertOnly\" :1" ;
37+ string actual = putPolicy . ToJsonString ( ) ;
38+
39+ Assert . That ( actual , Does . Contain ( expectedScope ) ) ;
40+ Assert . That ( actual , Does . Contain ( expectedInsertOnly ) ) ;
41+ }
42+
43+ [ Test ]
44+ public void IsPrefixalScopePutPolicyTest ( )
45+ {
46+ PutPolicy putPolicy = new PutPolicy ( ) ;
47+ putPolicy . Scope = String . Format ( "{0}:{1}" , Bucket , "key/of/prefix-" ) ;
48+ putPolicy . isPrefixalScope = 1 ;
49+
50+ string expectedScope = String . Format ( "\" scope\" :\" {0}:{1}\" " , Bucket , "key/of/prefix-" ) ;
51+ string expectedIsPrefixalScope = "\" isPrefixalScope\" :1" ;
52+ string actual = putPolicy . ToJsonString ( ) ;
53+
54+ Assert . That ( actual , Does . Contain ( expectedScope ) ) ;
55+ Assert . That ( actual , Does . Contain ( expectedIsPrefixalScope ) ) ;
56+ }
57+
58+ [ Test ]
59+ public void ExpiresPutPolicyTest ( )
60+ {
61+ PutPolicy putPolicy = new PutPolicy ( ) ;
2362 putPolicy . Scope = Bucket ;
2463 putPolicy . SetExpires ( 7200 ) ;
25- upToken = Auth . CreateUploadToken ( mac , putPolicy . ToJsonString ( ) ) ;
26- Console . WriteLine ( upToken ) ;
2764
28- // 覆盖上传凭证
29- putPolicy = new PutPolicy ( ) ;
65+ string deadlineSubstring = DateTimeOffset . UtcNow . AddSeconds ( 7200 ) . ToUnixTimeSeconds ( ) . ToString ( ) ;
66+ // discard the precision to the second level
67+ deadlineSubstring = deadlineSubstring . Substring ( 0 , deadlineSubstring . Length - 1 ) ;
68+ string expectedDeadline = string . Format ( "\" deadline\" :{0}" , deadlineSubstring ) ;
69+ string actual = putPolicy . ToJsonString ( ) ;
70+
71+ Assert . That ( actual , Does . Contain ( expectedDeadline ) ) ;
72+ }
73+
74+ [ Test ]
75+ public void ForceSavaKeyPutPolicyTest ( )
76+ {
77+ PutPolicy putPolicy = new PutPolicy ( ) ;
78+ putPolicy . Scope = Bucket ;
79+ putPolicy . ForceSaveKey = true ;
80+ putPolicy . SaveKey = "key/of/file" ;
81+
82+ string expectedForceSaveKey = "\" forceSaveKey\" :true" ;
83+ string expectedSaveKey = "\" saveKey\" :\" key/of/file\" " ;
84+ string actual = putPolicy . ToJsonString ( ) ;
85+
86+ Assert . That ( actual , Does . Contain ( expectedForceSaveKey ) ) ;
87+ Assert . That ( actual , Does . Contain ( expectedSaveKey ) ) ;
88+ }
89+
90+ [ Test ]
91+ public void OverwritePutPolicyTest ( )
92+ {
93+ PutPolicy putPolicy = new PutPolicy ( ) ;
3094 string keyToOverwrite = "qiniu.png" ;
3195 putPolicy . Scope = string . Format ( "{0}:{1}" , Bucket , keyToOverwrite ) ;
32- upToken = Auth . CreateUploadToken ( mac , putPolicy . ToJsonString ( ) ) ;
33- Console . WriteLine ( upToken ) ;
3496
35- // 自定义上传回复(非callback模式)凭证
36- putPolicy = new PutPolicy ( ) ;
97+ string expectedScope = String . Format ( "\" scope\" :\" {0}:{1}\" " , Bucket , keyToOverwrite ) ;
98+ string actual = putPolicy . ToJsonString ( ) ;
99+
100+ Assert . That ( actual , Does . Contain ( expectedScope ) ) ;
101+ }
102+
103+ [ Test ]
104+ public void CustomReturnBodyPutPolicyTest ( )
105+ {
106+ PutPolicy putPolicy = new PutPolicy ( ) ;
37107 putPolicy . Scope = Bucket ;
38108 putPolicy . ReturnBody = "{\" key\" :\" $(key)\" ,\" hash\" :\" $(etag)\" ,\" fsiz\" :$(fsize),\" bucket\" :\" $(bucket)\" ,\" name\" :\" $(x:name)\" }" ;
39- upToken = Auth . CreateUploadToken ( mac , putPolicy . ToJsonString ( ) ) ;
40- Console . WriteLine ( upToken ) ;
41109
42- // 带回调业务服务器的凭证(application/json)
43- putPolicy = new PutPolicy ( ) ;
110+ string expectedReturnBody = "\" returnBody\" :\" {\\ \" key\\ \" :\\ \" $(key)\\ \" ,\\ \" hash\\ \" :\\ \" $(etag)\\ \" ,\\ \" fsiz\\ \" :$(fsize),\\ \" bucket\\ \" :\\ \" $(bucket)\\ \" ,\\ \" name\\ \" :\\ \" $(x:name)\\ \" }\" " ;
111+ string actual = putPolicy . ToJsonString ( ) ;
112+
113+ Assert . That ( actual , Does . Contain ( expectedReturnBody ) ) ;
114+ }
115+
116+ [ Test ]
117+ public void CustomReturnUrlPutPolicyTest ( )
118+ {
119+
120+ PutPolicy putPolicy = new PutPolicy ( ) ;
121+ putPolicy . Scope = Bucket ;
122+ putPolicy . ReturnUrl = "http://api.example.com/qiniu/upload/return" ;
123+
124+ string expectedReturnBody = "\" returnUrl\" :\" http://api.example.com/qiniu/upload/return\" " ;
125+ string actual = putPolicy . ToJsonString ( ) ;
126+
127+ Assert . That ( actual , Does . Contain ( expectedReturnBody ) ) ;
128+ }
129+
130+ [ Test ]
131+ public void CallbackJsonPutPolicyTest ( )
132+ {
133+ PutPolicy putPolicy = new PutPolicy ( ) ;
44134 putPolicy . Scope = Bucket ;
45135 putPolicy . CallbackUrl = "http://api.example.com/qiniu/upload/callback" ;
46136 putPolicy . CallbackBody = "{\" key\" :\" $(key)\" ,\" hash\" :\" $(etag)\" ,\" fsiz\" :$(fsize),\" bucket\" :\" $(bucket)\" ,\" name\" :\" $(x:name)\" }" ;
47137 putPolicy . CallbackBodyType = "application/json" ;
48- upToken = Auth . CreateUploadToken ( mac , putPolicy . ToJsonString ( ) ) ;
49- Console . WriteLine ( upToken ) ;
50138
51- // 带回调业务服务器的凭证(application/x-www-form-urlencoded)
52- putPolicy = new PutPolicy ( ) ;
139+ string expectedCallbackUrl = "\" callbackUrl\" :\" http://api.example.com/qiniu/upload/callback\" " ;
140+ string expectedCallbackBody = "\" callbackBody\" :\" {\\ \" key\\ \" :\\ \" $(key)\\ \" ,\\ \" hash\\ \" :\\ \" $(etag)\\ \" ,\\ \" fsiz\\ \" :$(fsize),\\ \" bucket\\ \" :\\ \" $(bucket)\\ \" ,\\ \" name\\ \" :\\ \" $(x:name)\\ \" }\" " ;
141+ string expectedCallbackBodyType = "\" callbackBodyType\" :\" application/json\" " ;
142+ string actual = putPolicy . ToJsonString ( ) ;
143+
144+ Assert . That ( actual , Does . Contain ( expectedCallbackUrl ) ) ;
145+ Assert . That ( actual , Does . Contain ( expectedCallbackBody ) ) ;
146+ Assert . That ( actual , Does . Contain ( expectedCallbackBodyType ) ) ;
147+ }
148+
149+ [ Test ]
150+ public void CallbackUrlEncodedPutPolicyTest ( )
151+ {
152+ PutPolicy putPolicy = new PutPolicy ( ) ;
53153 putPolicy . Scope = Bucket ;
54154 putPolicy . CallbackUrl = "http://api.example.com/qiniu/upload/callback" ;
55155 putPolicy . CallbackBody = "key=$(key)&hash=$(etag)&bucket=$(bucket)&fsize=$(fsize)&name=$(x:name)" ;
56- upToken = Auth . CreateUploadToken ( mac , putPolicy . ToJsonString ( ) ) ;
57- Console . WriteLine ( upToken ) ;
156+ putPolicy . CallbackHost = "api.example.com" ;
157+
158+ string expectedCallbackUrl = "\" callbackUrl\" :\" http://api.example.com/qiniu/upload/callback\" " ;
159+ string expectedCallbackBody = "\" callbackBody\" :\" key=$(key)&hash=$(etag)&bucket=$(bucket)&fsize=$(fsize)&name=$(x:name)\" " ;
160+ string expectedCallbackHost = "\" callbackHost\" :\" api.example.com\" " ;
161+ string actual = putPolicy . ToJsonString ( ) ;
162+
163+ Assert . That ( actual , Does . Contain ( expectedCallbackUrl ) ) ;
164+ Assert . That ( actual , Does . Contain ( expectedCallbackBody ) ) ;
165+ Assert . That ( actual , Does . Contain ( expectedCallbackHost ) ) ;
166+ }
167+
168+ [ Test ]
169+ public void CallbackFetchKeyPutPolicyTest ( )
170+ {
171+ PutPolicy putPolicy = new PutPolicy ( ) ;
172+ putPolicy . Scope = Bucket ;
173+ putPolicy . CallbackUrl = "http://api.example.com/qiniu/upload/callback" ;
174+ putPolicy . CallbackFetchKey = 1 ;
175+ putPolicy . CallbackBody = "{\" key\" :\" $(key)\" ,\" hash\" :\" $(etag)\" ,\" fsiz\" :$(fsize),\" bucket\" :\" $(bucket)\" ,\" name\" :\" $(x:name)\" }" ;
58176
59- // 带数据处理的凭证
60- putPolicy = new PutPolicy ( ) ;
177+ string expectedCallbackUrl = "\" callbackUrl\" :\" http://api.example.com/qiniu/upload/callback\" " ;
178+ string expectedCallbackFetchKey = "\" callbackFetchKey\" :1" ;
179+ string expectedCallbackBody = "\" callbackBody\" :\" {\\ \" key\\ \" :\\ \" $(key)\\ \" ,\\ \" hash\\ \" :\\ \" $(etag)\\ \" ,\\ \" fsiz\\ \" :$(fsize),\\ \" bucket\\ \" :\\ \" $(bucket)\\ \" ,\\ \" name\\ \" :\\ \" $(x:name)\\ \" }\" " ;
180+ string actual = putPolicy . ToJsonString ( ) ;
181+
182+ Assert . That ( actual , Does . Contain ( expectedCallbackUrl ) ) ;
183+ Assert . That ( actual , Does . Contain ( expectedCallbackFetchKey ) ) ;
184+ Assert . That ( actual , Does . Contain ( expectedCallbackBody ) ) ;
185+ }
186+
187+ [ Test ]
188+ public void DataProcessPutPolicyTest ( )
189+ {
190+ PutPolicy putPolicy = new PutPolicy ( ) ;
61191 string saveMp4Entry = Base64 . UrlSafeBase64Encode ( Bucket + ":avthumb_test_target.mp4" ) ;
62192 string saveJpgEntry = Base64 . UrlSafeBase64Encode ( Bucket + ":vframe_test_target.jpg" ) ;
63193 string avthumbMp4Fop = "avthumb/mp4|saveas/" + saveMp4Entry ;
@@ -67,9 +197,50 @@ public void CreateUptokenTest()
67197 putPolicy . PersistentOps = fops ;
68198 putPolicy . PersistentPipeline = "video-pipe" ;
69199 putPolicy . PersistentNotifyUrl = "http://api.example.com/qiniu/pfop/notify" ;
70- upToken = Auth . CreateUploadToken ( mac , putPolicy . ToJsonString ( ) ) ;
71- Console . WriteLine ( upToken ) ;
200+
201+ string expectedPersistentOps = string . Format ( "\" persistentOps\" :\" {0}\" " , fops ) ;
202+ string expectedPersistentPipeline = "\" persistentPipeline\" :\" video-pipe\" " ;
203+ string expectedPersistentNotifyUrl = "\" persistentNotifyUrl\" :\" http://api.example.com/qiniu/pfop/notify\" " ;
204+ string actual = putPolicy . ToJsonString ( ) ;
205+
206+ Assert . That ( actual , Does . Contain ( expectedPersistentOps ) ) ;
207+ Assert . That ( actual , Does . Contain ( expectedPersistentPipeline ) ) ;
208+ Assert . That ( actual , Does . Contain ( expectedPersistentNotifyUrl ) ) ;
209+ }
210+
211+ [ Test ]
212+ public void EndUserPutPolicyTest ( )
213+ {
214+ PutPolicy putPolicy = new PutPolicy ( ) ;
215+ putPolicy . Scope = Bucket ;
216+ putPolicy . EndUser = "mock_end_user" ;
217+
218+ string expectedEndUser = "\" endUser\" :\" mock_end_user\" " ;
219+ string actual = putPolicy . ToJsonString ( ) ;
220+
221+ Assert . That ( actual , Does . Contain ( expectedEndUser ) ) ;
72222 }
73223
224+ [ Test ]
225+ public void FileLimitPutPolicyTest ( )
226+ {
227+ PutPolicy putPolicy = new PutPolicy ( ) ;
228+ putPolicy . Scope = Bucket ;
229+ putPolicy . FsizeMin = 1024 ; // 1KB
230+ putPolicy . FsizeLimit = 1024 * 1024 ; // 1MB
231+ putPolicy . DetectMime = 1 ;
232+ putPolicy . MimeLimit = "image/*" ;
233+
234+ string expectedFsizeMin = "\" fsizeMin\" :1024" ;
235+ string expectedFsizeLimit = "\" fsizeLimit\" :1048576" ;
236+ string expectedDetectMime = "\" detectMime\" :1" ;
237+ string expectedMimeLimit = "\" mimeLimit\" :\" image/*\" " ;
238+ string actual = putPolicy . ToJsonString ( ) ;
239+
240+ Assert . That ( actual , Does . Contain ( expectedFsizeMin ) ) ;
241+ Assert . That ( actual , Does . Contain ( expectedFsizeLimit ) ) ;
242+ Assert . That ( actual , Does . Contain ( expectedDetectMime ) ) ;
243+ Assert . That ( actual , Does . Contain ( expectedMimeLimit ) ) ;
244+ }
74245 }
75246}
0 commit comments