123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "test_mqtt.h"
- #include "lwip/pbuf.h"
- #include "lwip/apps/mqtt.h"
- #include "lwip/apps/mqtt_priv.h"
- #include "lwip/netif.h"
- const ip_addr_t test_mqtt_local_ip = IPADDR4_INIT_BYTES(192, 168, 1, 1);
- const ip_addr_t test_mqtt_remote_ip = IPADDR4_INIT_BYTES(192, 168, 1, 2);
- const ip_addr_t test_mqtt_netmask = IPADDR4_INIT_BYTES(255, 255, 255, 0);
- static err_t test_mqtt_netif_output(struct netif *netif, struct pbuf *p,
- const ip4_addr_t *ipaddr)
- {
- LWIP_UNUSED_ARG(netif);
- LWIP_UNUSED_ARG(ipaddr);
- LWIP_UNUSED_ARG(p);
- return ERR_OK;
- }
- static void
- test_mqtt_init_netif(struct netif *netif, const ip_addr_t *ip_addr, const ip_addr_t *netmask)
- {
- struct netif *n;
- memset(netif, 0, sizeof(struct netif));
- netif->output = test_mqtt_netif_output;
- netif->flags |= NETIF_FLAG_UP | NETIF_FLAG_LINK_UP;
- ip_addr_copy_from_ip4(netif->netmask, *ip_2_ip4(netmask));
- ip_addr_copy_from_ip4(netif->ip_addr, *ip_2_ip4(ip_addr));
- for (n = netif_list; n != NULL; n = n->next) {
- if (n == netif) {
- return;
- }
- }
- netif->next = NULL;
- netif_list = netif;
- }
- /* Setups/teardown functions */
- static struct netif *old_netif_list;
- static struct netif *old_netif_default;
- static void
- mqtt_setup(void)
- {
- old_netif_list = netif_list;
- old_netif_default = netif_default;
- netif_list = NULL;
- netif_default = NULL;
- lwip_check_ensure_no_alloc(SKIP_POOL(MEMP_SYS_TIMEOUT));
- }
- static void
- mqtt_teardown(void)
- {
- netif_list = NULL;
- netif_default = NULL;
- /* restore netif_list for next tests (e.g. loopif) */
- netif_list = old_netif_list;
- netif_default = old_netif_default;
- lwip_check_ensure_no_alloc(SKIP_POOL(MEMP_SYS_TIMEOUT));
- }
- static void test_mqtt_connection_cb(mqtt_client_t *client, void *arg, mqtt_connection_status_t status)
- {
- LWIP_UNUSED_ARG(client);
- LWIP_UNUSED_ARG(arg);
- LWIP_UNUSED_ARG(status);
- }
- START_TEST(basic_connect)
- {
- mqtt_client_t* client;
- struct netif netif;
- err_t err;
- struct mqtt_connect_client_info_t client_info = {
- "dumm",
- NULL, NULL,
- 10,
- NULL, NULL, 0, 0
- };
- struct pbuf *p;
- unsigned char rxbuf[] = {0x20, 0x02, 0x00, 0x00};
- LWIP_UNUSED_ARG(_i);
- test_mqtt_init_netif(&netif, &test_mqtt_local_ip, &test_mqtt_netmask);
- client = mqtt_client_new();
- fail_unless(client != NULL);
- err = mqtt_client_connect(client, &test_mqtt_remote_ip, 1234, test_mqtt_connection_cb, NULL, &client_info);
- fail_unless(err == ERR_OK);
- client->conn->connected(client->conn->callback_arg, client->conn, ERR_OK);
- p = pbuf_alloc(PBUF_RAW, sizeof(rxbuf), PBUF_REF);
- fail_unless(p != NULL);
- p->payload = rxbuf;
- /* since we hack the rx path, we have to hack the rx window, too: */
- client->conn->rcv_wnd -= p->tot_len;
- if (client->conn->recv(client->conn->callback_arg, client->conn, p, ERR_OK) != ERR_OK) {
- pbuf_free(p);
- }
- mqtt_disconnect(client);
- /* fixme: mqtt_client_fre() is missing... */
- mem_free(client);
- }
- END_TEST
- Suite* mqtt_suite(void)
- {
- testfunc tests[] = {
- TESTFUNC(basic_connect),
- };
- return create_suite("MQTT", tests, sizeof(tests)/sizeof(testfunc), mqtt_setup, mqtt_teardown);
- }
|