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