xref: /nrf52832-nimble/rt-thread/components/net/lwip-2.1.0/test/unit/mqtt/test_mqtt.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero #include "test_mqtt.h"
2*10465441SEvalZero 
3*10465441SEvalZero #include "lwip/pbuf.h"
4*10465441SEvalZero #include "lwip/apps/mqtt.h"
5*10465441SEvalZero #include "lwip/apps/mqtt_priv.h"
6*10465441SEvalZero #include "lwip/netif.h"
7*10465441SEvalZero 
8*10465441SEvalZero const ip_addr_t test_mqtt_local_ip = IPADDR4_INIT_BYTES(192, 168, 1, 1);
9*10465441SEvalZero const ip_addr_t test_mqtt_remote_ip = IPADDR4_INIT_BYTES(192, 168, 1, 2);
10*10465441SEvalZero const ip_addr_t test_mqtt_netmask = IPADDR4_INIT_BYTES(255, 255, 255, 0);
11*10465441SEvalZero 
test_mqtt_netif_output(struct netif * netif,struct pbuf * p,const ip4_addr_t * ipaddr)12*10465441SEvalZero static err_t test_mqtt_netif_output(struct netif *netif, struct pbuf *p,
13*10465441SEvalZero        const ip4_addr_t *ipaddr)
14*10465441SEvalZero {
15*10465441SEvalZero   LWIP_UNUSED_ARG(netif);
16*10465441SEvalZero   LWIP_UNUSED_ARG(ipaddr);
17*10465441SEvalZero   LWIP_UNUSED_ARG(p);
18*10465441SEvalZero   return ERR_OK;
19*10465441SEvalZero }
20*10465441SEvalZero 
21*10465441SEvalZero static void
test_mqtt_init_netif(struct netif * netif,const ip_addr_t * ip_addr,const ip_addr_t * netmask)22*10465441SEvalZero test_mqtt_init_netif(struct netif *netif, const ip_addr_t *ip_addr, const ip_addr_t *netmask)
23*10465441SEvalZero {
24*10465441SEvalZero   struct netif *n;
25*10465441SEvalZero   memset(netif, 0, sizeof(struct netif));
26*10465441SEvalZero   netif->output = test_mqtt_netif_output;
27*10465441SEvalZero   netif->flags |= NETIF_FLAG_UP | NETIF_FLAG_LINK_UP;
28*10465441SEvalZero   ip_addr_copy_from_ip4(netif->netmask, *ip_2_ip4(netmask));
29*10465441SEvalZero   ip_addr_copy_from_ip4(netif->ip_addr, *ip_2_ip4(ip_addr));
30*10465441SEvalZero   for (n = netif_list; n != NULL; n = n->next) {
31*10465441SEvalZero     if (n == netif) {
32*10465441SEvalZero       return;
33*10465441SEvalZero     }
34*10465441SEvalZero   }
35*10465441SEvalZero   netif->next = NULL;
36*10465441SEvalZero   netif_list = netif;
37*10465441SEvalZero }
38*10465441SEvalZero 
39*10465441SEvalZero /* Setups/teardown functions */
40*10465441SEvalZero static struct netif *old_netif_list;
41*10465441SEvalZero static struct netif *old_netif_default;
42*10465441SEvalZero 
43*10465441SEvalZero static void
mqtt_setup(void)44*10465441SEvalZero mqtt_setup(void)
45*10465441SEvalZero {
46*10465441SEvalZero   old_netif_list = netif_list;
47*10465441SEvalZero   old_netif_default = netif_default;
48*10465441SEvalZero   netif_list = NULL;
49*10465441SEvalZero   netif_default = NULL;
50*10465441SEvalZero   lwip_check_ensure_no_alloc(SKIP_POOL(MEMP_SYS_TIMEOUT));
51*10465441SEvalZero }
52*10465441SEvalZero 
53*10465441SEvalZero static void
mqtt_teardown(void)54*10465441SEvalZero mqtt_teardown(void)
55*10465441SEvalZero {
56*10465441SEvalZero   netif_list = NULL;
57*10465441SEvalZero   netif_default = NULL;
58*10465441SEvalZero   /* restore netif_list for next tests (e.g. loopif) */
59*10465441SEvalZero   netif_list = old_netif_list;
60*10465441SEvalZero   netif_default = old_netif_default;
61*10465441SEvalZero   lwip_check_ensure_no_alloc(SKIP_POOL(MEMP_SYS_TIMEOUT));
62*10465441SEvalZero }
63*10465441SEvalZero 
test_mqtt_connection_cb(mqtt_client_t * client,void * arg,mqtt_connection_status_t status)64*10465441SEvalZero static void test_mqtt_connection_cb(mqtt_client_t *client, void *arg, mqtt_connection_status_t status)
65*10465441SEvalZero {
66*10465441SEvalZero   LWIP_UNUSED_ARG(client);
67*10465441SEvalZero   LWIP_UNUSED_ARG(arg);
68*10465441SEvalZero   LWIP_UNUSED_ARG(status);
69*10465441SEvalZero }
70*10465441SEvalZero 
START_TEST(basic_connect)71*10465441SEvalZero START_TEST(basic_connect)
72*10465441SEvalZero {
73*10465441SEvalZero   mqtt_client_t* client;
74*10465441SEvalZero   struct netif netif;
75*10465441SEvalZero   err_t err;
76*10465441SEvalZero   struct mqtt_connect_client_info_t client_info = {
77*10465441SEvalZero     "dumm",
78*10465441SEvalZero     NULL, NULL,
79*10465441SEvalZero     10,
80*10465441SEvalZero     NULL, NULL, 0, 0
81*10465441SEvalZero   };
82*10465441SEvalZero   struct pbuf *p;
83*10465441SEvalZero   unsigned char rxbuf[] = {0x20, 0x02, 0x00, 0x00};
84*10465441SEvalZero   LWIP_UNUSED_ARG(_i);
85*10465441SEvalZero 
86*10465441SEvalZero   test_mqtt_init_netif(&netif, &test_mqtt_local_ip, &test_mqtt_netmask);
87*10465441SEvalZero 
88*10465441SEvalZero   client = mqtt_client_new();
89*10465441SEvalZero   fail_unless(client != NULL);
90*10465441SEvalZero   err = mqtt_client_connect(client, &test_mqtt_remote_ip, 1234, test_mqtt_connection_cb, NULL, &client_info);
91*10465441SEvalZero   fail_unless(err == ERR_OK);
92*10465441SEvalZero 
93*10465441SEvalZero   client->conn->connected(client->conn->callback_arg, client->conn, ERR_OK);
94*10465441SEvalZero   p = pbuf_alloc(PBUF_RAW, sizeof(rxbuf), PBUF_REF);
95*10465441SEvalZero   fail_unless(p != NULL);
96*10465441SEvalZero   p->payload = rxbuf;
97*10465441SEvalZero   if (client->conn->recv(client->conn->callback_arg, client->conn, p, ERR_OK) != ERR_OK) {
98*10465441SEvalZero     pbuf_free(p);
99*10465441SEvalZero   }
100*10465441SEvalZero 
101*10465441SEvalZero   mqtt_disconnect(client);
102*10465441SEvalZero   /* fixme: mqtt_client_fre() is missing... */
103*10465441SEvalZero   mem_free(client);
104*10465441SEvalZero }
105*10465441SEvalZero END_TEST
106*10465441SEvalZero 
mqtt_suite(void)107*10465441SEvalZero Suite* mqtt_suite(void)
108*10465441SEvalZero {
109*10465441SEvalZero   testfunc tests[] = {
110*10465441SEvalZero     TESTFUNC(basic_connect),
111*10465441SEvalZero   };
112*10465441SEvalZero   return create_suite("MQTT", tests, sizeof(tests)/sizeof(testfunc), mqtt_setup, mqtt_teardown);
113*10465441SEvalZero }
114