Beispiel #1
0
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;
}
Beispiel #2
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;
}