Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 /* 00002 * Copyright (c) 2019, ARM Limited, All Rights Reserved 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); you may 00006 * not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 00013 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 00018 #include "mbed.h" 00019 #include "mqtt_tests.h" 00020 #include "greentea-client/test_env.h" 00021 #include "utest.h" 00022 00023 using namespace utest::v1; 00024 00025 #if !defined(MBEDTLS_SSL_CLI_C) && MBED_CONF_MBED_MQTT_TESTS_TLS_ENABLE 00026 #warning "Cannot run TLS tests (MBED_CONF_MBED_MQTT_TESTS_TLS_ENABLE) with TLS disabled (no MBEDTLS_SSL_CLI_C)" 00027 #define MBED_CONF_MBED_MQTT_TESTS_TLS_ENABLE false 00028 #endif 00029 00030 const char *mqtt_global::SSL_CA_PEM = 00031 00032 #ifdef MQTT_TESTS_CA_CERT_FLESPI 00033 00034 /* mqtt.flespi.io - requires token as username! */ 00035 "-----BEGIN CERTIFICATE-----\n" 00036 "MIIGzDCCBbSgAwIBAgIMPFEC2JrizEiAhCVqMA0GCSqGSIb3DQEBCwUAMEwxCzAJ\n" 00037 "BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSIwIAYDVQQDExlB\n" 00038 "bHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcyMB4XDTE3MTIxMTEyMjgzN1oXDTIwMTIx\n" 00039 "MTEyMjgzN1owOTEhMB8GA1UECxMYRG9tYWluIENvbnRyb2wgVmFsaWRhdGVkMRQw\n" 00040 "EgYDVQQDDAsqLmZsZXNwaS5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" 00041 "ggEBAMVsit1Mh2Ytyym51hFaMcryuiJxl56TFCaeBeppimNw9Fc43xFrWd9yyEp3\n" 00042 "BuWHjd29srtOBrThImXoCfbcSy7NpzlOSJlShhBfpyNiodE6N6DkHOisUibhWwj2\n" 00043 "otR5VYmP7AQPzpfaKhM0CRcAB733X5Yd/stvbCVQB9069Zyd+lHteL+zKR73muFA\n" 00044 "DYZp8angPB9m6fJwbW6LMsFjt19cB31HrDbFg8VXxkgJ/7F988dyHcuReEJTyI+C\n" 00045 "XbW9vFyF+/RYm0Gjha3FZcXEV+W1VwP/ZIjiZzlYCxUM72yr96Pfw2X3HG+D3v0t\n" 00046 "/uOoCZGXUm7hJtjPXirhFwV0o7UCAwEAAaOCA78wggO7MA4GA1UdDwEB/wQEAwIF\n" 00047 "oDCBiQYIKwYBBQUHAQEEfTB7MEIGCCsGAQUFBzAChjZodHRwOi8vc2VjdXJlMi5h\n" 00048 "bHBoYXNzbC5jb20vY2FjZXJ0L2dzYWxwaGFzaGEyZzJyMS5jcnQwNQYIKwYBBQUH\n" 00049 "MAGGKWh0dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9nc2FscGhhc2hhMmcyMFcG\n" 00050 "A1UdIARQME4wQgYKKwYBBAGgMgEKCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3\n" 00051 "dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAIBgZngQwBAgEwCQYDVR0TBAIw\n" 00052 "ADA+BgNVHR8ENzA1MDOgMaAvhi1odHRwOi8vY3JsMi5hbHBoYXNzbC5jb20vZ3Mv\n" 00053 "Z3NhbHBoYXNoYTJnMi5jcmwwIQYDVR0RBBowGIILKi5mbGVzcGkuaW+CCWZsZXNw\n" 00054 "aS5pbzAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFOKx\n" 00055 "KLsJ/+eKGfPhv553Hwwh43cMMB8GA1UdIwQYMBaAFPXN1TwIUPlqTzq3l9pWg+Zp\n" 00056 "0mj3MIIB9QYKKwYBBAHWeQIEAgSCAeUEggHhAd8AdgDd6x0reg1PpiCLga2BaHB+\n" 00057 "Lo6dAdVciI09EcTNtuy+zAAAAWBFjG/AAAAEAwBHMEUCIQDRPNudq8fp8HvpMFDN\n" 00058 "pvxiMRhYqgVTUhTYr7KJc30dBQIgZRgSp3ytL9kfGtJmGDfXYp6ffyZO1JJnbSd3\n" 00059 "BF2GSC4AdQBWFAaaL9fC7NP14b1Esj7HRna5vJkRXMDvlJhV1onQ3QAAAWBFjHAY\n" 00060 "AAAEAwBGMEQCICIqW+E4s6O2FbiNqh7li0kMLo1zOKrfmEitnSKIx2DbAiBhtxsd\n" 00061 "3e97ravHoGAW3yXRF3jwezfEwyRQ3xXHA98BNAB2AKS5CZC0GFgUh7sTosxncAo8\n" 00062 "NZgE+RvfuON3zQ7IDdwQAAABYEWMcpQAAAQDAEcwRQIgJ0EiJuYsYOeyziLXrN+C\n" 00063 "dFmaDNyPGbLFWm5VqCi1OpcCIQDTM7TyakLFmBXrEkeJXuOH+ECJ2l4ZVIcoGrdM\n" 00064 "UahOCgB2ALvZ37wfinG1k5Qjl6qSe0c4V5UKq1LoGpCWZDaOHtGFAAABYEWMc0wA\n" 00065 "AAQDAEcwRQIhAN5+7KD0MrK4d7rbkwHf9fZh0yERoD4F+eEijXiqCruTAiBpIHOb\n" 00066 "eEK5xp1IQV7dZQw/eknxyGffqHI6ctYNDpe5DjANBgkqhkiG9w0BAQsFAAOCAQEA\n" 00067 "U9yjiRzpDp+Alz68X4K7EbyrGJQJRma5Bkm0IaCwv2gNnOsqRVQPMLz69ft42SbK\n" 00068 "ECMGipkiz9VilRmMX82TGuKLuxgZEfYkWr31A7EYjzZ+iFyYMilbI+DA+pi7zcAA\n" 00069 "a9wa2D9DT7IC0e9pv1gqiWjA92KJcy+LZt9+xeQCpmdBefxIRZ2g1oKXrUSnlfCt\n" 00070 "jZ153YD11Lqrq5ZMS2fedkzNHmasKYJdipXoXcpTywGn6QEDFe22V+HCdDsLWw3d\n" 00071 "1MHKVCc+vNcDG0FkrItWjB857pwdZN36VqVVvGuio4oeGOmTHMNzLahN6mA4tABN\n" 00072 "Ht7LDqFUSy2ZL4yTyCqEnA==\n" 00073 "-----END CERTIFICATE-----" 00074 "-----BEGIN CERTIFICATE-----\n" 00075 "MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG\n" 00076 "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n" 00077 "b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw\n" 00078 "MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n" 00079 "YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy\n" 00080 "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj\n" 00081 "kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL\n" 00082 "dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs\n" 00083 "MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA\n" 00084 "cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn\n" 00085 "kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het\n" 00086 "ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C\n" 00087 "AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE\n" 00088 "VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw\n" 00089 "b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu\n" 00090 "Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6\n" 00091 "Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X\n" 00092 "yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0\n" 00093 "XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS\n" 00094 "xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG\n" 00095 "l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV\n" 00096 "odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm\n" 00097 "MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZ\n" 00098 "Uw==\n" 00099 "-----END CERTIFICATE-----\n"; 00100 00101 #elif defined(MQTT_TESTS_CA_CERT_MOSQUITTO) 00102 00103 /* test.mosquitto.org */ 00104 "-----BEGIN CERTIFICATE-----\n" 00105 "MIIC8DCCAlmgAwIBAgIJAOD63PlXjJi8MA0GCSqGSIb3DQEBBQUAMIGQMQswCQYD\n" 00106 "VQQGEwJHQjEXMBUGA1UECAwOVW5pdGVkIEtpbmdkb20xDjAMBgNVBAcMBURlcmJ5\n" 00107 "MRIwEAYDVQQKDAlNb3NxdWl0dG8xCzAJBgNVBAsMAkNBMRYwFAYDVQQDDA1tb3Nx\n" 00108 "dWl0dG8ub3JnMR8wHQYJKoZIhvcNAQkBFhByb2dlckBhdGNob28ub3JnMB4XDTEy\n" 00109 "MDYyOTIyMTE1OVoXDTIyMDYyNzIyMTE1OVowgZAxCzAJBgNVBAYTAkdCMRcwFQYD\n" 00110 "VQQIDA5Vbml0ZWQgS2luZ2RvbTEOMAwGA1UEBwwFRGVyYnkxEjAQBgNVBAoMCU1v\n" 00111 "c3F1aXR0bzELMAkGA1UECwwCQ0ExFjAUBgNVBAMMDW1vc3F1aXR0by5vcmcxHzAd\n" 00112 "BgkqhkiG9w0BCQEWEHJvZ2VyQGF0Y2hvby5vcmcwgZ8wDQYJKoZIhvcNAQEBBQAD\n" 00113 "gY0AMIGJAoGBAMYkLmX7SqOT/jJCZoQ1NWdCrr/pq47m3xxyXcI+FLEmwbE3R9vM\n" 00114 "rE6sRbP2S89pfrCt7iuITXPKycpUcIU0mtcT1OqxGBV2lb6RaOT2gC5pxyGaFJ+h\n" 00115 "A+GIbdYKO3JprPxSBoRponZJvDGEZuM3N7p3S/lRoi7G5wG5mvUmaE5RAgMBAAGj\n" 00116 "UDBOMB0GA1UdDgQWBBTad2QneVztIPQzRRGj6ZHKqJTv5jAfBgNVHSMEGDAWgBTa\n" 00117 "d2QneVztIPQzRRGj6ZHKqJTv5jAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUA\n" 00118 "A4GBAAqw1rK4NlRUCUBLhEFUQasjP7xfFqlVbE2cRy0Rs4o3KS0JwzQVBwG85xge\n" 00119 "REyPOFdGdhBY2P1FNRy0MDr6xr+D2ZOwxs63dG1nnAnWZg7qwoLgpZ4fESPD3PkA\n" 00120 "1ZgKJc2zbSQ9fCPxt2W3mdVav66c6fsb7els2W2Iz7gERJSX\n" 00121 "-----END CERTIFICATE-----"; 00122 00123 #else 00124 00125 /* Local mosquitto server certificate */ 00126 "-----BEGIN CERTIFICATE-----\n" 00127 "MIIDzzCCAregAwIBAgIJAJF6EpVf4OtEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV\n" 00128 "BAYTAlBMMRAwDgYDVQQIDAdtYXNvdmlhMREwDwYDVQQHDAhXYXJzemF3YTENMAsG\n" 00129 "A1UECgwEbW9iaTEMMAoGA1UECwwDc2lsMRUwEwYDVQQDDAwxOTIuMTY4LjguNTIx\n" 00130 "FjAUBgkqhkiG9w0BCQEWB21AbS5jb20wHhcNMTkwNTIxMDkzNjQ4WhcNMjQwNTIw\n" 00131 "MDkzNjQ4WjB+MQswCQYDVQQGEwJQTDEQMA4GA1UECAwHbWFzb3ZpYTERMA8GA1UE\n" 00132 "BwwIV2Fyc3phd2ExDTALBgNVBAoMBG1vYmkxDDAKBgNVBAsMA3NpbDEVMBMGA1UE\n" 00133 "AwwMMTkyLjE2OC44LjUyMRYwFAYJKoZIhvcNAQkBFgdtQG0uY29tMIIBIjANBgkq\n" 00134 "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz9+wntWYYOeDrd4EdUXF09OG54LbRyCY\n" 00135 "nB+hzjVaPZM36RLE1ea/S04sb3T5MT5QzGi987B9KtAcDQMY9sSjv7XC8wqCv9wd\n" 00136 "HDeSf3zRyiVFSbhjWBi4i7BcEHLEjXUinWowwE7QV8UpAKJUsWBX1w8vbe7ooYvX\n" 00137 "y3JNPMfhtwGSVtqY0PeAHviLo6Lg8oFJFocFHeDh08W9p5J51SdRh4/CK+eVRpLd\n" 00138 "N1vtEePNuemZyM2HT839rPO53j9/Vvbl2nEfDCn3+jSPCcNSwiBsz0ErxZgW76fV\n" 00139 "wJnhcBSStMVrd1KhAcf1Um56jSIXMT0sMDk4j8sr/7ROJ72HjXSntwIDAQABo1Aw\n" 00140 "TjAdBgNVHQ4EFgQUhOGXTz5aztPFKmEV2g/tKwA8NMswHwYDVR0jBBgwFoAUhOGX\n" 00141 "Tz5aztPFKmEV2g/tKwA8NMswDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC\n" 00142 "AQEATnQzWf+MYEwtKDZfrxR5SJnBHc5H4Frq2wNVY+h+p/dOUxpshfa0/2AgDGzX\n" 00143 "+pIQpA9o5Zo00sX6Fa7gazheWw0iytSEIlFy9vvEm9EG2iH/Bsoki4E6GM334xUF\n" 00144 "1o+LH6vVm0J3DIGOAUup6gLs2efGME59hFJefooEAzVhVqgSgPVV09ZCSMo8M6no\n" 00145 "qlUfl2sGOJ5mchA3bdGuF2YlWACngwgf/cOUunkoZixz2Nou6ma8antAKTGl9fkK\n" 00146 "320LiO6s7tnQ13B9fjd9sZMnIZVZVO962oGm7KaLWAQPrLNX5hypIpo3iHqdepbG\n" 00147 "cOTba8KCydjqsOaXl/nYT+1ULQ==\n" 00148 "-----END CERTIFICATE-----"; 00149 #endif 00150 /* 00151 * (optional) Client certificate here in PEM format. 00152 * Set NULL if you don't use. 00153 * "-----BEGIN CERTIFICATE-----\n" 00154 * ... 00155 * "-----END CERTIFICATE-----\n"; 00156 */ 00157 const char *mqtt_global::SSL_CLIENT_CERT_PEM = NULL; 00158 00159 /* 00160 * (optional) Client private key here in PEM format. 00161 * Set NULL if you don't use. 00162 * "-----BEGIN RSA PRIVATE KEY-----\n" 00163 * ... 00164 * "-----END RSA PRIVATE KEY-----\n"; 00165 */ 00166 const char *mqtt_global::SSL_CLIENT_PRIVATE_KEY_PEM = NULL; 00167 00168 #define MQTT_MBED_PASSWORD_PROTECTION_AVAILABLE 00169 00170 MQTT::Message mqtt_global::default_message; 00171 MQTTSN::Message mqtt_global::default_message_sn; 00172 00173 Case cases[] = { 00174 00175 // Legacy API 00176 Case("MQTT_LEGACY_CONNECT", MQTT_LEGACY_CONNECT), 00177 Case("MQTT_LEGACY_CONNECT_NOT_CONNECTED", MQTT_LEGACY_CONNECT_NOT_CONNECTED), 00178 Case("MQTT_LEGACY_SUBSCRIBE", MQTT_LEGACY_SUBSCRIBE), 00179 Case("MQTT_LEGACY_SUBSCRIBE_NETWORK_NOT_CONNECTED", MQTT_LEGACY_SUBSCRIBE_NETWORK_NOT_CONNECTED), 00180 Case("MQTT_LEGACY_SUBSCRIBE_CLIENT_NOT_CONNECTED", MQTT_LEGACY_SUBSCRIBE_CLIENT_NOT_CONNECTED), 00181 Case("MQTT_LEGACY_SUBSCRIBE_TOPIC_TOO_LONG", MQTT_LEGACY_SUBSCRIBE_TOPIC_TOO_LONG), 00182 Case("MQTT_LEGACY_SUBSCRIBE_INVALID_MESSAGE_HANDLER", MQTT_LEGACY_SUBSCRIBE_INVALID_MESSAGE_HANDLER), 00183 #if MBED_CONF_MBED_MQTT_TESTS_PUBLIC_TOPIC_ENABLE 00184 Case("MQTT_LEGACY_SUBSCRIBE_RECEIVE", MQTT_LEGACY_SUBSCRIBE_RECEIVE), 00185 #endif 00186 Case("MQTT_LEGACY_UNSUBSCRIBE_WITHOUT_SUBSCRIBE", MQTT_LEGACY_UNSUBSCRIBE_WITHOUT_SUBSCRIBE), 00187 Case("MQTT_LEGACY_UNSUBSCRIBE_INVALID", MQTT_LEGACY_UNSUBSCRIBE_INVALID), 00188 Case("MQTT_LEGACY_PUBLISH", MQTT_LEGACY_PUBLISH), 00189 Case("MQTT_LEGACY_PUBLISH_NOT_CONNECTED", MQTT_LEGACY_PUBLISH_NOT_CONNECTED), 00190 Case("MQTT_LEGACY_PUBLISH_TOPIC_TOO_LONG", MQTT_LEGACY_PUBLISH_TOPIC_TOO_LONG), 00191 #if MBED_CONF_MBED_MQTT_TESTS_USERNAME_PASSWORD_PROTECTION_ENABLE 00192 Case("MQTT_LEGACY_CONNECT_USER_PASSWORD_INCORRECT", MQTT_LEGACY_CONNECT_USER_PASSWORD_INCORRECT), 00193 #endif 00194 #if MBED_CONF_MBED_MQTT_TESTS_USERNAME_PASSWORD_PROTECTION_ENABLE 00195 Case("MQTT_LEGACY_CONNECT_SUBSCRIBE_PUBLISH_USER_PASSWORD", MQTT_LEGACY_CONNECT_SUBSCRIBE_PUBLISH_USER_PASSWORD), 00196 #endif 00197 Case("MQTT_LEGACY_CONNECT_SUBSCRIBE_PUBLISH", MQTT_LEGACY_CONNECT_SUBSCRIBE_PUBLISH), 00198 #if MBED_CONF_MBED_MQTT_TESTS_TLS_ENABLE 00199 Case("MQTT_LEGACY_TLS_CONNECT_SUBSCRIBE_PUBLISH", MQTT_LEGACY_TLS_CONNECT_SUBSCRIBE_PUBLISH), 00200 #endif 00201 00202 #if MBED_CONF_MBED_MQTT_TESTS_MQTT_SN_ENABLE 00203 // MQTT-SN 00204 Case("MQTTSN_LEGACY_CONNECT", MQTTSN_LEGACY_CONNECT), 00205 Case("MQTTSN_LEGACY_CONNECT_NOT_CONNECTED", MQTTSN_LEGACY_CONNECT_NOT_CONNECTED), 00206 Case("MQTTSN_LEGACY_SUBSCRIBE", MQTTSN_LEGACY_SUBSCRIBE), 00207 Case("MQTTSN_LEGACY_SUBSCRIBE_NETWORK_NOT_CONNECTED", MQTTSN_LEGACY_SUBSCRIBE_NETWORK_NOT_CONNECTED), 00208 // Case("MQTTSN_LEGACY_SUBSCRIBE_CLIENT_NOT_CONNECTED", MQTTSN_LEGACY_SUBSCRIBE_CLIENT_NOT_CONNECTED), 00209 Case("MQTTSN_LEGACY_SUBSCRIBE_TOPIC_TOO_LONG", MQTTSN_LEGACY_SUBSCRIBE_TOPIC_TOO_LONG), 00210 Case("MQTTSN_LEGACY_SUBSCRIBE_INVALID_MESSAGE_HANDLER", MQTTSN_LEGACY_SUBSCRIBE_INVALID_MESSAGE_HANDLER), 00211 #if MBED_CONF_MBED_MQTT_TESTS_PUBLIC_TOPIC_ENABLE 00212 Case("MQTTSN_LEGACY_SUBSCRIBE_RECEIVE", MQTTSN_LEGACY_SUBSCRIBE_RECEIVE), 00213 #endif 00214 Case("MQTTSN_LEGACY_UNSUBSCRIBE_WITHOUT_SUBSCRIBE", MQTTSN_LEGACY_UNSUBSCRIBE_WITHOUT_SUBSCRIBE), 00215 Case("MQTTSN_LEGACY_UNSUBSCRIBE_INVALID", MQTTSN_LEGACY_UNSUBSCRIBE_INVALID), 00216 Case("MQTTSN_LEGACY_PUBLISH", MQTTSN_LEGACY_PUBLISH), 00217 Case("MQTTSN_LEGACY_PUBLISH_NOT_CONNECTED", MQTTSN_LEGACY_PUBLISH_NOT_CONNECTED), 00218 Case("MQTTSN_LEGACY_PUBLISH_TOPIC_TOO_LONG", MQTTSN_LEGACY_PUBLISH_TOPIC_TOO_LONG), 00219 Case("MQTTSN_LEGACY_UDP_CONNECT_SUBSCRIBE_PUBLISH", MQTTSN_LEGACY_UDP_CONNECT_SUBSCRIBE_PUBLISH), 00220 Case("MQTTSN_LEGACY_IS_CONNECTED", MQTTSN_LEGACY_IS_CONNECTED), 00221 Case("MQTTSN_LEGACY_IS_CONNECTED_CLIENT_NOT_CONNECTED", MQTTSN_LEGACY_IS_CONNECTED_CLIENT_NOT_CONNECTED), 00222 Case("MQTTSN_LEGACY_IS_CONNECTED_NETWORK_NOT_CONNECTED", MQTTSN_LEGACY_IS_CONNECTED_NETWORK_NOT_CONNECTED), 00223 #endif 00224 00225 // New mbed-os API 00226 Case("MQTT_CONNECT", MQTT_CONNECT), 00227 Case("MQTT_CONNECT_NOT_CONNECTED", MQTT_CONNECT_NOT_CONNECTED), 00228 Case("MQTT_SUBSCRIBE", MQTT_SUBSCRIBE), 00229 Case("MQTT_SUBSCRIBE_NETWORK_NOT_CONNECTED", MQTT_SUBSCRIBE_NETWORK_NOT_CONNECTED), 00230 Case("MQTT_SUBSCRIBE_CLIENT_NOT_CONNECTED", MQTT_SUBSCRIBE_CLIENT_NOT_CONNECTED), 00231 Case("MQTT_SUBSCRIBE_TOPIC_TOO_LONG", MQTT_SUBSCRIBE_TOPIC_TOO_LONG), 00232 Case("MQTT_SUBSCRIBE_INVALID_MESSAGE_HANDLER", MQTT_SUBSCRIBE_INVALID_MESSAGE_HANDLER), 00233 #if MBED_CONF_MBED_MQTT_TESTS_PUBLIC_TOPIC_ENABLE 00234 Case("MQTT_SUBSCRIBE_RECEIVE", MQTT_SUBSCRIBE_RECEIVE), 00235 #endif 00236 Case("MQTT_UNSUBSCRIBE_WITHOUT_SUBSCRIBE", MQTT_UNSUBSCRIBE_WITHOUT_SUBSCRIBE), 00237 Case("MQTT_UNSUBSCRIBE_INVALID", MQTT_UNSUBSCRIBE_INVALID), 00238 Case("MQTT_PUBLISH", MQTT_PUBLISH), 00239 Case("MQTT_PUBLISH_NOT_CONNECTED", MQTT_PUBLISH_NOT_CONNECTED), 00240 Case("MQTT_PUBLISH_TOPIC_TOO_LONG", MQTT_PUBLISH_TOPIC_TOO_LONG), 00241 #if MBED_CONF_MBED_MQTT_TESTS_USERNAME_PASSWORD_PROTECTION_ENABLE 00242 Case("MQTT_CONNECT_USER_PASSWORD_INCORRECT", MQTT_CONNECT_USER_PASSWORD_INCORRECT), 00243 #endif 00244 #if MBED_CONF_MBED_MQTT_TESTS_USERNAME_PASSWORD_PROTECTION_ENABLE 00245 Case("MQTT_CONNECT_SUBSCRIBE_PUBLISH_USER_PASSWORD", MQTT_CONNECT_SUBSCRIBE_PUBLISH_USER_PASSWORD), 00246 #endif 00247 Case("MQTT_CONNECT_SUBSCRIBE_PUBLISH", MQTT_CONNECT_SUBSCRIBE_PUBLISH), 00248 #if MBED_CONF_MBED_MQTT_TESTS_TLS_ENABLE 00249 Case("MQTT_TLS_CONNECT_SUBSCRIBE_PUBLISH", MQTT_TLS_CONNECT_SUBSCRIBE_PUBLISH), 00250 #endif 00251 00252 #if MBED_CONF_MBED_MQTT_TESTS_MQTT_SN_ENABLE 00253 // MQTT-SN new API 00254 Case("MQTTSN_TEST_CONNECT", MQTTSN_TEST_CONNECT), 00255 Case("MQTTSN_CONNECT_NOT_CONNECTED", MQTTSN_CONNECT_NOT_CONNECTED), 00256 Case("MQTTSN_TEST_SUBSCRIBE", MQTTSN_TEST_SUBSCRIBE), 00257 Case("MQTTSN_SUBSCRIBE_NETWORK_NOT_CONNECTED", MQTTSN_SUBSCRIBE_NETWORK_NOT_CONNECTED), 00258 // Case("MQTTSN_SUBSCRIBE_CLIENT_NOT_CONNECTED", MQTTSN_SUBSCRIBE_CLIENT_NOT_CONNECTED), 00259 Case("MQTTSN_SUBSCRIBE_TOPIC_TOO_LONG", MQTTSN_SUBSCRIBE_TOPIC_TOO_LONG), 00260 Case("MQTTSN_SUBSCRIBE_INVALID_MESSAGE_HANDLER", MQTTSN_SUBSCRIBE_INVALID_MESSAGE_HANDLER), 00261 #if MBED_CONF_MBED_MQTT_TESTS_PUBLIC_TOPIC_ENABLE 00262 Case("MQTTSN_SUBSCRIBE_RECEIVE", MQTTSN_SUBSCRIBE_RECEIVE), 00263 #endif 00264 Case("MQTTSN_UNSUBSCRIBE_WITHOUT_SUBSCRIBE", MQTTSN_UNSUBSCRIBE_WITHOUT_SUBSCRIBE), 00265 Case("MQTTSN_UNSUBSCRIBE_INVALID", MQTTSN_UNSUBSCRIBE_INVALID), 00266 Case("MQTTSN_TEST_PUBLISH", MQTTSN_TEST_PUBLISH), 00267 Case("MQTTSN_PUBLISH_NOT_CONNECTED", MQTTSN_PUBLISH_NOT_CONNECTED), 00268 Case("MQTTSN_PUBLISH_TOPIC_TOO_LONG", MQTTSN_PUBLISH_TOPIC_TOO_LONG), 00269 Case("MQTTSN_UDP_CONNECT_SUBSCRIBE_PUBLISH", MQTTSN_UDP_CONNECT_SUBSCRIBE_PUBLISH), 00270 #if MBED_CONF_MBED_MQTT_TESTS_TLS_ENABLE 00271 Case("MQTTSN_DTLS_CONNECT_SUBSCRIBE_PUBLISH", MQTTSN_DTLS_CONNECT_SUBSCRIBE_PUBLISH), 00272 #endif 00273 Case("MQTTSN_IS_CONNECTED", MQTTSN_IS_CONNECTED), 00274 Case("MQTTSN_IS_CONNECTED_CLIENT_NOT_CONNECTED", MQTTSN_IS_CONNECTED_CLIENT_NOT_CONNECTED), 00275 Case("MQTTSN_IS_CONNECTED_NETWORK_NOT_CONNECTED", MQTTSN_IS_CONNECTED_NETWORK_NOT_CONNECTED), 00276 #endif 00277 }; 00278 00279 int arrivedcount = 0; 00280 int arrivedcountSN = 0; 00281 00282 void messageArrived(MQTT::MessageData &md) 00283 { 00284 MQTT::Message &message = md.message; 00285 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); 00286 printf("Payload %.*s\r\n", message.payloadlen, (char *)message.payload); 00287 ++arrivedcount; 00288 printf("arrived msg: %d\n", arrivedcount); 00289 } 00290 00291 void messageArrivedSN(MQTTSN::MessageData &md) 00292 { 00293 MQTTSN::Message &message = md.message; 00294 printf("Message arrived SN: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); 00295 printf("Payload %.*s\r\n", message.payloadlen, (char *)message.payload); 00296 ++arrivedcountSN; 00297 printf("arrived msg: %d\n", arrivedcountSN); 00298 } 00299 00300 void init_topic_sn(MQTTSN_topicid &topic_sn) 00301 { 00302 topic_sn.type = MQTTSN_TOPIC_TYPE_NORMAL; 00303 topic_sn.data.long_.len = strlen(mqtt_global::topic); 00304 topic_sn.data.long_.name = const_cast<char *>(mqtt_global::topic); 00305 } 00306 00307 void init_topic_sn_too_long(MQTTSN_topicid &topic_sn) 00308 { 00309 topic_sn.type = MQTTSN_TOPIC_TYPE_NORMAL; 00310 topic_sn.data.long_.len = strlen(mqtt_global::topic_too_long); 00311 topic_sn.data.long_.name = const_cast<char *>(mqtt_global::topic_too_long); 00312 } 00313 00314 // Test setup 00315 utest::v1::status_t test_setup(const size_t number_of_cases) 00316 { 00317 #ifdef MBED_GREENTEA_TEST_INTERFACE_TIMEOUT_S 00318 GREENTEA_SETUP(MBED_GREENTEA_TEST_INTERFACE_TIMEOUT_S, "default_auto"); 00319 #else 00320 GREENTEA_SETUP(480, "default_auto"); 00321 #endif 00322 00323 NetworkInterface *net = NetworkInterface::get_default_instance(); 00324 nsapi_error_t err = net->connect(); 00325 TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, err); 00326 00327 SocketAddress addr; 00328 err = net->get_ip_address(&addr); 00329 TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, err); 00330 00331 printf("MBED: TCPClient IP address is '%s'\n", addr.get_ip_address()); 00332 00333 // Generate an string of length MAX_MQTT_PACKET_SIZE+1 with alphabet letters. 00334 char c = 'a'; 00335 for (int i = 0; i < MBED_CONF_MBED_MQTT_MAX_PACKET_SIZE + 1; i++) { 00336 mqtt_global::topic_too_long[i] = c; 00337 if (c < 'z') { 00338 c++; 00339 } else { 00340 c = 'a'; 00341 } 00342 } 00343 00344 // Prepare a default message, to avoid code duplication at a later stage. 00345 sprintf(mqtt_global::message_buffer, "%s", "MQTT_MBED_OS_TEST_MESSAGE"); 00346 mqtt_global::default_message.qos = MQTT::QOS0; 00347 mqtt_global::default_message.retained = false; 00348 mqtt_global::default_message.dup = false; 00349 mqtt_global::default_message.payload = (void *)mqtt_global::message_buffer; 00350 mqtt_global::default_message.payloadlen = strlen(mqtt_global::message_buffer) + 1; 00351 00352 sprintf(mqtt_global::message_buffer, "%s", "MQTTSN_MBED_OS_TEST_MESSAGE"); 00353 mqtt_global::default_message_sn.qos = MQTTSN::QOS0; 00354 mqtt_global::default_message_sn.retained = false; 00355 mqtt_global::default_message_sn.dup = false; 00356 mqtt_global::default_message_sn.payload = (void *)mqtt_global::message_buffer; 00357 mqtt_global::default_message_sn.payloadlen = strlen(mqtt_global::message_buffer) + 1; 00358 00359 mqtt_global::mbed_public_test_topic_sn.type = MQTTSN_TOPIC_TYPE_NORMAL; 00360 mqtt_global::mbed_public_test_topic_sn.data.long_.len = strlen(mqtt_global::mbed_public_test_topic) + 1; 00361 mqtt_global::mbed_public_test_topic_sn.data.long_.name = const_cast<char *>(mqtt_global::mbed_public_test_topic); 00362 00363 return verbose_test_setup_handler(number_of_cases); 00364 } 00365 00366 void greentea_teardown(const size_t passed, const size_t failed, const failure_t failure) 00367 { 00368 NetworkInterface::get_default_instance()->disconnect(); 00369 return greentea_test_teardown_handler(passed, failed, failure); 00370 } 00371 00372 Specification specification(test_setup, cases); 00373 00374 int main() 00375 { 00376 return !Harness::run(specification); 00377 }
Generated on Wed Jul 13 2022 10:46:02 by
1.7.2