oss_test_util.c 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. #include <sys/stat.h>
  2. #include "oss_config.h"
  3. #include "oss_api.h"
  4. #include "oss_test_util.h"
  5. void make_rand_string(aos_pool_t *p, int len, aos_string_t *data)
  6. {
  7. char *str = NULL;
  8. int i = 0;
  9. str = (char *)aos_palloc(p, len + 1);
  10. for ( ; i < len; i++) {
  11. str[i] = 'a' + rand() % 32;
  12. }
  13. str[len] = '\0';
  14. aos_str_set(data, str);
  15. }
  16. aos_buf_t *make_random_buf(aos_pool_t *p, int len)
  17. {
  18. int bytes;
  19. aos_buf_t *b;
  20. aos_string_t str;
  21. make_rand_string(p, 16, &str);
  22. b = aos_create_buf(p, len);
  23. while (b->last < b->end) {
  24. bytes = b->end - b->last;
  25. bytes = aos_min(bytes, 16);
  26. memcpy(b->last, str.data, bytes);
  27. b->last += bytes;
  28. }
  29. return b;
  30. }
  31. void make_random_body(aos_pool_t *p, int count, aos_list_t *bc)
  32. {
  33. int i = 0;
  34. int len;
  35. aos_buf_t *b;
  36. srand((int)time(0));
  37. for (; i < count; ++i) {
  38. len = 1 + (int)(4096.0*rand() / (RAND_MAX+1.0));
  39. b = make_random_buf(p, len);
  40. aos_list_add_tail(&b->node, bc);
  41. }
  42. }
  43. int make_random_file(aos_pool_t *p, const char *filename, int len)
  44. {
  45. apr_file_t *file;
  46. aos_string_t str;
  47. apr_size_t nbytes;
  48. int ret;
  49. if ((ret = apr_file_open(&file, filename, APR_CREATE | APR_WRITE | APR_TRUNCATE,
  50. APR_UREAD | APR_UWRITE | APR_GREAD, p)) != APR_SUCCESS) {
  51. return ret;
  52. }
  53. make_rand_string(p, len, &str);
  54. nbytes = len;
  55. ret = apr_file_write(file, str.data, &nbytes);
  56. apr_file_close(file);
  57. return ret;
  58. }
  59. int fill_test_file(aos_pool_t *p, const char *filename, const char *content)
  60. {
  61. apr_file_t *file;
  62. apr_size_t nbytes;
  63. int ret;
  64. if ((ret = apr_file_open(&file, filename, APR_CREATE | APR_WRITE | APR_TRUNCATE,
  65. APR_UREAD | APR_UWRITE | APR_GREAD, p)) != APR_SUCCESS) {
  66. return ret;
  67. }
  68. nbytes = strlen(content);
  69. ret = apr_file_write(file, content, &nbytes);
  70. apr_file_close(file);
  71. return ret;
  72. }
  73. void init_test_config(oss_config_t *config, int is_cname)
  74. {
  75. aos_str_set(&config->endpoint, TEST_OSS_ENDPOINT);
  76. aos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
  77. aos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
  78. config->is_cname = is_cname;
  79. }
  80. void init_test_request_options(oss_request_options_t *options, int is_cname)
  81. {
  82. options->config = oss_config_create(options->pool);
  83. init_test_config(options->config, is_cname);
  84. options->ctl = aos_http_controller_create(options->pool, 0);
  85. }
  86. aos_status_t * create_test_bucket(const oss_request_options_t *options,
  87. const char *bucket_name,
  88. oss_acl_e oss_acl)
  89. {
  90. aos_string_t bucket;
  91. aos_table_t *resp_headers;
  92. aos_status_t * s;
  93. aos_str_set(&bucket, bucket_name);
  94. s = oss_create_bucket(options, &bucket, oss_acl, &resp_headers);
  95. return s;
  96. }
  97. aos_status_t *create_test_object(const oss_request_options_t *options,
  98. const char *bucket_name,
  99. const char *object_name,
  100. const char *data,
  101. aos_table_t *headers)
  102. {
  103. aos_string_t bucket;
  104. aos_string_t object;
  105. aos_table_t *resp_headers;
  106. aos_list_t buffer;
  107. aos_buf_t *content;
  108. aos_status_t * s;
  109. test_object_base();
  110. aos_list_init(&buffer);
  111. content = aos_buf_pack(options->pool, data, strlen(data));
  112. aos_list_add_tail(&content->node, &buffer);
  113. s = oss_put_object_from_buffer(options, &bucket, &object,
  114. &buffer, headers, &resp_headers);
  115. return s;
  116. }
  117. aos_status_t *create_test_object_from_file(const oss_request_options_t *options,
  118. const char *bucket_name,
  119. const char *object_name,
  120. const char *filename,
  121. aos_table_t *headers)
  122. {
  123. aos_string_t bucket;
  124. aos_string_t object;
  125. aos_string_t file;
  126. aos_table_t *resp_headers;
  127. aos_status_t * s;
  128. test_object_base();
  129. aos_str_set(&file, filename);
  130. s = oss_put_object_from_file(options, &bucket, &object, &file,
  131. headers, &resp_headers);
  132. return s;
  133. }
  134. aos_status_t *delete_test_object(const oss_request_options_t *options,
  135. const char *bucket_name,
  136. const char *object_name)
  137. {
  138. aos_string_t bucket;
  139. aos_string_t object;
  140. aos_table_t *resp_headers;
  141. aos_status_t * s;
  142. test_object_base();
  143. s = oss_delete_object(options, &bucket, &object, &resp_headers);
  144. return s;
  145. }
  146. aos_status_t *init_test_multipart_upload(const oss_request_options_t *options,
  147. const char *bucket_name,
  148. const char *object_name,
  149. aos_string_t *upload_id)
  150. {
  151. aos_string_t bucket;
  152. aos_string_t object;
  153. aos_table_t *headers;
  154. aos_table_t *resp_headers;
  155. aos_status_t *s;
  156. test_object_base();
  157. headers = aos_table_make(options->pool, 5);
  158. s = oss_init_multipart_upload(options, &bucket, &object,
  159. upload_id, headers, &resp_headers);
  160. return s;
  161. }
  162. aos_status_t *abort_test_multipart_upload(const oss_request_options_t *options,
  163. const char *bucket_name,
  164. const char *object_name,
  165. aos_string_t *upload_id)
  166. {
  167. aos_string_t bucket;
  168. aos_string_t object;
  169. aos_table_t *resp_headers;
  170. aos_status_t *s;
  171. test_object_base();
  172. s = oss_abort_multipart_upload(options, &bucket, &object, upload_id,
  173. &resp_headers);
  174. return s;
  175. }
  176. aos_status_t *create_test_live_channel(const oss_request_options_t *options,
  177. const char *bucket_name, const char *live_channel)
  178. {
  179. aos_list_t publish_url_list;
  180. aos_list_t play_url_list;
  181. oss_live_channel_configuration_t *config = NULL;
  182. aos_string_t bucket;
  183. aos_string_t channel_id;
  184. aos_str_set(&bucket, TEST_BUCKET_NAME);
  185. aos_str_set(&channel_id, live_channel);
  186. aos_list_init(&publish_url_list);
  187. aos_list_init(&play_url_list);
  188. config = oss_create_live_channel_configuration_content(options->pool);
  189. aos_str_set(&config->name, live_channel);
  190. aos_str_set(&config->description, "live channel description");
  191. return oss_create_live_channel(options, &bucket, config, &publish_url_list,
  192. &play_url_list, NULL);
  193. }
  194. aos_status_t *delete_test_live_channel(const oss_request_options_t *options,
  195. const char *bucket_name, const char *live_channel)
  196. {
  197. aos_string_t bucket;
  198. aos_string_t channel_id;
  199. aos_str_set(&bucket, TEST_BUCKET_NAME);
  200. aos_str_set(&channel_id, live_channel);
  201. return oss_delete_live_channel(options, &bucket, &channel_id, NULL);
  202. }
  203. char* gen_test_signed_url(const oss_request_options_t *options,
  204. const char *bucket_name,
  205. const char *object_name,
  206. int64_t expires,
  207. aos_http_request_t *req)
  208. {
  209. aos_string_t bucket;
  210. aos_string_t object;
  211. char *signed_url = NULL;
  212. aos_str_set(&bucket, bucket_name);
  213. aos_str_set(&object, object_name);
  214. signed_url = oss_gen_signed_url(options, &bucket, &object, expires, req);
  215. return signed_url;
  216. }
  217. unsigned long get_file_size(const char *file_path)
  218. {
  219. unsigned long filesize = -1;
  220. struct stat statbuff;
  221. if(stat(file_path, &statbuff) < 0){
  222. return filesize;
  223. } else {
  224. filesize = statbuff.st_size;
  225. }
  226. return filesize;
  227. }
  228. char *decrypt(const char *encrypted_str, aos_pool_t *pool)
  229. {
  230. char *res_str = NULL;
  231. int i = 0;
  232. if (encrypted_str == NULL) {
  233. return NULL;
  234. }
  235. res_str = (char *)aos_palloc(pool, strlen(encrypted_str) + 1);
  236. while (*encrypted_str != '\0') {
  237. res_str[i] = 0x6a ^ *encrypted_str;
  238. encrypted_str++;
  239. i++;
  240. }
  241. res_str[i] = '\0';
  242. return res_str;
  243. }
  244. void progress_callback(int64_t consumed_bytes, int64_t total_bytes)
  245. {
  246. assert(total_bytes >= consumed_bytes);
  247. }
  248. void percentage(int64_t consumed_bytes, int64_t total_bytes)
  249. {
  250. assert(total_bytes >= consumed_bytes);
  251. }