42
42
43
43
#define NETWORK_TIMEOUT (180 *1000 )
44
44
#define SOCKET_TIMEOUT (30 *1000 )
45
- #define SOCKET_COUNT_MAX 4
46
45
47
46
#define ECHO_SERVER_NAME " echo.mbedcloudtesting.com"
48
47
#define ECHO_SERVER_UDP_PORT 7
@@ -56,21 +55,22 @@ static SocketAddress echo_server_addr;
56
55
57
56
class EchoSocket : public UDPSocket {
58
57
public:
59
- template <typename S>
60
- EchoSocket (int async, S *stack, int size) : UDPSocket(stack), _data(0 ), _async_flag(async) {
61
- _size = size;
62
- if (_async_flag) {
63
- set_blocking (false );
64
- sigio (callback (this , &EchoSocket::async_callback));
65
- } else {
66
- set_blocking (true );
67
- set_timeout (SOCKET_TIMEOUT);
68
- sigio (NULL );
69
- }
58
+ EchoSocket (int size) : UDPSocket(), _async_flag(0 ), _data(0 ), _size(size) {
70
59
}
71
60
virtual ~EchoSocket () {
72
- TEST_ASSERT (close () == NSAPI_ERROR_OK);
73
61
delete _data;
62
+ }
63
+ void set_async (int async) {
64
+ _async_flag = async;
65
+ if (_async_flag) {
66
+ set_blocking (false );
67
+ sigio (callback (this , &EchoSocket::async_callback));
68
+ } else {
69
+ set_blocking (true );
70
+ set_timeout (SOCKET_TIMEOUT);
71
+ sigio (NULL );
72
+ }
73
+
74
74
}
75
75
void test_sendto (const char *const hostname = NULL ) {
76
76
_data = new uint8_t [_size];
@@ -139,61 +139,32 @@ static void udp_network_stack()
139
139
140
140
static void udp_gethostbyname ()
141
141
{
142
- TEST_ASSERT (cellular.get_network ()->gethostbyname (ECHO_SERVER_NAME, &echo_server_addr) == 0 );
142
+ TEST_ASSERT (cellular.get_network ()->gethostbyname (ECHO_SERVER_NAME, &echo_server_addr) == 0 );
143
+ tr_info (" HOST: %s" , echo_server_addr.get_ip_address ());
143
144
echo_server_addr.set_port (7 );
144
-
145
- EchoSocket echo_socket_blocking (0 , cellular.get_network (), 4 );
146
- echo_socket_blocking.test_sendto (ECHO_SERVER_NAME);
147
- echo_socket_blocking.test_recvfrom ();
148
-
149
- EchoSocket echo_socket_async (0x1 , cellular.get_network (), 4 );
150
- echo_socket_async.test_sendto (ECHO_SERVER_NAME);
151
- echo_socket_async.test_recvfrom ();
152
- }
153
-
154
- static void socket_send_receive (bool async)
155
- {
156
- // smallest possible packet size
157
- EchoSocket echo_socket_1 (async?0x1 :0 , cellular.get_network (), 1 );
158
- echo_socket_1.test_sendto ();
159
- echo_socket_1.test_recvfrom ();
160
-
161
- // UDP shall support at least 512 byte packets
162
- EchoSocket echo_socket_2 (async?0x1 :0 , cellular.get_network (), 512 );
163
- echo_socket_2.test_sendto ();
164
- echo_socket_2.test_recvfrom ();
145
+ wait (1 );
165
146
}
166
147
167
148
static void udp_socket_send_receive ()
168
149
{
169
- socket_send_receive (false ); // blocking
170
- socket_send_receive (true ); // async
171
- }
172
-
173
- static void socket_multiple_simultaneous (bool async)
174
- {
175
- EchoSocket *echo_sockets[SOCKET_COUNT_MAX];
176
- for (int i=0 ; i<SOCKET_COUNT_MAX; i++) {
177
- // every second socket is blocking/async, data packets are multiple of 4 bytes
178
- echo_sockets[i] = new EchoSocket ((async)?(1 <<i):0 , cellular.get_network (), (i + 1 ) * 4 );
179
- echo_sockets[i]->test_sendto ();
180
- }
181
-
182
- // reading shall also work in different order than sending
183
- for (int i=1 ; i<SOCKET_COUNT_MAX; i++) {
184
- echo_sockets[i]->test_recvfrom ();
185
- }
186
- echo_sockets[0 ]->test_recvfrom ();
187
-
188
- for (int i=0 ; i<SOCKET_COUNT_MAX; i++) {
189
- delete echo_sockets[i];
190
- }
150
+ EchoSocket echo_socket (4 );
151
+ TEST_ASSERT (echo_socket.open (cellular.get_network ()) == NSAPI_ERROR_OK);
152
+ echo_socket.set_async (0 );
153
+ echo_socket.test_sendto ();
154
+ echo_socket.test_recvfrom ();
155
+ TEST_ASSERT (echo_socket.close () == NSAPI_ERROR_OK);
156
+ wait (1 );
191
157
}
192
158
193
- static void udp_socket_multiple_simultaneous ()
159
+ static void udp_socket_send_receive_async ()
194
160
{
195
- socket_multiple_simultaneous (false ); // blocking
196
- socket_multiple_simultaneous (true ); // async
161
+ EchoSocket echo_socket (4 );
162
+ TEST_ASSERT (echo_socket.open (cellular.get_network ()) == NSAPI_ERROR_OK);
163
+ echo_socket.set_async (1 );
164
+ echo_socket.test_sendto ();
165
+ echo_socket.test_recvfrom ();
166
+ TEST_ASSERT (echo_socket.close () == NSAPI_ERROR_OK);
167
+ wait (1 );
197
168
}
198
169
199
170
using namespace utest ::v1;
@@ -208,7 +179,8 @@ static Case cases[] = {
208
179
Case (" UDP network stack" , udp_network_stack, greentea_failure_handler),
209
180
Case (" UDP gethostbyname" , udp_gethostbyname, greentea_failure_handler),
210
181
Case (" UDP socket send/receive" , udp_socket_send_receive, greentea_failure_handler),
211
- Case (" UDP socket multiple simultaneous" , udp_socket_multiple_simultaneous, greentea_failure_handler),
182
+ Case (" UDP socket send/receive async" , udp_socket_send_receive_async, greentea_failure_handler),
183
+ // Case("UDP socket multiple simultaneous", udp_socket_multiple_simultaneous, greentea_failure_handler),
212
184
};
213
185
214
186
static utest::v1::status_t test_setup (const size_t number_of_cases)
0 commit comments