ublox-at-cellular-interface-ext

Dependencies:   ublox-at-cellular-interface

Committer:
rob.meades@u-blox.com
Date:
Fri Jun 16 00:55:19 2017 +0100
Revision:
11:3631f62bb359
Parent:
5:9fd89567f769
Child:
18:071ae6c6e581
Remove return code from ftpResetPar() since not all modules support all parameters and hence it's not possible to be certain which are errors and which are normal.  Change order of parameters in ftpCommand() as offset is truly optional (it is not supported by Sara-G350).  Make switching on of +ULOCIND URC optional (it is only informative and is not supported by Sara-G350).  Update UbloxAtCellularInterface library version.  Update mbed_app.json templates.  Don't run the HTTP TLS test on C027 as Sara-G350 doesn't support it.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RobMeades 0:0b75e22c9231 1 #include "mbed.h"
RobMeades 0:0b75e22c9231 2 #include "greentea-client/test_env.h"
RobMeades 0:0b75e22c9231 3 #include "unity.h"
RobMeades 0:0b75e22c9231 4 #include "utest.h"
RobMeades 0:0b75e22c9231 5 #include "UbloxATCellularInterfaceExt.h"
RobMeades 0:0b75e22c9231 6 #include "UDPSocket.h"
rob.meades@u-blox.com 5:9fd89567f769 7 #ifdef FEATURE_COMMON_PAL
RobMeades 0:0b75e22c9231 8 #include "mbed_trace.h"
RobMeades 0:0b75e22c9231 9 #define TRACE_GROUP "TEST"
rob.meades@u-blox.com 5:9fd89567f769 10 #else
rob.meades@u-blox.com 5:9fd89567f769 11 #define tr_debug(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 5:9fd89567f769 12 #define tr_info(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 5:9fd89567f769 13 #define tr_warn(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 5:9fd89567f769 14 #define tr_error(format, ...) debug(format "\n", ## __VA_ARGS__)
rob.meades@u-blox.com 5:9fd89567f769 15 #endif
RobMeades 0:0b75e22c9231 16
RobMeades 0:0b75e22c9231 17 using namespace utest::v1;
RobMeades 0:0b75e22c9231 18
RobMeades 0:0b75e22c9231 19 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 20 // COMPILE-TIME MACROS
RobMeades 0:0b75e22c9231 21 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 22
RobMeades 0:0b75e22c9231 23 // These macros can be overridden with an mbed_app.json file and
RobMeades 0:0b75e22c9231 24 // contents of the following form:
RobMeades 0:0b75e22c9231 25 //
RobMeades 0:0b75e22c9231 26 //{
RobMeades 0:0b75e22c9231 27 // "config": {
RobMeades 0:0b75e22c9231 28 // "apn": {
RobMeades 0:0b75e22c9231 29 // "value": "\"my_apn\""
RobMeades 0:0b75e22c9231 30 // }
RobMeades 0:0b75e22c9231 31 //}
RobMeades 0:0b75e22c9231 32
rob.meades@u-blox.com 11:3631f62bb359 33 // Whether debug trace is on
rob.meades@u-blox.com 11:3631f62bb359 34 #ifndef MBED_CONF_APP_DEBUG_ON
rob.meades@u-blox.com 11:3631f62bb359 35 # define MBED_CONF_APP_DEBUG_ON false
rob.meades@u-blox.com 11:3631f62bb359 36 #endif
rob.meades@u-blox.com 11:3631f62bb359 37
RobMeades 0:0b75e22c9231 38 // The credentials of the SIM in the board.
RobMeades 0:0b75e22c9231 39 #ifndef MBED_CONF_APP_DEFAULT_PIN
rob.meades@u-blox.com 11:3631f62bb359 40 // Note: if PIN is enabled on your SIM, you must define the PIN
rob.meades@u-blox.com 11:3631f62bb359 41 // for your SIM jere (e.g. using mbed_app.json to do so).
rob.meades@u-blox.com 11:3631f62bb359 42 # define MBED_CONF_APP_DEFAULT_PIN "0000"
RobMeades 0:0b75e22c9231 43 #endif
RobMeades 0:0b75e22c9231 44
RobMeades 0:0b75e22c9231 45 // Network credentials.
RobMeades 0:0b75e22c9231 46 #ifndef MBED_CONF_APP_APN
RobMeades 0:0b75e22c9231 47 # define MBED_CONF_APP_APN NULL
RobMeades 0:0b75e22c9231 48 #endif
RobMeades 0:0b75e22c9231 49 #ifndef MBED_CONF_APP_USERNAME
RobMeades 0:0b75e22c9231 50 # define MBED_CONF_APP_USERNAME NULL
RobMeades 0:0b75e22c9231 51 #endif
RobMeades 0:0b75e22c9231 52 #ifndef MBED_CONF_APP_PASSWORD
RobMeades 0:0b75e22c9231 53 # define MBED_CONF_APP_PASSWORD NULL
RobMeades 0:0b75e22c9231 54 #endif
RobMeades 0:0b75e22c9231 55
RobMeades 0:0b75e22c9231 56 // The time to wait for a HTTP command to complete
RobMeades 0:0b75e22c9231 57 #define HTTP_TIMEOUT 10000
RobMeades 0:0b75e22c9231 58
RobMeades 0:0b75e22c9231 59 // The HTTP echo server, as described in the
RobMeades 0:0b75e22c9231 60 // first answer here:
RobMeades 0:0b75e22c9231 61 // http://stackoverflow.com/questions/5725430/http-test-server-that-accepts-get-post-calls
RobMeades 0:0b75e22c9231 62 // !!! IMPORTANT: this test relies on that server behaving in the same way forever !!!
RobMeades 0:0b75e22c9231 63 #define HTTP_ECHO_SERVER "httpbin.org"
RobMeades 0:0b75e22c9231 64
RobMeades 0:0b75e22c9231 65 // The size of the test file
RobMeades 0:0b75e22c9231 66 #define TEST_FILE_SIZE 100
RobMeades 0:0b75e22c9231 67
RobMeades 0:0b75e22c9231 68 // The maximum number of HTTP profiles
RobMeades 0:0b75e22c9231 69 #define MAX_PROFILES 4
RobMeades 0:0b75e22c9231 70
RobMeades 0:0b75e22c9231 71 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 72 // PRIVATE VARIABLES
RobMeades 0:0b75e22c9231 73 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 74
rob.meades@u-blox.com 5:9fd89567f769 75 #ifdef FEATURE_COMMON_PAL
RobMeades 0:0b75e22c9231 76 // Lock for debug prints
RobMeades 0:0b75e22c9231 77 static Mutex mtx;
rob.meades@u-blox.com 5:9fd89567f769 78 #endif
RobMeades 0:0b75e22c9231 79
RobMeades 0:0b75e22c9231 80 // An instance of the cellular interface
RobMeades 0:0b75e22c9231 81 static UbloxATCellularInterfaceExt *pDriver =
RobMeades 0:0b75e22c9231 82 new UbloxATCellularInterfaceExt(MDMTXD, MDMRXD,
RobMeades 0:0b75e22c9231 83 MBED_CONF_UBLOX_CELL_BAUD_RATE,
rob.meades@u-blox.com 11:3631f62bb359 84 MBED_CONF_APP_DEBUG_ON);
RobMeades 0:0b75e22c9231 85 // A few buffers for general use
RobMeades 0:0b75e22c9231 86 static char buf[1024];
RobMeades 0:0b75e22c9231 87 static char buf1[sizeof(buf)];
RobMeades 0:0b75e22c9231 88
RobMeades 0:0b75e22c9231 89 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 90 // PRIVATE FUNCTIONS
RobMeades 0:0b75e22c9231 91 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 92
rob.meades@u-blox.com 5:9fd89567f769 93 #ifdef FEATURE_COMMON_PAL
RobMeades 0:0b75e22c9231 94 // Locks for debug prints
RobMeades 0:0b75e22c9231 95 static void lock()
RobMeades 0:0b75e22c9231 96 {
RobMeades 0:0b75e22c9231 97 mtx.lock();
RobMeades 0:0b75e22c9231 98 }
RobMeades 0:0b75e22c9231 99
RobMeades 0:0b75e22c9231 100 static void unlock()
RobMeades 0:0b75e22c9231 101 {
RobMeades 0:0b75e22c9231 102 mtx.unlock();
RobMeades 0:0b75e22c9231 103 }
rob.meades@u-blox.com 5:9fd89567f769 104 #endif
RobMeades 0:0b75e22c9231 105
RobMeades 0:0b75e22c9231 106 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 107 // TESTS
RobMeades 0:0b75e22c9231 108 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 109
RobMeades 0:0b75e22c9231 110 // Test HTTP commands
RobMeades 0:0b75e22c9231 111 void test_http_cmd() {
RobMeades 0:0b75e22c9231 112 int profile;
RobMeades 0:0b75e22c9231 113 char * pData;
RobMeades 0:0b75e22c9231 114
RobMeades 0:0b75e22c9231 115 TEST_ASSERT(pDriver->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
RobMeades 0:0b75e22c9231 116 MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
RobMeades 0:0b75e22c9231 117
RobMeades 0:0b75e22c9231 118 profile = pDriver->httpAllocProfile();
RobMeades 0:0b75e22c9231 119 TEST_ASSERT(profile >= 0);
RobMeades 0:0b75e22c9231 120
RobMeades 0:0b75e22c9231 121 pDriver->httpSetTimeout(profile, HTTP_TIMEOUT);
RobMeades 0:0b75e22c9231 122
RobMeades 0:0b75e22c9231 123 // Set up the server to talk to
RobMeades 0:0b75e22c9231 124 TEST_ASSERT(pDriver->httpSetPar(profile, UbloxATCellularInterfaceExt::HTTP_SERVER_NAME, HTTP_ECHO_SERVER));
RobMeades 0:0b75e22c9231 125
RobMeades 0:0b75e22c9231 126 // Check HTTP head request
RobMeades 0:0b75e22c9231 127 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 128 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_HEAD,
RobMeades 0:0b75e22c9231 129 "/headers",
RobMeades 0:0b75e22c9231 130 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 131 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 132 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 133 TEST_ASSERT(strstr(buf, "Content-Length:") != NULL);
RobMeades 0:0b75e22c9231 134
RobMeades 0:0b75e22c9231 135 // Check HTTP get request
RobMeades 0:0b75e22c9231 136 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 137 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_GET,
RobMeades 0:0b75e22c9231 138 "/get",
RobMeades 0:0b75e22c9231 139 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 140 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 141 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 142 TEST_ASSERT(strstr(buf, "\"http://httpbin.org/get\"") != NULL);
RobMeades 0:0b75e22c9231 143
RobMeades 0:0b75e22c9231 144 // Check HTTP delete request
RobMeades 0:0b75e22c9231 145 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 146 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_DELETE,
RobMeades 0:0b75e22c9231 147 "/delete",
RobMeades 0:0b75e22c9231 148 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 149 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 150 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 151 TEST_ASSERT(strstr(buf, "\"http://httpbin.org/delete\"") != NULL);
RobMeades 0:0b75e22c9231 152
RobMeades 0:0b75e22c9231 153 // Check HTTP put request (this will fail as the echo server doesn't support it)
RobMeades 0:0b75e22c9231 154 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 155 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_PUT,
RobMeades 0:0b75e22c9231 156 "/put",
RobMeades 0:0b75e22c9231 157 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 158 buf, sizeof (buf)) != NULL);
RobMeades 0:0b75e22c9231 159
RobMeades 0:0b75e22c9231 160 // Check HTTP post request with data
RobMeades 0:0b75e22c9231 161 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 162 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_POST_DATA,
RobMeades 0:0b75e22c9231 163 "/post",
RobMeades 0:0b75e22c9231 164 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 165 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 166 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 167 TEST_ASSERT(strstr(buf, "\"http://httpbin.org/post\"") != NULL);
RobMeades 0:0b75e22c9231 168
RobMeades 0:0b75e22c9231 169 // Check HTTP post request with a file, also checking that writing the response
RobMeades 0:0b75e22c9231 170 // to a named file works
RobMeades 0:0b75e22c9231 171 for (int x = 0; x < TEST_FILE_SIZE; x++) {
RobMeades 0:0b75e22c9231 172 buf[x] = (x % 10) + 0x30;
RobMeades 0:0b75e22c9231 173 }
RobMeades 0:0b75e22c9231 174 pDriver->delFile("post_test.txt");
RobMeades 0:0b75e22c9231 175 TEST_ASSERT(pDriver->writeFile("post_test.txt", buf, TEST_FILE_SIZE) == TEST_FILE_SIZE);
RobMeades 0:0b75e22c9231 176
RobMeades 0:0b75e22c9231 177 // This may fail if rsp.txt doesn't happen to be sitting around from a previous run
RobMeades 0:0b75e22c9231 178 // so don't check the return value
RobMeades 0:0b75e22c9231 179 pDriver->delFile("rsp.txt");
RobMeades 0:0b75e22c9231 180
RobMeades 0:0b75e22c9231 181 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 182 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_POST_FILE,
RobMeades 0:0b75e22c9231 183 "/post",
RobMeades 0:0b75e22c9231 184 "rsp.txt", "post_test.txt",
RobMeades 0:0b75e22c9231 185 UbloxATCellularInterfaceExt::HTTP_CONTENT_TEXT, NULL,
RobMeades 0:0b75e22c9231 186 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 187 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 188 // Find the data in the response and check it
RobMeades 0:0b75e22c9231 189 pData = strstr(buf, "\"data\": \"");
RobMeades 0:0b75e22c9231 190 TEST_ASSERT(pData != NULL);
RobMeades 0:0b75e22c9231 191 pData += 9;
RobMeades 0:0b75e22c9231 192 for (int x = 0; x < TEST_FILE_SIZE; x++) {
RobMeades 0:0b75e22c9231 193 TEST_ASSERT(*(pData + x) == (x % 10) + 0x30);
RobMeades 0:0b75e22c9231 194 }
RobMeades 0:0b75e22c9231 195
RobMeades 0:0b75e22c9231 196 // Also check that rsp.txt exists and is the same as buf
RobMeades 0:0b75e22c9231 197 pDriver->readFile("rsp.txt", buf1, sizeof (buf1));
RobMeades 0:0b75e22c9231 198 memcmp(buf1, buf, sizeof (buf1));
RobMeades 0:0b75e22c9231 199 TEST_ASSERT(pDriver->delFile("rsp.txt"));
RobMeades 0:0b75e22c9231 200 TEST_ASSERT(!pDriver->delFile("rsp.txt")); // Should fail
RobMeades 0:0b75e22c9231 201
RobMeades 0:0b75e22c9231 202 TEST_ASSERT(pDriver->httpFreeProfile(profile));
RobMeades 0:0b75e22c9231 203 TEST_ASSERT(pDriver->disconnect() == 0);
RobMeades 0:0b75e22c9231 204 // Wait for printfs to leave the building or the test result string gets messed up
RobMeades 0:0b75e22c9231 205 wait_ms(500);
RobMeades 0:0b75e22c9231 206 }
RobMeades 0:0b75e22c9231 207
RobMeades 0:0b75e22c9231 208 // Test HTTP with TLS
RobMeades 0:0b75e22c9231 209 void test_http_tls() {
RobMeades 0:0b75e22c9231 210 int profile;
RobMeades 0:0b75e22c9231 211 SocketAddress address;
RobMeades 0:0b75e22c9231 212
RobMeades 0:0b75e22c9231 213 TEST_ASSERT(pDriver->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
RobMeades 0:0b75e22c9231 214 MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
RobMeades 0:0b75e22c9231 215
RobMeades 0:0b75e22c9231 216 profile = pDriver->httpAllocProfile();
RobMeades 0:0b75e22c9231 217 TEST_ASSERT(profile >= 0);
RobMeades 0:0b75e22c9231 218
RobMeades 0:0b75e22c9231 219 pDriver->httpSetTimeout(profile, HTTP_TIMEOUT);
RobMeades 0:0b75e22c9231 220
RobMeades 0:0b75e22c9231 221 // Set up the server to talk to and TLS, using the IP address this time just for variety
RobMeades 0:0b75e22c9231 222 TEST_ASSERT(pDriver->gethostbyname("amazon.com", &address) == 0);
RobMeades 0:0b75e22c9231 223 TEST_ASSERT(pDriver->httpSetPar(profile, UbloxATCellularInterfaceExt::HTTP_IP_ADDRESS, address.get_ip_address()));
RobMeades 0:0b75e22c9231 224 TEST_ASSERT(pDriver->httpSetPar(profile, UbloxATCellularInterfaceExt::HTTP_SECURE, "1"));
RobMeades 0:0b75e22c9231 225
RobMeades 0:0b75e22c9231 226 // Check HTTP get request
RobMeades 0:0b75e22c9231 227 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 228 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_GET,
RobMeades 0:0b75e22c9231 229 "/",
RobMeades 0:0b75e22c9231 230 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 231 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 232 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 233 // This is what amazon.com returns if TLS is set
RobMeades 0:0b75e22c9231 234 TEST_ASSERT(strstr(buf, "302 MovedTemporarily") != NULL);
RobMeades 0:0b75e22c9231 235
RobMeades 0:0b75e22c9231 236 // Reset the profile and check that this now fails
RobMeades 0:0b75e22c9231 237 TEST_ASSERT(pDriver->httpResetProfile(profile));
RobMeades 0:0b75e22c9231 238 TEST_ASSERT(pDriver->httpSetPar(profile, UbloxATCellularInterfaceExt::HTTP_IP_ADDRESS, address.get_ip_address()));
RobMeades 0:0b75e22c9231 239 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 240 TEST_ASSERT(pDriver->httpCommand(profile, UbloxATCellularInterfaceExt::HTTP_GET,
RobMeades 0:0b75e22c9231 241 "/",
RobMeades 0:0b75e22c9231 242 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 243 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 244 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 245 // This is what amazon.com returns if TLS is NOT set
RobMeades 0:0b75e22c9231 246 TEST_ASSERT(strstr(buf, "301 Moved Permanently") != NULL);
RobMeades 0:0b75e22c9231 247
RobMeades 0:0b75e22c9231 248 TEST_ASSERT(pDriver->httpFreeProfile(profile));
RobMeades 0:0b75e22c9231 249 TEST_ASSERT(pDriver->disconnect() == 0);
RobMeades 0:0b75e22c9231 250 // Wait for printfs to leave the building or the test result string gets messed up
RobMeades 0:0b75e22c9231 251 wait_ms(500);
RobMeades 0:0b75e22c9231 252 }
RobMeades 0:0b75e22c9231 253
RobMeades 0:0b75e22c9231 254 // Allocate max profiles
RobMeades 0:0b75e22c9231 255 void test_alloc_profiles() {
RobMeades 0:0b75e22c9231 256 int profiles[MAX_PROFILES];
RobMeades 0:0b75e22c9231 257
RobMeades 0:0b75e22c9231 258 TEST_ASSERT(pDriver->connect(MBED_CONF_APP_DEFAULT_PIN, MBED_CONF_APP_APN,
RobMeades 0:0b75e22c9231 259 MBED_CONF_APP_USERNAME, MBED_CONF_APP_PASSWORD) == 0);
RobMeades 0:0b75e22c9231 260
RobMeades 0:0b75e22c9231 261 // Allocate first profile and use it
RobMeades 0:0b75e22c9231 262 profiles[0] = pDriver->httpAllocProfile();
RobMeades 0:0b75e22c9231 263 TEST_ASSERT(profiles[0] >= 0);
RobMeades 0:0b75e22c9231 264 TEST_ASSERT(pDriver->httpSetPar(profiles[0], UbloxATCellularInterfaceExt::HTTP_SERVER_NAME, "developer.mbed.org"));
RobMeades 0:0b75e22c9231 265
RobMeades 0:0b75e22c9231 266 // Check HTTP get request
RobMeades 0:0b75e22c9231 267 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 268 TEST_ASSERT(pDriver->httpCommand(profiles[0], UbloxATCellularInterfaceExt::HTTP_GET,
RobMeades 0:0b75e22c9231 269 "/media/uploads/mbed_official/hello.txt",
RobMeades 0:0b75e22c9231 270 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 271 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 272 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 273 TEST_ASSERT(strstr(buf, "Hello world!") != NULL);
RobMeades 0:0b75e22c9231 274
RobMeades 0:0b75e22c9231 275 // Check that we stop being able to get profiles at the max number
RobMeades 0:0b75e22c9231 276 for (int x = 1; x < sizeof (profiles) / sizeof (profiles[0]); x++) {
RobMeades 0:0b75e22c9231 277 profiles[x] = pDriver->httpAllocProfile();
RobMeades 0:0b75e22c9231 278 TEST_ASSERT(profiles[0] >= 0);
RobMeades 0:0b75e22c9231 279 }
RobMeades 0:0b75e22c9231 280 TEST_ASSERT(pDriver->httpAllocProfile() < 0);
RobMeades 0:0b75e22c9231 281
RobMeades 0:0b75e22c9231 282 // Now use the last one and check that it doesn't affect the first one
RobMeades 0:0b75e22c9231 283 TEST_ASSERT(pDriver->httpSetPar(profiles[sizeof (profiles) / sizeof (profiles[0]) - 1],
RobMeades 0:0b75e22c9231 284 UbloxATCellularInterfaceExt::HTTP_SERVER_NAME, HTTP_ECHO_SERVER));
RobMeades 0:0b75e22c9231 285
RobMeades 0:0b75e22c9231 286 // Check HTTP head request on last profile
RobMeades 0:0b75e22c9231 287 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 288 TEST_ASSERT(pDriver->httpCommand(profiles[sizeof (profiles) / sizeof (profiles[0]) - 1],
RobMeades 0:0b75e22c9231 289 UbloxATCellularInterfaceExt::HTTP_HEAD,
RobMeades 0:0b75e22c9231 290 "/headers",
RobMeades 0:0b75e22c9231 291 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 292 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 293 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 294 TEST_ASSERT(strstr(buf, "Content-Length:") != NULL);
RobMeades 0:0b75e22c9231 295
RobMeades 0:0b75e22c9231 296 // Check HTTP get request on first profile once more
RobMeades 0:0b75e22c9231 297 memset(buf, 0, sizeof (buf));
RobMeades 0:0b75e22c9231 298 TEST_ASSERT(pDriver->httpCommand(profiles[0], UbloxATCellularInterfaceExt::HTTP_GET,
RobMeades 0:0b75e22c9231 299 "/media/uploads/mbed_official/hello.txt",
RobMeades 0:0b75e22c9231 300 NULL, NULL, 0, NULL,
RobMeades 0:0b75e22c9231 301 buf, sizeof (buf)) == NULL);
RobMeades 0:0b75e22c9231 302 tr_debug("Received: %s", buf);
RobMeades 0:0b75e22c9231 303 TEST_ASSERT(strstr(buf, "Hello world!") != NULL);
RobMeades 0:0b75e22c9231 304
RobMeades 0:0b75e22c9231 305 // Free the profiles again
RobMeades 0:0b75e22c9231 306 for (int x = 0; x < sizeof (profiles) / sizeof (profiles[0]); x++) {
RobMeades 0:0b75e22c9231 307 TEST_ASSERT(pDriver->httpFreeProfile(profiles[x]));
RobMeades 0:0b75e22c9231 308 }
RobMeades 0:0b75e22c9231 309
RobMeades 0:0b75e22c9231 310 TEST_ASSERT(pDriver->disconnect() == 0);
RobMeades 0:0b75e22c9231 311 // Wait for printfs to leave the building or the test result string gets messed up
RobMeades 0:0b75e22c9231 312 wait_ms(500);
RobMeades 0:0b75e22c9231 313 }
RobMeades 0:0b75e22c9231 314
RobMeades 0:0b75e22c9231 315 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 316 // TEST ENVIRONMENT
RobMeades 0:0b75e22c9231 317 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 318
RobMeades 0:0b75e22c9231 319 // Setup the test environment
RobMeades 0:0b75e22c9231 320 utest::v1::status_t test_setup(const size_t number_of_cases) {
RobMeades 0:0b75e22c9231 321 // Setup Greentea with a timeout
RobMeades 0:0b75e22c9231 322 GREENTEA_SETUP(540, "default_auto");
RobMeades 0:0b75e22c9231 323 return verbose_test_setup_handler(number_of_cases);
RobMeades 0:0b75e22c9231 324 }
RobMeades 0:0b75e22c9231 325
RobMeades 0:0b75e22c9231 326 // Test cases
RobMeades 0:0b75e22c9231 327 Case cases[] = {
RobMeades 0:0b75e22c9231 328 Case("HTTP commands", test_http_cmd),
rob.meades@u-blox.com 11:3631f62bb359 329 #ifndef TARGET_UBLOX_C027
rob.meades@u-blox.com 11:3631f62bb359 330 // C027 doesn't support TLS
RobMeades 0:0b75e22c9231 331 Case("HTTP with TLS", test_http_tls),
rob.meades@u-blox.com 11:3631f62bb359 332 #endif
RobMeades 0:0b75e22c9231 333 Case("Alloc max profiles", test_alloc_profiles)
RobMeades 0:0b75e22c9231 334 };
RobMeades 0:0b75e22c9231 335
RobMeades 0:0b75e22c9231 336 Specification specification(test_setup, cases);
RobMeades 0:0b75e22c9231 337
RobMeades 0:0b75e22c9231 338 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 339 // MAIN
RobMeades 0:0b75e22c9231 340 // ----------------------------------------------------------------
RobMeades 0:0b75e22c9231 341
RobMeades 0:0b75e22c9231 342 int main() {
rob.meades@u-blox.com 5:9fd89567f769 343
rob.meades@u-blox.com 5:9fd89567f769 344 #ifdef FEATURE_COMMON_PAL
RobMeades 0:0b75e22c9231 345 mbed_trace_init();
RobMeades 0:0b75e22c9231 346
RobMeades 0:0b75e22c9231 347 mbed_trace_mutex_wait_function_set(lock);
RobMeades 0:0b75e22c9231 348 mbed_trace_mutex_release_function_set(unlock);
rob.meades@u-blox.com 5:9fd89567f769 349 #endif
RobMeades 0:0b75e22c9231 350
RobMeades 0:0b75e22c9231 351 // Run tests
RobMeades 0:0b75e22c9231 352 return !Harness::run(specification);
RobMeades 0:0b75e22c9231 353 }
RobMeades 0:0b75e22c9231 354
RobMeades 0:0b75e22c9231 355 // End Of File
RobMeades 0:0b75e22c9231 356