RyanMqttPublicApiParamCheckTest.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. #include "RyanMqttTest.h"
  2. static RyanMqttQos_e invalidQos()
  3. {
  4. static bool aa = true;
  5. if (aa)
  6. {
  7. aa = false;
  8. // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
  9. return (RyanMqttQos_e)(uintptr_t)10;
  10. }
  11. aa = true;
  12. return RyanMqttSubFail;
  13. }
  14. static RyanMqttError_e RyanMqttBaseApiParamCheckTest(void)
  15. {
  16. RyanMqttError_e result = RyanMqttSuccessError;
  17. RyanMqttClient_t *validClient = NULL;
  18. // 准备一个有效的客户端用于某些测试
  19. result = RyanMqttTestInit(&validClient, RyanMqttTrue, RyanMqttFalse, 120, NULL, NULL);
  20. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  21. result = RyanMqttInit(NULL);
  22. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  23. result = RyanMqttDestroy(NULL);
  24. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  25. // todo 可能增加状态判断
  26. result = RyanMqttStart(NULL);
  27. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  28. // todo 可能增加状态判断
  29. result = RyanMqttDisconnect(NULL, RyanMqttTrue);
  30. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  31. // todo 可能增加状态判断
  32. result = RyanMqttReconnect(NULL);
  33. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  34. // NULL客户端指针
  35. RyanMqttState_e state = RyanMqttGetState(NULL);
  36. RyanMqttCheckCodeNoReturn(state == RyanMqttInvalidState, RyanMqttFailedError, RyanMqttLog_e, { goto __exit; });
  37. result = RyanMqttGetKeepAliveRemain(NULL, NULL);
  38. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  39. uint32_t keepAliveRemain;
  40. // NULL客户端指针
  41. result = RyanMqttGetKeepAliveRemain(NULL, &keepAliveRemain);
  42. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  43. // NULL剩余时间指针
  44. result = RyanMqttGetKeepAliveRemain(validClient, NULL);
  45. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  46. // NULL客户端指针
  47. result = RyanMqttDiscardAckHandler(NULL, MQTT_PACKET_TYPE_PUBACK, 1);
  48. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  49. // 无效包ID (0 是无效的)
  50. result = RyanMqttDiscardAckHandler(validClient, MQTT_PACKET_TYPE_PUBACK, 0);
  51. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  52. // 超过最大包ID
  53. result = RyanMqttDiscardAckHandler(validClient, MQTT_PACKET_TYPE_PUBACK, RyanMqttMaxPacketId + 1);
  54. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  55. RyanMqttEventId_e eventId = RyanMqttEventConnected;
  56. // NULL客户端指针
  57. result = RyanMqttGetEventId(NULL, &eventId);
  58. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  59. // NULL eventId指针
  60. result = RyanMqttGetEventId(validClient, NULL);
  61. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  62. // NULL客户端指针
  63. result = RyanMqttRegisterEventId(NULL, RyanMqttEventConnected);
  64. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  65. // NULL客户端指针
  66. result = RyanMqttCancelEventId(NULL, RyanMqttEventConnected);
  67. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  68. // 清理资源
  69. if (validClient)
  70. {
  71. RyanMqttTestDestroyClient(validClient);
  72. }
  73. return RyanMqttSuccessError;
  74. __exit:
  75. // 清理资源
  76. if (validClient)
  77. {
  78. RyanMqttTestDestroyClient(validClient);
  79. }
  80. return RyanMqttFailedError;
  81. }
  82. static RyanMqttError_e RyanMqttLwtApiParamCheckTest(void)
  83. {
  84. RyanMqttError_e result = RyanMqttSuccessError;
  85. RyanMqttClient_t *validClient = NULL;
  86. // 准备一个有效的客户端用于某些测试
  87. result = RyanMqttTestInit(&validClient, RyanMqttTrue, RyanMqttFalse, 120, NULL, NULL);
  88. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  89. RyanMqttDisconnect(validClient, RyanMqttTrue);
  90. // 增加一个get接口
  91. // NULL客户端指针
  92. result = RyanMqttSetLwt(NULL, "test/lwt", "offline", 7, RyanMqttQos1, RyanMqttTrue);
  93. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  94. // NULL主题指针
  95. result = RyanMqttSetLwt(validClient, NULL, "offline", 7, RyanMqttQos1, RyanMqttTrue);
  96. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  97. // NULL负载但长度不为0
  98. result = RyanMqttSetLwt(validClient, "test/lwt", NULL, 7, RyanMqttQos1, RyanMqttTrue);
  99. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  100. // payloadLen 超长
  101. result = RyanMqttSetLwt(validClient, "test/lwt", "offline", RyanMqttMaxPayloadLen + 1, RyanMqttQos1,
  102. RyanMqttTrue);
  103. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  104. // 无效QoS
  105. result = RyanMqttSetLwt(validClient, "test/lwt", "offline", 7, invalidQos(), RyanMqttTrue);
  106. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  107. // 清理资源
  108. if (validClient)
  109. {
  110. RyanMqttTestDestroyClient(validClient);
  111. }
  112. return RyanMqttSuccessError;
  113. __exit:
  114. RyanMqttLog_e("result: %d", result);
  115. // 清理资源
  116. if (validClient)
  117. {
  118. RyanMqttTestDestroyClient(validClient);
  119. }
  120. return RyanMqttFailedError;
  121. }
  122. static RyanMqttError_e RyanMqttConfigApiParamCheckTest(void)
  123. {
  124. RyanMqttError_e result = RyanMqttSuccessError;
  125. RyanMqttClient_t *validClient = NULL;
  126. // 准备一个有效的客户端用于某些测试
  127. result = RyanMqttTestInit(&validClient, RyanMqttTrue, RyanMqttFalse, 120, NULL, NULL);
  128. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  129. RyanMqttDisconnect(validClient, RyanMqttTrue);
  130. // NULL客户端指针
  131. result = RyanMqttGetConfig(NULL, NULL);
  132. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  133. RyanMqttClientConfig_t *getConfig = NULL;
  134. /**
  135. * @brief RyanMqttGetConfig
  136. *
  137. */
  138. // NULL客户端指针
  139. result = RyanMqttGetConfig(NULL, &getConfig);
  140. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  141. // NULL配置指针
  142. result = RyanMqttGetConfig(validClient, NULL);
  143. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  144. // NULL配置指针
  145. result = RyanMqttFreeConfigFromGet(NULL);
  146. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  147. /**
  148. * @brief RyanMqttSetConfig
  149. *
  150. */
  151. RyanMqttClientConfig_t baseMqttConfig = {.clientId = RyanMqttClientId,
  152. .userName = RyanMqttUserName,
  153. .password = RyanMqttPassword,
  154. .host = RyanMqttHost,
  155. .port = RyanMqttPort,
  156. .taskName = "mqttThread",
  157. .taskPrio = 16,
  158. .taskStack = 4096,
  159. .mqttVersion = 4,
  160. .ackHandlerRepeatCountWarning = 6,
  161. .ackHandlerCountWarning = 60000,
  162. .autoReconnectFlag = RyanMqttTrue,
  163. .cleanSessionFlag = RyanMqttTrue,
  164. .reconnectTimeout = 3000,
  165. .recvTimeout = 2000,
  166. .sendTimeout = 1800,
  167. .ackTimeout = 10000,
  168. .keepaliveTimeoutS = 120,
  169. .mqttEventHandle = NULL,
  170. .userData = NULL};
  171. RyanMqttClientConfig_t mqttConfig = {0};
  172. // NULL客户端指针
  173. result = RyanMqttSetConfig(NULL, &mqttConfig);
  174. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  175. // NULL配置指针
  176. result = RyanMqttSetConfig(validClient, NULL);
  177. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  178. #define checkSetConfigParam(code) \
  179. do \
  180. { \
  181. RyanMqttMemcpy(&mqttConfig, &baseMqttConfig, sizeof(RyanMqttClientConfig_t)); \
  182. {code}; \
  183. result = RyanMqttSetConfig(validClient, &mqttConfig); \
  184. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, \
  185. { goto __exit; }); \
  186. } while (0)
  187. checkSetConfigParam({ mqttConfig.clientId = NULL; });
  188. checkSetConfigParam({ mqttConfig.host = NULL; });
  189. checkSetConfigParam({ mqttConfig.taskName = NULL; });
  190. checkSetConfigParam({
  191. mqttConfig.recvTimeout = 10;
  192. mqttConfig.keepaliveTimeoutS = 20 - 1;
  193. });
  194. checkSetConfigParam({
  195. mqttConfig.recvTimeout = 10;
  196. mqttConfig.sendTimeout = 11;
  197. });
  198. // 清理资源
  199. if (validClient)
  200. {
  201. RyanMqttTestDestroyClient(validClient);
  202. }
  203. return RyanMqttSuccessError;
  204. __exit:
  205. // 清理资源
  206. if (validClient)
  207. {
  208. RyanMqttTestDestroyClient(validClient);
  209. }
  210. return RyanMqttFailedError;
  211. }
  212. static RyanMqttError_e RyanMqttSubApiParamCheckTest(void)
  213. {
  214. RyanMqttError_e result = RyanMqttSuccessError;
  215. RyanMqttClient_t *validClient = NULL;
  216. // 准备一个有效的客户端用于某些测试
  217. result = RyanMqttTestInit(&validClient, RyanMqttTrue, RyanMqttFalse, 120, NULL, NULL);
  218. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  219. // NULL客户端指针
  220. result = RyanMqttSubscribe(NULL, "test/topic", RyanMqttQos1);
  221. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  222. // NULL主题指针
  223. result = RyanMqttSubscribe(validClient, NULL, RyanMqttQos1);
  224. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  225. // 无效QoS级别
  226. result = RyanMqttSubscribe(validClient, "test/topic", invalidQos());
  227. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  228. // 分配测试数据
  229. RyanMqttSubscribeData_t subscribeData[2] = {0};
  230. subscribeData[0].topic = "test/topic1";
  231. subscribeData[0].topicLen = strlen("test/topic1");
  232. subscribeData[0].qos = RyanMqttQos1;
  233. subscribeData[1].topic = "test/topic2";
  234. subscribeData[1].topicLen = strlen("test/topic2");
  235. subscribeData[1].qos = RyanMqttQos2;
  236. // NULL客户端指针
  237. result = RyanMqttSubscribeMany(NULL, 2, subscribeData);
  238. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  239. // 无效数量
  240. result = RyanMqttSubscribeMany(validClient, 0, subscribeData);
  241. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  242. result = RyanMqttSubscribeMany(validClient, -1, subscribeData);
  243. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  244. // NULL数据指针
  245. result = RyanMqttSubscribeMany(validClient, 2, NULL);
  246. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  247. for (uint32_t i = 0; i < getArraySize(subscribeData); i++)
  248. {
  249. // subscribeData 内数据无效
  250. subscribeData[i].topic = NULL;
  251. subscribeData[i].topicLen = strlen("test/topic2");
  252. subscribeData[i].qos = RyanMqttQos2;
  253. result = RyanMqttSubscribeMany(validClient, 2, subscribeData);
  254. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  255. // subscribeData 内数据无效
  256. subscribeData[i].topic = "test/topic2";
  257. subscribeData[i].topicLen = 0;
  258. subscribeData[i].qos = RyanMqttQos2;
  259. result = RyanMqttSubscribeMany(validClient, 2, subscribeData);
  260. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  261. // subscribeData 内数据无效
  262. subscribeData[i].topic = "test/topic2";
  263. subscribeData[i].topicLen = strlen("test/topic2");
  264. subscribeData[i].qos = invalidQos();
  265. result = RyanMqttSubscribeMany(validClient, 2, subscribeData);
  266. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  267. // 恢复 subscribeData 内数据
  268. subscribeData[i].topic = "test/topic2";
  269. subscribeData[i].topicLen = strlen("test/topic2");
  270. subscribeData[i].qos = RyanMqttQos2;
  271. }
  272. // NULL客户端指针
  273. result = RyanMqttUnSubscribe(NULL, "test/topic");
  274. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  275. // NULL主题指针
  276. result = RyanMqttUnSubscribe(validClient, NULL);
  277. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  278. // 分配测试数据
  279. RyanMqttUnSubscribeData_t unsubscribeData[2] = {0};
  280. unsubscribeData[0].topic = "test/topic1";
  281. unsubscribeData[0].topicLen = strlen("test/topic1");
  282. unsubscribeData[1].topic = "test/topic2";
  283. unsubscribeData[1].topicLen = strlen("test/topic2");
  284. // NULL客户端指针
  285. result = RyanMqttUnSubscribeMany(NULL, 2, unsubscribeData);
  286. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  287. // 无效数量
  288. result = RyanMqttUnSubscribeMany(validClient, 0, unsubscribeData);
  289. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  290. // NULL数据指针
  291. result = RyanMqttUnSubscribeMany(validClient, 2, NULL);
  292. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  293. for (uint32_t i = 0; i < getArraySize(unsubscribeData); i++)
  294. {
  295. // unsubscribeData 内数据无效
  296. unsubscribeData[i].topic = NULL;
  297. unsubscribeData[i].topicLen = strlen("test/topic2");
  298. result = RyanMqttUnSubscribeMany(validClient, 2, unsubscribeData);
  299. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  300. // unsubscribeData 内数据无效
  301. unsubscribeData[i].topic = "test/topic2";
  302. unsubscribeData[i].topicLen = 0;
  303. result = RyanMqttUnSubscribeMany(validClient, 2, unsubscribeData);
  304. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  305. // 恢复 unsubscribeData 内数据
  306. unsubscribeData[i].topic = "test/topic2";
  307. unsubscribeData[i].topicLen = strlen("test/topic2");
  308. }
  309. /**
  310. * @brief
  311. *
  312. */
  313. RyanMqttMsgHandler_t *msgHandles = NULL;
  314. int32_t subscribeNum = 0;
  315. int32_t totalCount = 0;
  316. // NULL客户端指针
  317. result = RyanMqttGetSubscribeSafe(NULL, &msgHandles, &subscribeNum);
  318. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  319. // NULL消息句柄指针
  320. result = RyanMqttGetSubscribeSafe(validClient, NULL, &subscribeNum);
  321. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  322. // NULL数量指针
  323. result = RyanMqttGetSubscribeSafe(validClient, &msgHandles, NULL);
  324. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  325. // NULL指针但数量不为0
  326. result = RyanMqttSafeFreeSubscribeResources(NULL, 5);
  327. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  328. // NULL客户端指针
  329. result = RyanMqttGetSubscribeTotalCount(NULL, &totalCount);
  330. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  331. // NULL总数指针
  332. result = RyanMqttGetSubscribeTotalCount(validClient, NULL);
  333. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e,
  334. { goto __exit; }); // 清理资源
  335. /**
  336. * @brief
  337. *
  338. */
  339. RyanMqttMsgHandler_t msgHandlesStatic[3] = {0};
  340. RyanMqttGetSubscribe(NULL, msgHandlesStatic, getArraySize(msgHandlesStatic), &subscribeNum);
  341. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  342. RyanMqttGetSubscribe(validClient, NULL, getArraySize(msgHandlesStatic), &subscribeNum);
  343. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  344. RyanMqttGetSubscribe(validClient, msgHandlesStatic, 0, &subscribeNum);
  345. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  346. RyanMqttGetSubscribe(validClient, msgHandlesStatic, getArraySize(msgHandlesStatic), NULL);
  347. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  348. if (validClient)
  349. {
  350. RyanMqttTestDestroyClient(validClient);
  351. }
  352. return RyanMqttSuccessError;
  353. __exit:
  354. // 清理资源
  355. if (validClient)
  356. {
  357. RyanMqttTestDestroyClient(validClient);
  358. }
  359. return RyanMqttFailedError;
  360. }
  361. static RyanMqttError_e RyanMqttPubApiParamCheckTest(void)
  362. {
  363. RyanMqttError_e result = RyanMqttSuccessError;
  364. RyanMqttClient_t *validClient = NULL;
  365. // 准备一个有效的客户端用于某些测试
  366. result = RyanMqttTestInit(&validClient, RyanMqttTrue, RyanMqttFalse, 120, NULL, NULL);
  367. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  368. // NULL客户端指针
  369. result = RyanMqttPublish(NULL, "test/topic", "payload", 7, RyanMqttQos0, RyanMqttFalse);
  370. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  371. // NULL主题指针
  372. result = RyanMqttPublish(validClient, NULL, "payload", 7, RyanMqttQos0, RyanMqttFalse);
  373. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  374. // NULL负载指针但长度不为0
  375. result = RyanMqttPublish(validClient, "test/topic", NULL, 7, RyanMqttQos0, RyanMqttFalse);
  376. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  377. // 无效QoS级别
  378. result = RyanMqttPublish(validClient, "test/topic", "payload", 7, invalidQos(), RyanMqttFalse);
  379. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  380. // 超大负载长度
  381. result = RyanMqttPublish(validClient, "test/topic", "payload", RyanMqttMaxPayloadLen + 1, RyanMqttQos0,
  382. RyanMqttFalse);
  383. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  384. // NULL客户端指针
  385. result = RyanMqttPublishWithUserData(NULL, "test/topic", 10, "payload", 7, RyanMqttQos1, RyanMqttFalse, NULL);
  386. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  387. // NULL主题指针
  388. result = RyanMqttPublishWithUserData(validClient, NULL, 10, "payload", 7, RyanMqttQos1, RyanMqttFalse, NULL);
  389. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  390. // 主题长度为0
  391. result = RyanMqttPublishWithUserData(validClient, "test/topic", 0, "payload", 7, RyanMqttQos1, RyanMqttFalse,
  392. NULL);
  393. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  394. // 无效QoS级别
  395. result = RyanMqttPublishWithUserData(validClient, "test/topic", strlen("test/topic"), "payload", 7,
  396. invalidQos(), RyanMqttFalse, NULL);
  397. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e,
  398. { goto __exit; }); // 清理资源
  399. // 负载长度>0但负载指针为NULL
  400. result = RyanMqttPublishWithUserData(validClient, "test/topic", strlen("test/topic"), NULL, 7, RyanMqttQos1,
  401. RyanMqttFalse, NULL);
  402. RyanMqttCheckCodeNoReturn(RyanMqttParamInvalidError == result, result, RyanMqttLog_e, { goto __exit; });
  403. if (validClient)
  404. {
  405. RyanMqttTestDestroyClient(validClient);
  406. }
  407. return RyanMqttSuccessError;
  408. __exit:
  409. // 清理资源
  410. if (validClient)
  411. {
  412. RyanMqttTestDestroyClient(validClient);
  413. }
  414. return RyanMqttFailedError;
  415. }
  416. RyanMqttError_e RyanMqttPublicApiParamCheckTest(void)
  417. {
  418. RyanMqttError_e result = RyanMqttSuccessError;
  419. result = RyanMqttBaseApiParamCheckTest();
  420. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  421. checkMemory;
  422. result = RyanMqttLwtApiParamCheckTest();
  423. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  424. checkMemory;
  425. result = RyanMqttConfigApiParamCheckTest();
  426. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  427. checkMemory;
  428. result = RyanMqttSubApiParamCheckTest();
  429. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  430. checkMemory;
  431. result = RyanMqttPubApiParamCheckTest();
  432. RyanMqttCheckCodeNoReturn(RyanMqttSuccessError == result, result, RyanMqttLog_e, { goto __exit; });
  433. checkMemory;
  434. return RyanMqttSuccessError;
  435. __exit:
  436. return RyanMqttFailedError;
  437. }