You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

258 lines
11KB

  1. #include "sys/sock.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <assert.h>
  5. #include <string.h>
  6. #include <string>
  7. #include <vector>
  8. #include "Reflector.h"
  9. #define RE_REGISTER(name, proto, func) static bool b_##name = Reflector::Instance()->registerFun(#name, proto, &func)
  10. #define RE_RUN_REG(name,argc,argv) Reflector::Instance()->runFun(name, argc, argv)
  11. #define RE_GET_REG Reflector::Instance()->getAllRegisterFun
  12. static std::string str_register_fun;
  13. #define T_RE_GET_ALL_REG() do{\
  14. std::vector<std::string> regFuncVec = RE_GET_REG();\
  15. for(auto& x: regFuncVec){\
  16. str_register_fun += "\t";\
  17. str_register_fun += x;\
  18. str_register_fun += "\n";\
  19. }\
  20. }while(0)
  21. void usage(int argc, char const *argv[]){
  22. printf( "****************************************\n");
  23. printf( "usage: \n" );
  24. printf( "./test -c <func name> \n" );
  25. printf( "useful func: \n" );
  26. printf( "%s", str_register_fun.c_str() );
  27. printf( "****************************************\n");
  28. }
  29. /**
  30. * tool
  31. * 由于测试项函数参数不统一,这里做一些工具,用于实现反射机制.
  32. * TODO:测试项函数参数格式统一
  33. */
  34. /* 用于套壳调用函数,参数 void */
  35. #define DEF_FUN_VOID2(name, ...) void name ( __VA_ARGS__ ); \
  36. int t_##name(int argc, char const *argv[]){\
  37. name();return 0;\
  38. } \
  39. RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
  40. #define DEF_FUN_VOID(name) DEF_FUN_VOID2(name, void)
  41. /* 用于套壳调用函数,参数 char* */
  42. #define DEF_FUN_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
  43. int t_##name(int argc, char const *argv[]){\
  44. if(4 != argc) return -1;\
  45. name(argv[3]);return 0;\
  46. } \
  47. RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
  48. /* 用于套壳调用函数,参数 char*, char* */
  49. #define DEF_FUN_2PCHAR(name, ...) void name ( __VA_ARGS__ ); \
  50. int t_##name(int argc, char const *argv[]){\
  51. if(5 != argc) return -1;\
  52. name(argv[3], argv[4]);return 0;\
  53. } \
  54. RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
  55. /* 用于套壳调用函数,参数 char*, char*, char*, char* */
  56. #define DEF_FUN_4PCHAR(name, ...) void name ( __VA_ARGS__ ); \
  57. int t_##name(int argc, char const *argv[]){\
  58. if(7 != argc) return -1;\
  59. name(argv[3], argv[4], argv[5], argv[6]);return 0;\
  60. } \
  61. RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
  62. /* 用于套壳调用函数,参数 char*, int */
  63. #define DEF_FUN_PCHAR_INT(name, ...) void name ( __VA_ARGS__ ); \
  64. int t_##name(int argc, char const *argv[]){\
  65. if(5 != argc) return -1;\
  66. name(argv[3], (int)atoi(argv[4]));return 0;\
  67. } \
  68. RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
  69. /* 用于套壳调用函数,参数 int, int, char*, char* */
  70. #define DEF_FUN_INT_INT_PCHAR_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
  71. int t_##name(int argc, char const *argv[]){\
  72. if(7 != argc) return -1;\
  73. name((int)atoi(argv[3]), (int)atoi(argv[4]), argv[5], argv[6]);return 0;\
  74. }\
  75. RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
  76. /* 用于套壳调用函数,参数 char*, int, int, char* */
  77. #define DEF_FUN_PCHAR_INT_INT_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
  78. int t_##name(int argc, char const *argv[]){\
  79. if(7 != argc) return -1;\
  80. name(argv[3], (int)atoi(argv[4]), (int)atoi(argv[5]), argv[6]);return 0;\
  81. } \
  82. RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)
  83. /* 用于套壳调用函数,参数 char*, int, char* */
  84. #define DEF_FUN_PCHAR_INT_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
  85. int t_##name(int argc, char const *argv[]){\
  86. if(6 != argc) return -1;\
  87. name(argv[3], (int)atoi(argv[4]), argv[5]);return 0;\
  88. } \
  89. RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)
  90. /* 用于套壳调用函数,参数 char*, int, char*,int, int */
  91. #define DEF_FUN_PCHAR_INT_PCHAR_INT_INT(name, ...) void name ( __VA_ARGS__ ); \
  92. int t_##name(int argc, char const *argv[]){\
  93. if(8 != argc) return -1;\
  94. name(argv[3], (int)atoi(argv[4]), argv[5], (int)atoi(argv[6]), (int)atoi(argv[7]));return 0;\
  95. } \
  96. RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)
  97. /* 用于套壳调用函数,参数 int, const char*, uint16_t, uint32_t, const char* */
  98. #define DEF_FUN_INT_PCHAR_INT_INT_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
  99. int t_##name(int argc, char const *argv[]){\
  100. if(8 != argc) return -1;\
  101. name((int)atoi(argv[3]), argv[4], (uint16_t)atoi(argv[5]), (uint32_t)atoi(argv[6]), argv[7]);return 0;\
  102. } \
  103. RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)
  104. extern "C" DEF_FUN_VOID(amf0_test);
  105. extern "C" DEF_FUN_VOID(rtp_queue_test);
  106. extern "C" DEF_FUN_VOID(mpeg4_aac_test);
  107. extern "C" DEF_FUN_VOID(mpeg4_avc_test);
  108. extern "C" DEF_FUN_VOID(mpeg4_hevc_test);
  109. extern "C" DEF_FUN_VOID(mp3_header_test);
  110. extern "C" DEF_FUN_VOID(h264_mp4toannexb_test);
  111. extern "C" DEF_FUN_VOID(sdp_a_fmtp_test);
  112. extern "C" DEF_FUN_VOID(sdp_a_rtpmap_test);
  113. extern "C" DEF_FUN_VOID(sdp_a_webrtc_test);
  114. extern "C" DEF_FUN_VOID(rtsp_client_auth_test);
  115. extern "C" DEF_FUN_VOID(rtsp_header_range_test);
  116. extern "C" DEF_FUN_VOID(rtsp_header_rtp_info_test);
  117. extern "C" DEF_FUN_VOID(rtsp_header_transport_test);
  118. extern "C" DEF_FUN_VOID(http_header_host_test);
  119. extern "C" DEF_FUN_VOID(http_header_content_type_test);
  120. extern "C" DEF_FUN_VOID(http_header_authorization_test);
  121. extern "C" DEF_FUN_VOID(http_header_www_authenticate_test);
  122. extern "C" DEF_FUN_VOID(http_header_auth_test);
  123. extern "C" DEF_FUN_VOID(rtsp_example);
  124. extern "C" DEF_FUN_VOID(rtsp_push_server);
  125. extern "C" DEF_FUN_2PCHAR(rtsp_client_test, const char* host, const char* file);
  126. DEF_FUN_INT_PCHAR_INT_INT_PCHAR(rstp_demuxer_test, int payload, const char* encoding, uint16_t seq, uint32_t ssrc, const char* rtpfile);
  127. DEF_FUN_2PCHAR(rtsp_client_push_test, const char* host, const char* file);
  128. DEF_FUN_PCHAR(rtsp_client_input_test, const char* file);
  129. DEF_FUN_PCHAR(rtp_dump_test, const char* file);
  130. //DEF_FUN_PCHAR(rtp_header_ext_test, const char* rtpfile);
  131. DEF_FUN_VOID(rtp_payload_test);
  132. DEF_FUN_PCHAR(flv_parser_test, const char* flv);
  133. DEF_FUN_PCHAR(flv_read_write_test, const char* flv);
  134. DEF_FUN_2PCHAR(flv2ts_test, const char* inputFLV, const char* outputTS);
  135. DEF_FUN_2PCHAR(ts2flv_test, const char* inputTS, const char* outputFLV);
  136. DEF_FUN_2PCHAR(avc2flv_test, const char* inputH264, const char* outputFLV);
  137. DEF_FUN_2PCHAR(hevc2flv_test, const char* inputH265, const char* outputFLV);
  138. DEF_FUN_PCHAR(flv_reader_test, const char* file);
  139. DEF_FUN_2PCHAR(av1toflv_test, const char* obu, const char* outputFLV);
  140. DEF_FUN_PCHAR(av1_rtp_test, const char* low_overhead_bitstream_format_obu);
  141. extern "C" DEF_FUN_PCHAR(aom_av1_obu_test, const char* file);
  142. DEF_FUN_PCHAR(mov_2_flv_test, const char* mp4);
  143. DEF_FUN_PCHAR(mov_reader_test, const char* mp4);
  144. DEF_FUN_INT_INT_PCHAR_PCHAR(mov_writer_test, int w, int h, const char* inflv, const char* outmp4);
  145. DEF_FUN_INT_INT_PCHAR_PCHAR(fmp4_writer_test, int w, int h, const char* inflv, const char* outmp4);
  146. DEF_FUN_PCHAR_INT_INT_PCHAR(mov_writer_h264, const char* h264, int width, int height, const char* mp4);
  147. DEF_FUN_PCHAR_INT_INT_PCHAR(mov_writer_h265, const char* h265, int width, int height, const char* mp4);
  148. DEF_FUN_PCHAR_INT_INT_PCHAR(mov_writer_av1, const char* obu, int width, int height, const char* mp4);
  149. DEF_FUN_PCHAR_INT_PCHAR(mov_writer_audio, const char* audio, int type, const char* mp4);
  150. DEF_FUN_2PCHAR(fmp4_writer_test2, const char* mp4, const char* outmp4);
  151. DEF_FUN_PCHAR(mov_rtp_test, const char* mp4);
  152. DEF_FUN_PCHAR(mpeg_ts_dec_test, const char* file);
  153. DEF_FUN_PCHAR(mpeg_ts_test, const char* input);
  154. DEF_FUN_PCHAR(mpeg_ps_test, const char* input);
  155. DEF_FUN_PCHAR(flv_2_mpeg_ps_test, const char* flv);
  156. DEF_FUN_PCHAR(mpeg_ps_dec_test, const char* file);
  157. extern "C" DEF_FUN_PCHAR_INT(http_server_test, const char* ip, int port);
  158. DEF_FUN_PCHAR_INT_PCHAR_INT_INT(dash_dynamic_test, const char* ip, int port, const char* file, int width, int height);
  159. DEF_FUN_2PCHAR(dash_static_test, const char* mp4, const char* name);
  160. DEF_FUN_PCHAR_INT(hls_server_test, const char* ip, int port);
  161. DEF_FUN_PCHAR(hls_segmenter_flv, const char* file);
  162. #if defined(_HAVE_FFMPEG_)
  163. DEF_FUN_PCHAR(hls_segmenter_fmp4_test, const char* file);
  164. #endif
  165. DEF_FUN_4PCHAR(rtmp_play_test, const char* host, const char* app, const char* stream, const char* flv);
  166. DEF_FUN_4PCHAR(rtmp_publish_test, const char* host, const char* app, const char* stream, const char* flv);
  167. DEF_FUN_4PCHAR(rtmp_play_aio_test, const char* host, const char* app, const char* stream, const char* file);
  168. DEF_FUN_4PCHAR(rtmp_publish_aio_test, const char* host, const char* app, const char* stream, const char* file);
  169. DEF_FUN_PCHAR(rtmp_server_vod_test, const char* flv);
  170. DEF_FUN_PCHAR(rtmp_server_publish_test, const char* flv);
  171. DEF_FUN_PCHAR(rtmp_server_vod_aio_test, const char* flv);
  172. DEF_FUN_PCHAR(rtmp_server_publish_aio_test, const char* flv);
  173. DEF_FUN_PCHAR_INT(rtmp_server_forward_aio_test, const char* ip, int port);
  174. DEF_FUN_PCHAR(rtmp_server_input_test, const char* file);
  175. DEF_FUN_PCHAR(rtmp_input_test, const char* file);
  176. extern "C" DEF_FUN_VOID(sip_header_test);
  177. extern "C" DEF_FUN_VOID(sip_agent_test);
  178. DEF_FUN_VOID(sip_uac_message_test);
  179. DEF_FUN_VOID(sip_uas_message_test);
  180. DEF_FUN_VOID(sip_uac_test);
  181. DEF_FUN_VOID(sip_uas_test);
  182. DEF_FUN_VOID(sip_uac_test2);
  183. DEF_FUN_VOID(sip_uas_test2);
  184. DEF_FUN_PCHAR(sdp_test, const char* file);
  185. int binnary_diff(const char* file1, const char* file2);
  186. int main(int argc, const char* argv[])
  187. {
  188. T_RE_GET_ALL_REG();
  189. socket_init();
  190. if(argc < 3){
  191. usage(argc, argv);
  192. printf("run default test\n");
  193. printf( "****************************************\n");
  194. RE_RUN_REG("amf0_test", argc, argv);
  195. RE_RUN_REG("rtp_queue_test", argc, argv);
  196. RE_RUN_REG("mpeg4_aac_test", argc, argv);
  197. RE_RUN_REG("mpeg4_avc_test", argc, argv);
  198. RE_RUN_REG("mpeg4_hevc_test", argc, argv);
  199. RE_RUN_REG("mp3_header_test", argc, argv);
  200. RE_RUN_REG("h264_mp4toannexb_test", argc, argv);
  201. RE_RUN_REG("sdp_a_fmtp_test", argc, argv);
  202. RE_RUN_REG("sdp_a_rtpmap_test", argc, argv);
  203. RE_RUN_REG("sdp_a_webrtc_test", argc, argv);
  204. RE_RUN_REG("rtsp_header_range_test", argc, argv);
  205. RE_RUN_REG("rtsp_header_rtp_info_test", argc, argv);
  206. RE_RUN_REG("rtsp_header_transport_test", argc, argv);
  207. RE_RUN_REG("http_header_host_test", argc, argv);
  208. RE_RUN_REG("http_header_auth_test", argc, argv);
  209. RE_RUN_REG("http_header_content_type_test", argc, argv);
  210. RE_RUN_REG("http_header_authorization_test", argc, argv);
  211. RE_RUN_REG("http_header_www_authenticate_test", argc, argv);
  212. RE_RUN_REG("rtsp_client_auth_test", argc, argv);
  213. RE_RUN_REG("sip_header_test", argc, argv);
  214. RE_RUN_REG("sip_uac_message_test", argc, argv);
  215. RE_RUN_REG("sip_uas_message_test", argc, argv);
  216. goto EXIT;
  217. }
  218. printf("run %s\n", argv[2]);
  219. RE_RUN_REG(argv[2], argc, argv);
  220. EXIT:
  221. socket_cleanup();
  222. return 0;
  223. }