test_oss_progress.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. #include "CuTest.h"
  2. #include "aos_log.h"
  3. #include "aos_util.h"
  4. #include "aos_string.h"
  5. #include "aos_status.h"
  6. #include "oss_auth.h"
  7. #include "oss_util.h"
  8. #include "oss_xml.h"
  9. #include "oss_api.h"
  10. #include "oss_config.h"
  11. #include "oss_test_util.h"
  12. void test_progress_setup(CuTest *tc)
  13. {
  14. aos_pool_t *p = NULL;
  15. int is_cname = 0;
  16. aos_status_t *s = NULL;
  17. oss_request_options_t *options = NULL;
  18. oss_acl_e oss_acl = OSS_ACL_PRIVATE;
  19. /* create test bucket */
  20. aos_pool_create(&p, NULL);
  21. options = oss_request_options_create(p);
  22. init_test_request_options(options, is_cname);
  23. s = create_test_bucket(options, TEST_BUCKET_NAME, oss_acl);
  24. CuAssertIntEquals(tc, 200, s->code);
  25. aos_pool_destroy(p);
  26. }
  27. void test_progress_cleanup(CuTest *tc)
  28. {
  29. aos_pool_t *p = NULL;
  30. int is_cname = 0;
  31. aos_string_t bucket;
  32. oss_request_options_t *options = NULL;
  33. char *object_name1 = "oss_test_progress_put_object.ts";
  34. char *object_name2 = "oss_test_progress_append_object.ts";
  35. char *object_name3 = "oss_test_progress_multipart_object.ts";
  36. aos_pool_create(&p, NULL);
  37. options = oss_request_options_create(p);
  38. init_test_request_options(options, is_cname);
  39. /* delete test object */
  40. delete_test_object(options, TEST_BUCKET_NAME, object_name1);
  41. delete_test_object(options, TEST_BUCKET_NAME, object_name2);
  42. delete_test_object(options, TEST_BUCKET_NAME, object_name3);
  43. /* delete test bucket */
  44. aos_str_set(&bucket, TEST_BUCKET_NAME);
  45. oss_delete_bucket(options, &bucket, NULL);
  46. apr_sleep(apr_time_from_sec(3));
  47. aos_pool_destroy(p);
  48. }
  49. void test_progress_put_and_get_from_buffer(CuTest *tc)
  50. {
  51. aos_pool_t *p = NULL;
  52. char *object_name = "oss_test_progress_put_object.ts";
  53. char *str = NULL;
  54. aos_status_t *s = NULL;
  55. int is_cname = 0;
  56. aos_string_t bucket;
  57. aos_string_t object;
  58. aos_table_t *headers = NULL;
  59. aos_table_t *params = NULL;
  60. oss_request_options_t *options = NULL;
  61. aos_table_t *resp_headers = NULL;
  62. size_t length = 1024 * 16 * 10;
  63. aos_list_t resp_body;
  64. aos_list_t buffer;
  65. aos_buf_t *content;
  66. /* init test*/
  67. aos_pool_create(&p, NULL);
  68. options = oss_request_options_create(p);
  69. init_test_request_options(options, is_cname);
  70. str = (char *)aos_palloc(p, length);
  71. memset(str, 'A', length - 1);
  72. aos_str_set(&bucket, TEST_BUCKET_NAME);
  73. aos_str_set(&object, object_name);
  74. aos_list_init(&resp_body);
  75. aos_list_init(&buffer);
  76. content = aos_buf_pack(options->pool, str, length);
  77. aos_list_add_tail(&content->node, &buffer);
  78. headers = aos_table_make(p, 1);
  79. apr_table_set(headers, "x-oss-meta-author", "oss");
  80. /* test put object */
  81. s = oss_do_put_object_from_buffer(options, &bucket, &object, &buffer,
  82. headers, params, percentage, &resp_headers, &resp_body);
  83. CuAssertIntEquals(tc, 200, s->code);
  84. CuAssertPtrNotNull(tc, headers);
  85. aos_pool_destroy(p);
  86. /* test get object */
  87. aos_pool_create(&p, NULL);
  88. options = oss_request_options_create(p);
  89. init_test_request_options(options, is_cname);
  90. s = oss_do_get_object_to_buffer(options, &bucket, &object, NULL, NULL,
  91. &buffer, percentage, NULL);
  92. CuAssertIntEquals(tc, 200, s->code);
  93. aos_pool_destroy(p);
  94. printf("test_progress_put_object_from_buffer ok\n");
  95. }
  96. void test_progress_put_and_get_from_file(CuTest *tc)
  97. {
  98. aos_pool_t *p = NULL;
  99. char *object_name = "oss_test_progress_put_object.ts";
  100. aos_status_t *s = NULL;
  101. int is_cname = 0;
  102. aos_string_t bucket;
  103. aos_string_t object;
  104. aos_string_t filename;
  105. oss_request_options_t *options = NULL;
  106. aos_table_t *resp_headers = NULL;
  107. size_t length = 1024 * 16 * 10;
  108. aos_list_t resp_body;
  109. /* init test*/
  110. aos_pool_create(&p, NULL);
  111. options = oss_request_options_create(p);
  112. init_test_request_options(options, is_cname);
  113. make_random_file(p, object_name, length);
  114. aos_str_set(&bucket, TEST_BUCKET_NAME);
  115. aos_str_set(&object, object_name);
  116. aos_str_set(&filename, object_name);
  117. aos_list_init(&resp_body);
  118. /* test put object */
  119. s = oss_do_put_object_from_file(options, &bucket, &object, &filename,
  120. NULL, NULL, percentage, &resp_headers, &resp_body);
  121. CuAssertIntEquals(tc, 200, s->code);
  122. aos_pool_destroy(p);
  123. /* test get object */
  124. aos_pool_create(&p, NULL);
  125. options = oss_request_options_create(p);
  126. init_test_request_options(options, is_cname);
  127. s = oss_do_get_object_to_file(options, &bucket, &object, NULL, NULL,
  128. &filename, percentage, NULL);
  129. CuAssertIntEquals(tc, 200, s->code);
  130. apr_file_remove(object_name, p);
  131. aos_pool_destroy(p);
  132. printf("test_progress_put_and_get_from_file ok\n");
  133. }
  134. void test_progress_put_and_get_empty_body(CuTest *tc)
  135. {
  136. aos_pool_t *p = NULL;
  137. char *object_name = "oss_test_progress_put_object.ts";
  138. char *str = "";
  139. aos_status_t *s = NULL;
  140. int is_cname = 0;
  141. aos_string_t bucket;
  142. aos_string_t object;
  143. aos_table_t *headers = NULL;
  144. aos_table_t *params = NULL;
  145. oss_request_options_t *options = NULL;
  146. aos_table_t *resp_headers = NULL;
  147. size_t length = 0;
  148. aos_list_t resp_body;
  149. aos_list_t buffer;
  150. aos_buf_t *content;
  151. /* init test*/
  152. aos_pool_create(&p, NULL);
  153. options = oss_request_options_create(p);
  154. init_test_request_options(options, is_cname);
  155. aos_str_set(&bucket, TEST_BUCKET_NAME);
  156. aos_str_set(&object, object_name);
  157. aos_list_init(&resp_body);
  158. aos_list_init(&buffer);
  159. content = aos_buf_pack(options->pool, str, length);
  160. aos_list_add_tail(&content->node, &buffer);
  161. headers = aos_table_make(p, 1);
  162. apr_table_set(headers, "x-oss-meta-author", "oss");
  163. /* test put object */
  164. s = oss_do_put_object_from_buffer(options, &bucket, &object, &buffer,
  165. headers, params, percentage, &resp_headers, &resp_body);
  166. CuAssertIntEquals(tc, 200, s->code);
  167. CuAssertPtrNotNull(tc, headers);
  168. aos_pool_destroy(p);
  169. /* test get object */
  170. aos_pool_create(&p, NULL);
  171. options = oss_request_options_create(p);
  172. init_test_request_options(options, is_cname);
  173. s = oss_do_get_object_to_buffer(options, &bucket, &object, NULL, NULL,
  174. &buffer, percentage, NULL);
  175. CuAssertIntEquals(tc, 200, s->code);
  176. aos_pool_destroy(p);
  177. printf("test_progress_put_and_get_empty_body ok\n");
  178. }
  179. void test_progress_append_object(CuTest *tc)
  180. {
  181. aos_pool_t *p = NULL;
  182. char *object_name = "oss_test_progress_append_object.ts";
  183. char *str = NULL;
  184. aos_status_t *s = NULL;
  185. int is_cname = 0;
  186. aos_string_t bucket;
  187. aos_string_t object;
  188. aos_string_t filename;
  189. aos_table_t *headers = NULL;
  190. aos_table_t *params = NULL;
  191. oss_request_options_t *options = NULL;
  192. aos_table_t *resp_headers = NULL;
  193. size_t length = 1024 * 16 * 20;
  194. uint64_t initcrc = 0;
  195. aos_list_t resp_body;
  196. aos_list_t buffer;
  197. aos_buf_t *content;
  198. /* init test*/
  199. aos_pool_create(&p, NULL);
  200. options = oss_request_options_create(p);
  201. init_test_request_options(options, is_cname);
  202. str = (char *)aos_palloc(p, length);
  203. memset(str, 'A', length - 1);
  204. aos_str_set(&bucket, TEST_BUCKET_NAME);
  205. aos_str_set(&object, object_name);
  206. aos_list_init(&resp_body);
  207. aos_list_init(&buffer);
  208. content = aos_buf_pack(options->pool, str, length);
  209. aos_list_add_tail(&content->node, &buffer);
  210. headers = aos_table_make(p, 1);
  211. apr_table_set(headers, "x-oss-meta-author", "oss");
  212. /* test append object from buffer */
  213. s = oss_do_append_object_from_buffer(options, &bucket, &object, 0, initcrc, &buffer,
  214. headers, params, percentage, &resp_headers, &resp_body);
  215. CuAssertIntEquals(tc, 200, s->code);
  216. aos_pool_destroy(p);
  217. /* test append object from file*/
  218. aos_pool_create(&p, NULL);
  219. options = oss_request_options_create(p);
  220. init_test_request_options(options, is_cname);
  221. aos_str_set(&filename, object_name);
  222. make_random_file(p, object_name, length);
  223. initcrc = aos_atoui64((char*)(apr_table_get(resp_headers, OSS_HASH_CRC64_ECMA)));
  224. s = oss_do_append_object_from_file(options, &bucket, &object, length, initcrc, &filename,
  225. NULL, NULL, percentage, &resp_headers, &resp_body);
  226. CuAssertIntEquals(tc, 200, s->code);
  227. apr_file_remove(object_name, p);
  228. aos_pool_destroy(p);
  229. printf("test_progress_append_object ok\n");
  230. }
  231. void test_progress_multipart_from_buffer(CuTest *tc)
  232. {
  233. aos_pool_t *p = NULL;
  234. aos_string_t bucket;
  235. char *object_name = "oss_test_progress_multipart_object.ts";
  236. aos_string_t object;
  237. int is_cname = 0;
  238. oss_request_options_t *options = NULL;
  239. aos_status_t *s = NULL;
  240. aos_list_t buffer;
  241. oss_list_upload_part_params_t *params = NULL;
  242. aos_string_t upload_id;
  243. aos_list_t complete_part_list;
  244. oss_list_part_content_t *part_content1 = NULL;
  245. oss_complete_part_content_t *complete_content1 = NULL;
  246. int part_num = 1;
  247. aos_pool_create(&p, NULL);
  248. options = oss_request_options_create(p);
  249. init_test_request_options(options, is_cname);
  250. aos_str_set(&bucket, TEST_BUCKET_NAME);
  251. aos_str_set(&object, object_name);
  252. //init mulitipart
  253. s = init_test_multipart_upload(options, TEST_BUCKET_NAME, object_name, &upload_id);
  254. CuAssertIntEquals(tc, 200, s->code);
  255. //upload part
  256. aos_list_init(&buffer);
  257. make_random_body(p, 200, &buffer);
  258. s = oss_do_upload_part_from_buffer(options, &bucket, &object, &upload_id,
  259. part_num++, &buffer, percentage, NULL, NULL, NULL, NULL);
  260. CuAssertIntEquals(tc, 200, s->code);
  261. aos_list_init(&buffer);
  262. make_random_body(p, 200, &buffer);
  263. s = oss_do_upload_part_from_buffer(options, &bucket, &object, &upload_id,
  264. part_num++, &buffer, percentage, NULL, NULL, NULL, NULL);
  265. CuAssertIntEquals(tc, 200, s->code);
  266. //list part
  267. params = oss_create_list_upload_part_params(p);
  268. params->max_ret = 1;
  269. aos_list_init(&complete_part_list);
  270. s = oss_list_upload_part(options, &bucket, &object, &upload_id,
  271. params, NULL);
  272. CuAssertIntEquals(tc, 200, s->code);
  273. aos_list_for_each_entry(oss_list_part_content_t, part_content1, &params->part_list, node) {
  274. complete_content1 = oss_create_complete_part_content(p);
  275. aos_str_set(&complete_content1->part_number, part_content1->part_number.data);
  276. aos_str_set(&complete_content1->etag, part_content1->etag.data);
  277. aos_list_add_tail(&complete_content1->node, &complete_part_list);
  278. }
  279. //complete multipart
  280. s = oss_complete_multipart_upload(options, &bucket, &object, &upload_id,
  281. &complete_part_list, NULL, NULL);
  282. CuAssertIntEquals(tc, 200, s->code);
  283. aos_pool_destroy(p);
  284. printf("test_progress_multipart_from_buffer ok\n");
  285. }
  286. void test_progress_multipart_from_file(CuTest *tc)
  287. {
  288. aos_pool_t *p = NULL;
  289. aos_string_t bucket;
  290. char *object_name = "oss_test_progress_multipart_object.ts";
  291. aos_string_t object;
  292. int is_cname = 0;
  293. oss_request_options_t *options = NULL;
  294. aos_status_t *s = NULL;
  295. oss_list_upload_part_params_t *params = NULL;
  296. aos_string_t upload_id;
  297. aos_list_t complete_part_list;
  298. oss_upload_file_t *upload_file = NULL;
  299. oss_list_part_content_t *part_content1 = NULL;
  300. oss_complete_part_content_t *complete_content1 = NULL;
  301. size_t length = 1024 * 16 * 10;
  302. int part_num = 1;
  303. aos_pool_create(&p, NULL);
  304. options = oss_request_options_create(p);
  305. init_test_request_options(options, is_cname);
  306. aos_str_set(&bucket, TEST_BUCKET_NAME);
  307. aos_str_set(&object, object_name);
  308. make_random_file(p, object_name, length);
  309. upload_file = oss_create_upload_file(p);
  310. aos_str_set(&upload_file->filename, object_name);
  311. //init mulitipart
  312. s = init_test_multipart_upload(options, TEST_BUCKET_NAME, object_name, &upload_id);
  313. CuAssertIntEquals(tc, 200, s->code);
  314. //upload part
  315. upload_file->file_pos = 0;
  316. upload_file->file_last = length/2;
  317. s = oss_do_upload_part_from_file(options, &bucket, &object, &upload_id,
  318. part_num++, upload_file, percentage, NULL, NULL, NULL, NULL);
  319. CuAssertIntEquals(tc, 200, s->code);
  320. upload_file->file_pos = length/2;
  321. upload_file->file_last = length;
  322. s = oss_do_upload_part_from_file(options, &bucket, &object, &upload_id,
  323. part_num++, upload_file, percentage, NULL, NULL, NULL, NULL);
  324. CuAssertIntEquals(tc, 200, s->code);
  325. //list part
  326. params = oss_create_list_upload_part_params(p);
  327. params->max_ret = 1;
  328. aos_list_init(&complete_part_list);
  329. s = oss_list_upload_part(options, &bucket, &object, &upload_id,
  330. params, NULL);
  331. CuAssertIntEquals(tc, 200, s->code);
  332. aos_list_for_each_entry(oss_list_part_content_t, part_content1, &params->part_list, node) {
  333. complete_content1 = oss_create_complete_part_content(p);
  334. aos_str_set(&complete_content1->part_number, part_content1->part_number.data);
  335. aos_str_set(&complete_content1->etag, part_content1->etag.data);
  336. aos_list_add_tail(&complete_content1->node, &complete_part_list);
  337. }
  338. //complete multipart
  339. s = oss_complete_multipart_upload(options, &bucket, &object, &upload_id,
  340. &complete_part_list, NULL, NULL);
  341. CuAssertIntEquals(tc, 200, s->code);
  342. apr_file_remove(object_name, p);
  343. aos_pool_destroy(p);
  344. printf("void test_progress_multipart_from_file ok\n");
  345. }
  346. CuSuite *test_oss_progress()
  347. {
  348. CuSuite* suite = CuSuiteNew();
  349. SUITE_ADD_TEST(suite, test_progress_setup);
  350. SUITE_ADD_TEST(suite, test_progress_put_and_get_from_buffer);
  351. SUITE_ADD_TEST(suite, test_progress_put_and_get_from_file);
  352. SUITE_ADD_TEST(suite, test_progress_put_and_get_empty_body);
  353. SUITE_ADD_TEST(suite, test_progress_append_object);
  354. SUITE_ADD_TEST(suite, test_progress_multipart_from_buffer);
  355. SUITE_ADD_TEST(suite, test_progress_multipart_from_file);
  356. SUITE_ADD_TEST(suite, test_progress_cleanup);
  357. return suite;
  358. }