TEST_C(YieldTests, YieldNetworkDisconnectedNeverConnected) { AWS_IoT_Client tempIotClient; IoT_Error_t rc; InitMQTTParamsSetup(&initParams, AWS_IOT_MQTT_HOST, AWS_IOT_MQTT_PORT, false, iot_tests_unit_disconnect_handler); rc = aws_iot_mqtt_init(&tempIotClient, &initParams); CHECK_EQUAL_C_INT(SUCCESS, rc); rc = aws_iot_mqtt_yield(&tempIotClient, 1000); CHECK_EQUAL_C_INT(NETWORK_DISCONNECTED_ERROR, rc); }
/* F:7 - Disconnect, with set handler and invoked on disconnect */ TEST_C(DisconnectTests, SetHandlerAndInvokedOnDisconnect) { bool connected = false; bool currentAutoReconnectStatus = false; int i; int j; int attempt = 3; uint32_t dcCount = 0; IoT_Error_t rc = SUCCESS; IOT_DEBUG("-->Running Disconnect Tests - F:7 - Disconnect, with set handler and invoked on disconnect \n"); handlerInvoked = false; InitMQTTParamsSetup(&initParams, "localhost", AWS_IOT_MQTT_PORT, false, NULL); rc = aws_iot_mqtt_init(&iotClient, &initParams); CHECK_EQUAL_C_INT(SUCCESS, rc); ConnectMQTTParamsSetup(&connectParams, AWS_IOT_MQTT_CLIENT_ID, (uint16_t) strlen(AWS_IOT_MQTT_CLIENT_ID)); connectParams.keepAliveIntervalInSec = 5; setTLSRxBufferForConnack(&connectParams, 0, 0); rc = aws_iot_mqtt_connect(&iotClient, &connectParams); CHECK_EQUAL_C_INT(SUCCESS, rc); aws_iot_mqtt_set_disconnect_handler(&iotClient, disconnectTestHandler, NULL); aws_iot_mqtt_autoreconnect_set_status(&iotClient, true); IOT_DEBUG("Current Keep Alive Interval is set to %d sec.\n", connectParams.keepAliveIntervalInSec); currentAutoReconnectStatus = aws_iot_is_autoreconnect_enabled(&iotClient); connected = aws_iot_mqtt_is_client_connected(&iotClient); CHECK_EQUAL_C_INT(1, connected); aws_iot_mqtt_autoreconnect_set_status(&iotClient, false); // 3 cycles of keep alive time expiring // verify a ping request is sent and give a ping response for(i = 0; i < attempt; i++) { /* Set TLS buffer for ping response */ ResetTLSBuffer(); setTLSRxBufferForPingresp(); for(j = 0; j <= connectParams.keepAliveIntervalInSec; j++) { sleep(1); rc = aws_iot_mqtt_yield(&iotClient, 100); CHECK_EQUAL_C_INT(SUCCESS, rc); } CHECK_EQUAL_C_INT(1, isLastTLSTxMessagePingreq()); } ResetTLSBuffer(); // keepalive() waits for 1/2 of keepalive time after sending ping request // to receive a pingresponse before determining the connection is not alive // wait for keepalive time and then yield() sleep(connectParams.keepAliveIntervalInSec); rc = aws_iot_mqtt_yield(&iotClient, 100); CHECK_EQUAL_C_INT(NETWORK_DISCONNECTED_ERROR, rc); CHECK_EQUAL_C_INT(1, isLastTLSTxMessageDisconnect()); connected = aws_iot_mqtt_is_client_connected(&iotClient); CHECK_EQUAL_C_INT(0, connected); CHECK_EQUAL_C_INT(true, handlerInvoked); dcCount = aws_iot_mqtt_get_network_disconnected_count(&iotClient); CHECK_C(1 == dcCount); aws_iot_mqtt_reset_network_disconnected_count(&iotClient); dcCount = aws_iot_mqtt_get_network_disconnected_count(&iotClient); CHECK_C(0 == dcCount); ResetTLSBuffer(); aws_iot_mqtt_autoreconnect_set_status(&iotClient, currentAutoReconnectStatus); IOT_DEBUG("-->Success - F:7 - Disconnect, with set handler and invoked on disconnect \n"); }