Easily add all supported connectivity methods to your mbed OS project

Dependencies:   type-yd-driver

Committer:
MACRUM
Date:
Wed Jul 12 10:52:58 2017 +0000
Revision:
0:615f90842ce8
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:615f90842ce8 1 #ifndef MBED_EXTENDED_TESTS
MACRUM 0:615f90842ce8 2 #error [NOT_SUPPORTED] Parallel pressure tests are not supported by default
MACRUM 0:615f90842ce8 3 #endif
MACRUM 0:615f90842ce8 4
MACRUM 0:615f90842ce8 5 #include "mbed.h"
MACRUM 0:615f90842ce8 6 #include "ESP8266Interface.h"
MACRUM 0:615f90842ce8 7 #include "UDPSocket.h"
MACRUM 0:615f90842ce8 8 #include "greentea-client/test_env.h"
MACRUM 0:615f90842ce8 9 #include "unity/unity.h"
MACRUM 0:615f90842ce8 10 #include "utest.h"
MACRUM 0:615f90842ce8 11
MACRUM 0:615f90842ce8 12 using namespace utest::v1;
MACRUM 0:615f90842ce8 13
MACRUM 0:615f90842ce8 14
MACRUM 0:615f90842ce8 15 #ifndef MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN
MACRUM 0:615f90842ce8 16 #define MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN 64
MACRUM 0:615f90842ce8 17 #endif
MACRUM 0:615f90842ce8 18
MACRUM 0:615f90842ce8 19 #ifndef MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MAX
MACRUM 0:615f90842ce8 20 #define MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MAX 0x80000
MACRUM 0:615f90842ce8 21 #endif
MACRUM 0:615f90842ce8 22
MACRUM 0:615f90842ce8 23 #ifndef MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_TIMEOUT
MACRUM 0:615f90842ce8 24 #define MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_TIMEOUT 100
MACRUM 0:615f90842ce8 25 #endif
MACRUM 0:615f90842ce8 26
MACRUM 0:615f90842ce8 27 #ifndef MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_SEED
MACRUM 0:615f90842ce8 28 #define MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_SEED 0x6d626564
MACRUM 0:615f90842ce8 29 #endif
MACRUM 0:615f90842ce8 30
MACRUM 0:615f90842ce8 31 #ifndef MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS
MACRUM 0:615f90842ce8 32 #define MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS 3
MACRUM 0:615f90842ce8 33 #endif
MACRUM 0:615f90842ce8 34
MACRUM 0:615f90842ce8 35 #ifndef MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_DEBUG
MACRUM 0:615f90842ce8 36 #define MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_DEBUG false
MACRUM 0:615f90842ce8 37 #endif
MACRUM 0:615f90842ce8 38
MACRUM 0:615f90842ce8 39 #ifndef MBED_CFG_ESP8266_TX
MACRUM 0:615f90842ce8 40 #define MBED_CFG_ESP8266_TX D1
MACRUM 0:615f90842ce8 41 #endif
MACRUM 0:615f90842ce8 42
MACRUM 0:615f90842ce8 43 #ifndef MBED_CFG_ESP8266_RX
MACRUM 0:615f90842ce8 44 #define MBED_CFG_ESP8266_RX D0
MACRUM 0:615f90842ce8 45 #endif
MACRUM 0:615f90842ce8 46
MACRUM 0:615f90842ce8 47 #ifndef MBED_CFG_ESP8266_DEBUG
MACRUM 0:615f90842ce8 48 #define MBED_CFG_ESP8266_DEBUG false
MACRUM 0:615f90842ce8 49 #endif
MACRUM 0:615f90842ce8 50
MACRUM 0:615f90842ce8 51
MACRUM 0:615f90842ce8 52 // Simple xorshift pseudorandom number generator
MACRUM 0:615f90842ce8 53 class RandSeq {
MACRUM 0:615f90842ce8 54 private:
MACRUM 0:615f90842ce8 55 uint32_t x;
MACRUM 0:615f90842ce8 56 uint32_t y;
MACRUM 0:615f90842ce8 57 static const int A = 15;
MACRUM 0:615f90842ce8 58 static const int B = 18;
MACRUM 0:615f90842ce8 59 static const int C = 11;
MACRUM 0:615f90842ce8 60
MACRUM 0:615f90842ce8 61 public:
MACRUM 0:615f90842ce8 62 RandSeq(uint32_t seed=MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_SEED)
MACRUM 0:615f90842ce8 63 : x(seed), y(seed) {}
MACRUM 0:615f90842ce8 64
MACRUM 0:615f90842ce8 65 uint32_t next(void) {
MACRUM 0:615f90842ce8 66 x ^= x << A;
MACRUM 0:615f90842ce8 67 x ^= x >> B;
MACRUM 0:615f90842ce8 68 x ^= y ^ (y >> C);
MACRUM 0:615f90842ce8 69 return x + y;
MACRUM 0:615f90842ce8 70 }
MACRUM 0:615f90842ce8 71
MACRUM 0:615f90842ce8 72 void skip(size_t size) {
MACRUM 0:615f90842ce8 73 for (size_t i = 0; i < size; i++) {
MACRUM 0:615f90842ce8 74 next();
MACRUM 0:615f90842ce8 75 }
MACRUM 0:615f90842ce8 76 }
MACRUM 0:615f90842ce8 77
MACRUM 0:615f90842ce8 78 void buffer(uint8_t *buffer, size_t size) {
MACRUM 0:615f90842ce8 79 RandSeq lookahead = *this;
MACRUM 0:615f90842ce8 80
MACRUM 0:615f90842ce8 81 for (size_t i = 0; i < size; i++) {
MACRUM 0:615f90842ce8 82 buffer[i] = lookahead.next() & 0xff;
MACRUM 0:615f90842ce8 83 }
MACRUM 0:615f90842ce8 84 }
MACRUM 0:615f90842ce8 85
MACRUM 0:615f90842ce8 86 int cmp(uint8_t *buffer, size_t size) {
MACRUM 0:615f90842ce8 87 RandSeq lookahead = *this;
MACRUM 0:615f90842ce8 88
MACRUM 0:615f90842ce8 89 for (size_t i = 0; i < size; i++) {
MACRUM 0:615f90842ce8 90 int diff = buffer[i] - (lookahead.next() & 0xff);
MACRUM 0:615f90842ce8 91 if (diff != 0) {
MACRUM 0:615f90842ce8 92 return diff;
MACRUM 0:615f90842ce8 93 }
MACRUM 0:615f90842ce8 94 }
MACRUM 0:615f90842ce8 95 return 0;
MACRUM 0:615f90842ce8 96 }
MACRUM 0:615f90842ce8 97 };
MACRUM 0:615f90842ce8 98
MACRUM 0:615f90842ce8 99 // Tries to get the biggest buffer possible on the device. Exponentially
MACRUM 0:615f90842ce8 100 // grows a buffer until heap runs out of space, and uses half to leave
MACRUM 0:615f90842ce8 101 // space for the rest of the program
MACRUM 0:615f90842ce8 102 void generate_buffer(uint8_t **buffer, size_t *size, size_t min, size_t max) {
MACRUM 0:615f90842ce8 103 size_t i = min;
MACRUM 0:615f90842ce8 104 while (i < max) {
MACRUM 0:615f90842ce8 105 void *b = malloc(i);
MACRUM 0:615f90842ce8 106 if (!b) {
MACRUM 0:615f90842ce8 107 i /= 8;
MACRUM 0:615f90842ce8 108 if (i < min) {
MACRUM 0:615f90842ce8 109 i = min;
MACRUM 0:615f90842ce8 110 }
MACRUM 0:615f90842ce8 111 break;
MACRUM 0:615f90842ce8 112 }
MACRUM 0:615f90842ce8 113 free(b);
MACRUM 0:615f90842ce8 114 i *= 2;
MACRUM 0:615f90842ce8 115 }
MACRUM 0:615f90842ce8 116
MACRUM 0:615f90842ce8 117 *buffer = (uint8_t *)malloc(i);
MACRUM 0:615f90842ce8 118 *size = i;
MACRUM 0:615f90842ce8 119 TEST_ASSERT(buffer);
MACRUM 0:615f90842ce8 120 }
MACRUM 0:615f90842ce8 121
MACRUM 0:615f90842ce8 122
MACRUM 0:615f90842ce8 123 // Global variables shared between pressure tests
MACRUM 0:615f90842ce8 124 ESP8266Interface net(MBED_CFG_ESP8266_TX, MBED_CFG_ESP8266_RX, MBED_CFG_ESP8266_DEBUG);
MACRUM 0:615f90842ce8 125 SocketAddress udp_addr;
MACRUM 0:615f90842ce8 126 Timer timer;
MACRUM 0:615f90842ce8 127 Mutex iomutex;
MACRUM 0:615f90842ce8 128
MACRUM 0:615f90842ce8 129 // Single instance of a pressure test
MACRUM 0:615f90842ce8 130 class PressureTest {
MACRUM 0:615f90842ce8 131 private:
MACRUM 0:615f90842ce8 132 uint8_t *buffer;
MACRUM 0:615f90842ce8 133 size_t buffer_size;
MACRUM 0:615f90842ce8 134
MACRUM 0:615f90842ce8 135 UDPSocket sock;
MACRUM 0:615f90842ce8 136 Thread thread;
MACRUM 0:615f90842ce8 137
MACRUM 0:615f90842ce8 138 public:
MACRUM 0:615f90842ce8 139 PressureTest(uint8_t *buffer, size_t buffer_size)
MACRUM 0:615f90842ce8 140 : buffer(buffer), buffer_size(buffer_size) {
MACRUM 0:615f90842ce8 141 }
MACRUM 0:615f90842ce8 142
MACRUM 0:615f90842ce8 143 void start() {
MACRUM 0:615f90842ce8 144 osStatus status = thread.start(callback(this, &PressureTest::run));
MACRUM 0:615f90842ce8 145 TEST_ASSERT_EQUAL(osOK, status);
MACRUM 0:615f90842ce8 146 }
MACRUM 0:615f90842ce8 147
MACRUM 0:615f90842ce8 148 void join() {
MACRUM 0:615f90842ce8 149 osStatus status = thread.join();
MACRUM 0:615f90842ce8 150 TEST_ASSERT_EQUAL(osOK, status);
MACRUM 0:615f90842ce8 151 }
MACRUM 0:615f90842ce8 152
MACRUM 0:615f90842ce8 153 void run() {
MACRUM 0:615f90842ce8 154 // Tests exponentially growing sequences
MACRUM 0:615f90842ce8 155 for (size_t size = MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN;
MACRUM 0:615f90842ce8 156 size < MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MAX;
MACRUM 0:615f90842ce8 157 size *= 2) {
MACRUM 0:615f90842ce8 158 int err = sock.open(&net);
MACRUM 0:615f90842ce8 159 TEST_ASSERT_EQUAL(0, err);
MACRUM 0:615f90842ce8 160 iomutex.lock();
MACRUM 0:615f90842ce8 161 printf("UDP: %s:%d streaming %d bytes\r\n",
MACRUM 0:615f90842ce8 162 udp_addr.get_ip_address(), udp_addr.get_port(), size);
MACRUM 0:615f90842ce8 163 iomutex.unlock();
MACRUM 0:615f90842ce8 164
MACRUM 0:615f90842ce8 165 sock.set_blocking(false);
MACRUM 0:615f90842ce8 166
MACRUM 0:615f90842ce8 167 // Loop to send/recv all data
MACRUM 0:615f90842ce8 168 RandSeq tx_seq;
MACRUM 0:615f90842ce8 169 RandSeq rx_seq;
MACRUM 0:615f90842ce8 170 size_t rx_count = 0;
MACRUM 0:615f90842ce8 171 size_t tx_count = 0;
MACRUM 0:615f90842ce8 172 int known_time = timer.read_ms();
MACRUM 0:615f90842ce8 173 size_t window = buffer_size;
MACRUM 0:615f90842ce8 174
MACRUM 0:615f90842ce8 175 while (tx_count < size || rx_count < size) {
MACRUM 0:615f90842ce8 176 // Send out packets
MACRUM 0:615f90842ce8 177 if (tx_count < size) {
MACRUM 0:615f90842ce8 178 size_t chunk_size = size - tx_count;
MACRUM 0:615f90842ce8 179 if (chunk_size > window) {
MACRUM 0:615f90842ce8 180 chunk_size = window;
MACRUM 0:615f90842ce8 181 }
MACRUM 0:615f90842ce8 182
MACRUM 0:615f90842ce8 183 tx_seq.buffer(buffer, chunk_size);
MACRUM 0:615f90842ce8 184 int td = sock.sendto(udp_addr, buffer, chunk_size);
MACRUM 0:615f90842ce8 185
MACRUM 0:615f90842ce8 186 if (td > 0) {
MACRUM 0:615f90842ce8 187 if (MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_DEBUG) {
MACRUM 0:615f90842ce8 188 iomutex.lock();
MACRUM 0:615f90842ce8 189 printf("UDP: tx -> %d\r\n", td);
MACRUM 0:615f90842ce8 190 iomutex.unlock();
MACRUM 0:615f90842ce8 191 }
MACRUM 0:615f90842ce8 192 tx_seq.skip(td);
MACRUM 0:615f90842ce8 193 tx_count += td;
MACRUM 0:615f90842ce8 194 } else if (td != NSAPI_ERROR_WOULD_BLOCK) {
MACRUM 0:615f90842ce8 195 // We may fail to send because of buffering issues, revert to
MACRUM 0:615f90842ce8 196 // last good sequence and cut buffer in half
MACRUM 0:615f90842ce8 197 if (window > MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN) {
MACRUM 0:615f90842ce8 198 window /= 2;
MACRUM 0:615f90842ce8 199 }
MACRUM 0:615f90842ce8 200
MACRUM 0:615f90842ce8 201 if (MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_DEBUG) {
MACRUM 0:615f90842ce8 202 iomutex.lock();
MACRUM 0:615f90842ce8 203 printf("UDP: Not sent (%d), window = %d\r\n", td, window);
MACRUM 0:615f90842ce8 204 iomutex.unlock();
MACRUM 0:615f90842ce8 205 }
MACRUM 0:615f90842ce8 206 }
MACRUM 0:615f90842ce8 207 }
MACRUM 0:615f90842ce8 208
MACRUM 0:615f90842ce8 209 // Prioritize recieving over sending packets to avoid flooding
MACRUM 0:615f90842ce8 210 // the network while handling erronous packets
MACRUM 0:615f90842ce8 211 while (rx_count < size) {
MACRUM 0:615f90842ce8 212 int rd = sock.recvfrom(NULL, buffer, buffer_size);
MACRUM 0:615f90842ce8 213 TEST_ASSERT(rd > 0 || rd == NSAPI_ERROR_WOULD_BLOCK);
MACRUM 0:615f90842ce8 214
MACRUM 0:615f90842ce8 215 if (rd > 0) {
MACRUM 0:615f90842ce8 216 if (MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_DEBUG) {
MACRUM 0:615f90842ce8 217 iomutex.lock();
MACRUM 0:615f90842ce8 218 printf("UDP: rx <- %d\r\n", rd);
MACRUM 0:615f90842ce8 219 iomutex.unlock();
MACRUM 0:615f90842ce8 220 }
MACRUM 0:615f90842ce8 221
MACRUM 0:615f90842ce8 222 if (rx_seq.cmp(buffer, rd) == 0) {
MACRUM 0:615f90842ce8 223 rx_seq.skip(rd);
MACRUM 0:615f90842ce8 224 rx_count += rd;
MACRUM 0:615f90842ce8 225 known_time = timer.read_ms();
MACRUM 0:615f90842ce8 226 if (window < MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MAX) {
MACRUM 0:615f90842ce8 227 window += MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN;
MACRUM 0:615f90842ce8 228 }
MACRUM 0:615f90842ce8 229 }
MACRUM 0:615f90842ce8 230 } else if (timer.read_ms() - known_time >
MACRUM 0:615f90842ce8 231 MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_TIMEOUT) {
MACRUM 0:615f90842ce8 232 // Dropped packet or out of order, revert to last good sequence
MACRUM 0:615f90842ce8 233 // and cut buffer in half
MACRUM 0:615f90842ce8 234 tx_seq = rx_seq;
MACRUM 0:615f90842ce8 235 tx_count = rx_count;
MACRUM 0:615f90842ce8 236 known_time = timer.read_ms();
MACRUM 0:615f90842ce8 237 if (window > MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN) {
MACRUM 0:615f90842ce8 238 window /= 2;
MACRUM 0:615f90842ce8 239 }
MACRUM 0:615f90842ce8 240
MACRUM 0:615f90842ce8 241 if (MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_DEBUG) {
MACRUM 0:615f90842ce8 242 iomutex.lock();
MACRUM 0:615f90842ce8 243 printf("UDP: Dropped, window = %d\r\n", window);
MACRUM 0:615f90842ce8 244 iomutex.unlock();
MACRUM 0:615f90842ce8 245 }
MACRUM 0:615f90842ce8 246 } else if (rd == NSAPI_ERROR_WOULD_BLOCK) {
MACRUM 0:615f90842ce8 247 break;
MACRUM 0:615f90842ce8 248 }
MACRUM 0:615f90842ce8 249 }
MACRUM 0:615f90842ce8 250 }
MACRUM 0:615f90842ce8 251
MACRUM 0:615f90842ce8 252 err = sock.close();
MACRUM 0:615f90842ce8 253 TEST_ASSERT_EQUAL(0, err);
MACRUM 0:615f90842ce8 254 }
MACRUM 0:615f90842ce8 255 }
MACRUM 0:615f90842ce8 256 };
MACRUM 0:615f90842ce8 257
MACRUM 0:615f90842ce8 258 PressureTest *pressure_tests[MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS];
MACRUM 0:615f90842ce8 259
MACRUM 0:615f90842ce8 260
MACRUM 0:615f90842ce8 261 void test_udp_packet_pressure_parallel() {
MACRUM 0:615f90842ce8 262 uint8_t *buffer;
MACRUM 0:615f90842ce8 263 size_t buffer_size;
MACRUM 0:615f90842ce8 264 generate_buffer(&buffer, &buffer_size,
MACRUM 0:615f90842ce8 265 MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN,
MACRUM 0:615f90842ce8 266 MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MAX);
MACRUM 0:615f90842ce8 267
MACRUM 0:615f90842ce8 268 size_t buffer_subsize = buffer_size / MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS;
MACRUM 0:615f90842ce8 269 printf("MBED: Generated buffer %d\r\n", buffer_size);
MACRUM 0:615f90842ce8 270 printf("MBED: Split into %d buffers %d\r\n",
MACRUM 0:615f90842ce8 271 MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS,
MACRUM 0:615f90842ce8 272 buffer_subsize);
MACRUM 0:615f90842ce8 273
MACRUM 0:615f90842ce8 274 int err = net.connect(MBED_CFG_ESP8266_SSID, MBED_CFG_ESP8266_PASS);
MACRUM 0:615f90842ce8 275 TEST_ASSERT_EQUAL(0, err);
MACRUM 0:615f90842ce8 276
MACRUM 0:615f90842ce8 277 printf("MBED: UDPClient IP address is '%s'\n", net.get_ip_address());
MACRUM 0:615f90842ce8 278 printf("MBED: UDPClient waiting for server IP and port...\n");
MACRUM 0:615f90842ce8 279
MACRUM 0:615f90842ce8 280 greentea_send_kv("target_ip", net.get_ip_address());
MACRUM 0:615f90842ce8 281
MACRUM 0:615f90842ce8 282 char recv_key[] = "host_port";
MACRUM 0:615f90842ce8 283 char ipbuf[60] = {0};
MACRUM 0:615f90842ce8 284 char portbuf[16] = {0};
MACRUM 0:615f90842ce8 285 unsigned int port = 0;
MACRUM 0:615f90842ce8 286
MACRUM 0:615f90842ce8 287 greentea_send_kv("host_ip", " ");
MACRUM 0:615f90842ce8 288 greentea_parse_kv(recv_key, ipbuf, sizeof(recv_key), sizeof(ipbuf));
MACRUM 0:615f90842ce8 289
MACRUM 0:615f90842ce8 290 greentea_send_kv("host_port", " ");
MACRUM 0:615f90842ce8 291 greentea_parse_kv(recv_key, portbuf, sizeof(recv_key), sizeof(ipbuf));
MACRUM 0:615f90842ce8 292 sscanf(portbuf, "%u", &port);
MACRUM 0:615f90842ce8 293
MACRUM 0:615f90842ce8 294 printf("MBED: Server IP address received: %s:%d \n", ipbuf, port);
MACRUM 0:615f90842ce8 295 udp_addr.set_ip_address(ipbuf);
MACRUM 0:615f90842ce8 296 udp_addr.set_port(port);
MACRUM 0:615f90842ce8 297
MACRUM 0:615f90842ce8 298 timer.start();
MACRUM 0:615f90842ce8 299
MACRUM 0:615f90842ce8 300 // Startup pressure tests in parallel
MACRUM 0:615f90842ce8 301 for (int i = 0; i < MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS; i++) {
MACRUM 0:615f90842ce8 302 pressure_tests[i] = new PressureTest(&buffer[i*buffer_subsize], buffer_subsize);
MACRUM 0:615f90842ce8 303 pressure_tests[i]->start();
MACRUM 0:615f90842ce8 304 }
MACRUM 0:615f90842ce8 305
MACRUM 0:615f90842ce8 306 for (int i = 0; i < MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS; i++) {
MACRUM 0:615f90842ce8 307 pressure_tests[i]->join();
MACRUM 0:615f90842ce8 308 delete pressure_tests[i];
MACRUM 0:615f90842ce8 309 }
MACRUM 0:615f90842ce8 310
MACRUM 0:615f90842ce8 311 timer.stop();
MACRUM 0:615f90842ce8 312 printf("MBED: Time taken: %fs\r\n", timer.read());
MACRUM 0:615f90842ce8 313 printf("MBED: Speed: %.3fkb/s\r\n",
MACRUM 0:615f90842ce8 314 MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_THREADS*
MACRUM 0:615f90842ce8 315 8*(2*MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MAX -
MACRUM 0:615f90842ce8 316 MBED_CFG_UDP_CLIENT_PACKET_PRESSURE_MIN) / (1000*timer.read()));
MACRUM 0:615f90842ce8 317
MACRUM 0:615f90842ce8 318 net.disconnect();
MACRUM 0:615f90842ce8 319 }
MACRUM 0:615f90842ce8 320
MACRUM 0:615f90842ce8 321
MACRUM 0:615f90842ce8 322 // Test setup
MACRUM 0:615f90842ce8 323 utest::v1::status_t test_setup(const size_t number_of_cases) {
MACRUM 0:615f90842ce8 324 char uuid[48] = {0};
MACRUM 0:615f90842ce8 325 GREENTEA_SETUP_UUID(120, "udp_echo", uuid, 48);
MACRUM 0:615f90842ce8 326
MACRUM 0:615f90842ce8 327 // create mac address based on uuid
MACRUM 0:615f90842ce8 328 uint64_t mac = 0;
MACRUM 0:615f90842ce8 329 for (int i = 0; i < sizeof(uuid); i++) {
MACRUM 0:615f90842ce8 330 mac += uuid[i];
MACRUM 0:615f90842ce8 331 }
MACRUM 0:615f90842ce8 332 mbed_set_mac_address((const char*)mac, /*coerce control bits*/ 1);
MACRUM 0:615f90842ce8 333
MACRUM 0:615f90842ce8 334 return verbose_test_setup_handler(number_of_cases);
MACRUM 0:615f90842ce8 335 }
MACRUM 0:615f90842ce8 336
MACRUM 0:615f90842ce8 337 Case cases[] = {
MACRUM 0:615f90842ce8 338 Case("UDP packet pressure parallel", test_udp_packet_pressure_parallel),
MACRUM 0:615f90842ce8 339 };
MACRUM 0:615f90842ce8 340
MACRUM 0:615f90842ce8 341 Specification specification(test_setup, cases);
MACRUM 0:615f90842ce8 342
MACRUM 0:615f90842ce8 343 int main() {
MACRUM 0:615f90842ce8 344 return !Harness::run(specification);
MACRUM 0:615f90842ce8 345 }
MACRUM 0:615f90842ce8 346
MACRUM 0:615f90842ce8 347