test_oss_callback.c 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  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_callback_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_callback_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_cb_put_object.ts";
  34. char *object_name2 = "oss_test_cb_multipart_object.ts";
  35. //aos_table_t *resp_headers = NULL;
  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 bucket */
  43. aos_str_set(&bucket, TEST_BUCKET_NAME);
  44. oss_delete_bucket(options, &bucket, NULL);
  45. apr_sleep(apr_time_from_sec(3));
  46. aos_pool_destroy(p);
  47. }
  48. void test_callback_put_object_from_buffer(CuTest *tc)
  49. {
  50. aos_pool_t *p = NULL;
  51. char *object_name = "oss_test_cb_put_object.ts";
  52. char *str = "test oss c sdk";
  53. aos_status_t *s = NULL;
  54. int is_cname = 0;
  55. aos_string_t bucket;
  56. aos_string_t object;
  57. aos_table_t *headers = NULL;
  58. oss_request_options_t *options = NULL;
  59. aos_table_t *resp_headers = NULL;
  60. aos_list_t resp_body;
  61. aos_list_t buffer;
  62. aos_buf_t *content;
  63. char *buf = NULL;
  64. int64_t len = 0;
  65. int64_t size = 0;
  66. int64_t pos = 0;
  67. char b64_buf[1024];
  68. int b64_len;
  69. /* JSON format */
  70. char *callback = "{"
  71. "\"callbackUrl\":\"http://callback.oss-demo.com:23450\","
  72. "\"callbackHost\":\"oss-cn-hangzhou.aliyuncs.com\","
  73. "\"callbackBody\":\"bucket=${bucket}&object=${object}&size=${size}&mimeType=${mimeType}\","
  74. "\"callbackBodyType\":\"application/x-www-form-urlencoded\""
  75. "}";
  76. /* init test */
  77. aos_pool_create(&p, NULL);
  78. options = oss_request_options_create(p);
  79. init_test_request_options(options, is_cname);
  80. aos_str_set(&bucket, TEST_BUCKET_NAME);
  81. aos_str_set(&object, object_name);
  82. aos_list_init(&resp_body);
  83. aos_list_init(&buffer);
  84. content = aos_buf_pack(options->pool, str, strlen(str));
  85. aos_list_add_tail(&content->node, &buffer);
  86. /* put call into header */
  87. b64_len = aos_base64_encode((unsigned char*)callback, strlen(callback), b64_buf);
  88. b64_buf[b64_len] = '\0';
  89. headers = aos_table_make(p, 1);
  90. apr_table_set(headers, OSS_CALLBACK, b64_buf);
  91. /* test put object */
  92. s = oss_do_put_object_from_buffer(options, &bucket, &object, &buffer,
  93. headers, NULL, NULL, &resp_headers, &resp_body);
  94. CuAssertIntEquals(tc, 200, s->code);
  95. /* get buffer len */
  96. len = aos_buf_list_len(&resp_body);
  97. buf = (char *)aos_pcalloc(p, (apr_size_t)(len + 1));
  98. buf[len] = '\0';
  99. /* copy buffer content to memory */
  100. aos_list_for_each_entry(aos_buf_t, content, &resp_body, node) {
  101. size = aos_buf_size(content);
  102. memcpy(buf + pos, content->pos, (size_t)size);
  103. pos += size;
  104. }
  105. CuAssertStrEquals(tc, buf, "{\"Status\":\"OK\"}");
  106. aos_pool_destroy(p);
  107. /* head object */
  108. aos_pool_create(&p, NULL);
  109. options = oss_request_options_create(p);
  110. init_test_request_options(options, is_cname);
  111. s = oss_head_object(options, &bucket, &object, NULL, NULL);
  112. CuAssertIntEquals(tc, 200, s->code);
  113. aos_pool_destroy(p);
  114. printf("test_callback_put_object_from_buffer ok\n");
  115. }
  116. void test_callback_multipart_from_buffer(CuTest *tc)
  117. {
  118. aos_pool_t *p = NULL;
  119. aos_string_t bucket;
  120. char *object_name = "oss_test_cb_multipart_object.ts";
  121. aos_string_t object;
  122. int is_cname = 0;
  123. oss_request_options_t *options = NULL;
  124. aos_status_t *s = NULL;
  125. aos_list_t buffer;
  126. oss_list_upload_part_params_t *params = NULL;
  127. aos_string_t upload_id;
  128. aos_list_t complete_part_list;
  129. aos_table_t *headers = NULL;
  130. aos_table_t *resp_headers = NULL;
  131. oss_list_part_content_t *part_content1 = NULL;
  132. oss_complete_part_content_t *complete_content1 = NULL;
  133. int part_num = 1;
  134. aos_list_t resp_body;
  135. aos_buf_t *content;
  136. char *buf = NULL;
  137. int64_t len = 0;
  138. int64_t size = 0;
  139. int64_t pos = 0;
  140. char b64_buf[1024];
  141. int b64_len;
  142. /* JSON format */
  143. char *callback = "{"
  144. "\"callbackUrl\":\"http://callback.oss-demo.com:23450\","
  145. "\"callbackHost\":\"oss-cn-hangzhou.aliyuncs.com\","
  146. "\"callbackBody\":\"bucket=${bucket}&object=${object}&size=${size}&mimeType=${mimeType}\","
  147. "\"callbackBodyType\":\"application/x-www-form-urlencoded\""
  148. "}";
  149. aos_pool_create(&p, NULL);
  150. options = oss_request_options_create(p);
  151. init_test_request_options(options, is_cname);
  152. aos_str_set(&bucket, TEST_BUCKET_NAME);
  153. aos_str_set(&object, object_name);
  154. /* put call into header */
  155. b64_len = aos_base64_encode((unsigned char*)callback, strlen(callback), b64_buf);
  156. b64_buf[b64_len] = '\0';
  157. headers = aos_table_make(p, 1);
  158. apr_table_set(headers, OSS_CALLBACK, b64_buf);
  159. //init mulitipart
  160. s = init_test_multipart_upload(options, TEST_BUCKET_NAME, object_name, &upload_id);
  161. CuAssertIntEquals(tc, 200, s->code);
  162. //upload part
  163. aos_list_init(&buffer);
  164. make_random_body(p, 2, &buffer);
  165. s = oss_upload_part_from_buffer(options, &bucket, &object, &upload_id,
  166. part_num++, &buffer, NULL);
  167. CuAssertIntEquals(tc, 200, s->code);
  168. aos_list_init(&buffer);
  169. make_random_body(p, 200, &buffer);
  170. s = oss_upload_part_from_buffer(options, &bucket, &object, &upload_id,
  171. part_num++, &buffer, NULL);
  172. CuAssertIntEquals(tc, 200, s->code);
  173. //list part
  174. params = oss_create_list_upload_part_params(p);
  175. params->max_ret = 1;
  176. aos_list_init(&complete_part_list);
  177. s = oss_list_upload_part(options, &bucket, &object, &upload_id,
  178. params, NULL);
  179. CuAssertIntEquals(tc, 200, s->code);
  180. aos_list_for_each_entry(oss_list_part_content_t, part_content1, &params->part_list, node) {
  181. complete_content1 = oss_create_complete_part_content(p);
  182. aos_str_set(&complete_content1->part_number, part_content1->part_number.data);
  183. aos_str_set(&complete_content1->etag, part_content1->etag.data);
  184. aos_list_add_tail(&complete_content1->node, &complete_part_list);
  185. }
  186. //complete multipart
  187. s = oss_do_complete_multipart_upload(options, &bucket, &object, &upload_id,
  188. &complete_part_list, headers, NULL, &resp_headers, &resp_body);
  189. CuAssertIntEquals(tc, 200, s->code);
  190. /* get buffer len */
  191. len = aos_buf_list_len(&resp_body);
  192. buf = (char *)aos_pcalloc(p, (apr_size_t)(len + 1));
  193. buf[len] = '\0';
  194. /* copy buffer content to memory */
  195. aos_list_for_each_entry(aos_buf_t, content, &resp_body, node) {
  196. size = aos_buf_size(content);
  197. memcpy(buf + pos, content->pos, (size_t)size);
  198. pos += size;
  199. }
  200. CuAssertStrEquals(tc, buf, "{\"Status\":\"OK\"}");
  201. aos_pool_destroy(p);
  202. printf("test_callback_multipart_from_buffer ok\n");
  203. }
  204. CuSuite *test_oss_callback()
  205. {
  206. CuSuite* suite = CuSuiteNew();
  207. SUITE_ADD_TEST(suite, test_callback_setup);
  208. SUITE_ADD_TEST(suite, test_callback_put_object_from_buffer);
  209. SUITE_ADD_TEST(suite, test_callback_multipart_from_buffer);
  210. SUITE_ADD_TEST(suite, test_callback_cleanup);
  211. return suite;
  212. }