int main(int argc, char** argv) { int rc = 0; int mysock; unsigned char buf[200]; int buflen = sizeof(buf); unsigned char payload[16]; int payloadlen = 0; int len = 0; int qos = 0; int retained = 0; short packetid = 0; char ascii = 0; // char *topicname = "a long topic name"; char *host = "127.0.0.1"; int port = 1884; int i = 0; MQTTSNString msstr = {0}; MQTTSNPacket_connectData options = MQTTSNPacket_connectData_initializer; mysock = transport_open(); if(mysock < 0) return mysock; if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); TLOG("Sending to hostname %s port %d\n", host, port); options.clientID.cstring = "testclientid_case1"; len = MQTTSNSerialize_connect(buf, buflen, &options); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for connack */ if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_CONNACK) { int connack_rc = -1; if (MQTTSNDeserialize_connack(&connack_rc, buf, buflen) != 1 || connack_rc != 0) { TLOG("Unable to connect, return code %d\n", connack_rc); goto exit; } else TLOG("connected rc %d\n", connack_rc); } else goto exit; len = MQTTSNSerialize_disconnect(buf, buflen, 5); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for DISCONNECT */ if ((rc = MQTTSNPacket_read(buf, buflen, transport_getdata)) == MQTTSN_DISCONNECT) { int duration = 0; if (MQTTSNDeserialize_disconnect(&duration, buf, buflen) != 1) { TLOG("Unable to diconnect, return code %d\n", duration); goto exit; } else TLOG("duration %d\n", duration); } else { TLOG("rc %d\n", rc); goto exit; } sleep(2); msstr.cstring = "testclientid_case1"; len = MQTTSNSerialize_pingreq(buf, buflen, msstr); rc = transport_sendPacketBuffer(host, port, buf, len); /* wait for PINGRSP */ if (MQTTSNPacket_read(buf, buflen, transport_getdata) == MQTTSN_PINGRESP) { if (MQTTSNDeserialize_pingresp(buf, buflen) != 1) { TLOG("Unable to ping\n"); goto exit; } else TLOG("get pingresp\n"); } else goto exit; mark_result(argv[0], RESULT_PASS); transport_close(); return 0; exit: mark_result(argv[0], RESULT_FAIL); transport_close(); return 0; }
int test1(struct Options options) { MQTTSNPacket_connectData data = MQTTSNPacket_connectData_initializer; MQTTSNPacket_connectData data_after = MQTTSNPacket_connectData_initializer; int rc = 0; unsigned char buf[100]; int buflen = sizeof(buf); MQTTSNString clientid = MQTTSNString_initializer, clientid_after = MQTTSNString_initializer; int duration_after = -1; fprintf(xml, "<testcase classname=\"test1\" name=\"de/serialization\""); global_start_time = start_clock(); failures = 0; MyLog(LOGA_INFO, "Starting test 1 - serialization of connect and back"); data.clientID.cstring = "me too"; data.duration = 20; data.cleansession = 1; data.willFlag = 1; rc = MQTTSNSerialize_connect(buf, buflen, &data); assert("good rc from serialize connect", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_connect(&data_after, buf, buflen); assert("good rc from deserialize connect", rc == 1, "rc was %d\n", rc); /* data after should be the same as data before */ rc = checkConnectPackets(&data, &data_after); assert("packets should be the same", rc == 1, "packets were different\n", rc); /* Pingreq without clientid */ rc = MQTTSNSerialize_pingreq(buf, buflen, clientid); assert("good rc from serialize pingreq", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_pingreq(&clientid_after, buf, buflen); assert("good rc from deserialize pingreq", rc == 1, "rc was %d\n", rc); /* data after should be the same as data before */ assert("ClientIDs should be the same", checkMQTTSNStrings(clientid, clientid_after), "ClientIDs were different\n", rc); /* Pingreq with clientid */ clientid.cstring = "this is me"; rc = MQTTSNSerialize_pingreq(buf, buflen, clientid); assert("good rc from serialize pingreq", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_pingreq(&clientid_after, buf, buflen); assert("good rc from deserialize pingreq", rc == 1, "rc was %d\n", rc); /* data after should be the same as data before */ assert("ClientIDs should be the same", checkMQTTSNStrings(clientid, clientid_after), "ClientIDs were different\n", rc); rc = MQTTSNSerialize_pingresp(buf, buflen); assert("good rc from serialize pingresp", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_pingresp(buf, buflen); assert("good rc from deserialize pingresp", rc == 1, "rc was %d\n", rc); /* Disconnect without duration */ rc = MQTTSNSerialize_disconnect(buf, buflen, 0); assert("good rc from serialize disconnect", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_disconnect(&duration_after, buf, buflen); assert("good rc from deserialize disconnect", rc == 1, "rc was %d\n", rc); /* data after should be the same as data before */ assert("durations should be the same", 0 == duration_after, "durations were different\n", rc); /* Disconnect with duration */ rc = MQTTSNSerialize_disconnect(buf, buflen, 33); assert("good rc from serialize disconnect", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_disconnect(&duration_after, buf, buflen); assert("good rc from deserialize disconnect", rc == 1, "rc was %d\n", rc); /* data after should be the same as data before */ assert("durations should be the same", 33 == duration_after, "durations were different\n", rc); /* Pingreq with clientid */ clientid.cstring = "this is me"; rc = MQTTSNSerialize_pingreq(buf, buflen, clientid); assert("good rc from serialize pingreq", rc > 0, "rc was %d\n", rc); rc = MQTTSNDeserialize_pingreq(&clientid_after, buf, buflen); assert("good rc from deserialize pingreq", rc == 1, "rc was %d\n", rc); /* exit: */ MyLog(LOGA_INFO, "TEST1: test %s. %d tests run, %d failures.", (failures == 0) ? "passed" : "failed", tests, failures); write_test_result(); return failures; }