Skip to content

Commit d568e21

Browse files
Add TLSSocket greentea tests.
TLSSocket tests based on existing TCPSocket greentea tests and TLSSocket icetea tests.
1 parent 31579fe commit d568e21

29 files changed

+1491
-26
lines changed

TESTS/netsocket/README.md

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ The target for this plan is to test:
1717
- [Socket](https://github.com/ARMmbed/mbed-os/blob/master/features/netsocket/Socket.h).
1818
- [UDPSocket](https://github.com/ARMmbed/mbed-os/blob/master/features/netsocket/UDPSocket.h).
1919
- [TCPSocket](https://github.com/ARMmbed/mbed-os/blob/master/features/netsocket/TCPSocket.h).
20-
- [TCPServer](https://github.com/ARMmbed/mbed-os/blob/master/features/netsocket/TCPServer.h).
20+
- [TLSSocket](https://github.com/ARMmbed/mbed-os/blob/master/features/netsocket/TLSSocket.h).
2121

2222
Reference documentation: https://os.mbed.com/docs/latest/reference/network-socket.html
2323

@@ -102,35 +102,41 @@ time stream tcp6 nowait root internal
102102
You can connect to the test server with an NMAP tool like this:
103103

104104
```.sh
105-
$ nmap -sT -p7,9,13,37 echo.mbedcloudtesting.com
105+
$ nmap -sT -p7,9,13,37,2007,2009,2013 echo.mbedcloudtesting.com
106106

107-
Starting Nmap 7.12 ( https://nmap.org ) at 2018-04-05 16:17 EEST
107+
Starting Nmap 7.01 ( https://nmap.org ) at 2019-01-07 16:45 CET
108108
Nmap scan report for echo.mbedcloudtesting.com (52.215.34.155)
109-
Host is up (0.065s latency).
110-
Other addresses for echo.mbedcloudtesting.com (not scanned): 2a05:d018:21f:3800:8584:60f8:bc9f:e614
109+
Host is up (0.027s latency).
110+
Other addresses for echo.mbedcloudtesting.com (not scanned): 2a05:d018:21f:3800:3164:2a5c:75b3:970b
111111
rDNS record for 52.215.34.155: ec2-52-215-34-155.eu-west-1.compute.amazonaws.com
112-
PORT STATE SERVICE
113-
7/tcp open echo
114-
9/tcp open discard
115-
13/tcp open daytime
116-
37/tcp open time
112+
PORT STATE SERVICE
113+
7/tcp open echo
114+
9/tcp open discard
115+
13/tcp open daytime
116+
37/tcp open time
117+
2007/tcp open dectalk
118+
2009/tcp open news
119+
2013/tcp open raid-am
117120

118-
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
121+
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
119122

120-
$ sudo nmap -sT -p7,9,13,37 echo.mbedcloudtesting.com
123+
$ sudo nmap -sU -p7,9,13,37,2007,2009,2013 echo.mbedcloudtesting.com
121124

122-
Starting Nmap 7.12 ( https://nmap.org ) at 2018-04-05 16:16 EEST
125+
Starting Nmap 7.01 ( https://nmap.org ) at 2019-01-08 15:05 CET
123126
Nmap scan report for echo.mbedcloudtesting.com (52.215.34.155)
124-
Host is up (0.068s latency).
125-
Other addresses for echo.mbedcloudtesting.com (not scanned): 2a05:d018:21f:3800:8584:60f8:bc9f:e614
127+
Host is up (0.044s latency).
128+
Other addresses for echo.mbedcloudtesting.com (not scanned): 2a05:d018:21f:3800:3164:2a5c:75b3:970b
126129
rDNS record for 52.215.34.155: ec2-52-215-34-155.eu-west-1.compute.amazonaws.com
127-
PORT STATE SERVICE
128-
7/tcp open echo
129-
9/tcp open discard
130-
13/tcp open daytime
131-
37/tcp open time
132-
133-
Nmap done: 1 IP address (1 host up) scanned in 0.20 seconds
130+
PORT STATE SERVICE
131+
7/udp open echo
132+
9/udp open|filtered discard
133+
13/udp closed daytime
134+
37/udp closed time
135+
2007/udp closed raid-am
136+
2009/udp closed whosockami
137+
2013/udp closed raid-cd
138+
139+
Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds
134140
```
135141

136142
### Ethernet test environment
@@ -242,10 +248,18 @@ content at minimum:
242248
"echo-server-port" : {
243249
"help" : "Port of echo server",
244250
"value" : "7"
245-
}
251+
},
246252
"echo-server-discard-port" : {
247253
"help" : "Discard port of echo server",
248254
"value" : "9"
255+
},
256+
"echo-server-port-tls" : {
257+
"help" : "Echo port of echo server",
258+
"value" : "2007"
259+
},
260+
"echo-server-discard-port-tls" : {
261+
"help" : "Discard port of echo server",
262+
"value" : "2009"
249263
}
250264
}
251265
}
@@ -301,6 +315,10 @@ the `mbed_app.json` might look like this:
301315
"help" : "Port of echo server",
302316
"value" : "7"
303317
}
318+
"echo-server-port-tls" : {
319+
"help" : "Port of echo server TLS",
320+
"value" : "2007"
321+
}
304322
},
305323
"target_overrides": {
306324
"*": {
@@ -1651,8 +1669,6 @@ Subset for driver test
16511669

16521670
### For physical layer driver (emac, PPP):
16531671

1654-
- TCPSERVER_ACCEPT
1655-
- TCPSERVER_LISTEN
16561672
- TCPSOCKET_ECHOTEST
16571673
- TCPSOCKET_ECHOTEST_BURST
16581674
- TCPSOCKET_ECHOTEST_BURST_NONBLOCK
@@ -1671,4 +1687,4 @@ Subset for driver test
16711687

16721688
### For socket layer driver (AT-driven, external IP stack):
16731689

1674-
All Socket, UDPSocket, TCPSocket and TCPServer testcases.
1690+
All Socket, UDPSocket, TCPSocket and TLSSocket testcases.

TESTS/netsocket/tls/main.cpp

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
/*
2+
* Copyright (c) 2019, ARM Limited, All Rights Reserved
3+
* SPDX-License-Identifier: Apache-2.0
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License"); you may
6+
* not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
#define WIFI 2
19+
#if !defined(MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE) || \
20+
(MBED_CONF_TARGET_NETWORK_DEFAULT_INTERFACE_TYPE == WIFI && !defined(MBED_CONF_NSAPI_DEFAULT_WIFI_SSID))
21+
#error [NOT_SUPPORTED] No network configuration found for this target.
22+
#endif
23+
#ifndef MBED_CONF_APP_ECHO_SERVER_ADDR
24+
#error [NOT_SUPPORTED] Requires parameters from mbed_app.json
25+
#endif
26+
27+
#include "mbed.h"
28+
#include "greentea-client/test_env.h"
29+
#include "unity/unity.h"
30+
#include "utest.h"
31+
#include "utest/utest_stack_trace.h"
32+
#include "tls_tests.h"
33+
34+
using namespace utest::v1;
35+
36+
namespace {
37+
Timer tc_bucket; // Timer to limit a test cases run time
38+
}
39+
40+
#if MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
41+
mbed_stats_socket_t tls_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
42+
#endif
43+
44+
char tls_global::rx_buffer[RX_BUFF_SIZE];
45+
char tls_global::tx_buffer[TX_BUFF_SIZE];
46+
47+
const char *tls_global::cert = \
48+
"-----BEGIN CERTIFICATE-----\n"
49+
"MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n"
50+
"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n"
51+
"DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n"
52+
"SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n"
53+
"GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
54+
"AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n"
55+
"q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n"
56+
"SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n"
57+
"Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n"
58+
"a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n"
59+
"/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n"
60+
"AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n"
61+
"CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n"
62+
"bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n"
63+
"c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n"
64+
"VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n"
65+
"ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n"
66+
"MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n"
67+
"Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n"
68+
"AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n"
69+
"uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n"
70+
"wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n"
71+
"X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n"
72+
"PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n"
73+
"KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n"
74+
"-----END CERTIFICATE-----\n";
75+
76+
void drop_bad_packets(TLSSocket &sock, int orig_timeout)
77+
{
78+
nsapi_error_t err;
79+
sock.set_timeout(0);
80+
while (true) {
81+
err = sock.recv(NULL, 0);
82+
if (err == NSAPI_ERROR_WOULD_BLOCK) {
83+
break;
84+
}
85+
}
86+
sock.set_timeout(orig_timeout);
87+
}
88+
89+
static void _ifup()
90+
{
91+
NetworkInterface *net = NetworkInterface::get_default_instance();
92+
nsapi_error_t err = net->connect();
93+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, err);
94+
printf("MBED: TLSClient IP address is '%s'\n", net->get_ip_address());
95+
}
96+
97+
static void _ifdown()
98+
{
99+
NetworkInterface::get_default_instance()->disconnect();
100+
printf("MBED: ifdown\n");
101+
}
102+
103+
nsapi_error_t tlssocket_connect_to_srv(TLSSocket &sock, uint16_t port)
104+
{
105+
SocketAddress tls_addr;
106+
107+
NetworkInterface::get_default_instance()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &tls_addr);
108+
tls_addr.set_port(port);
109+
110+
printf("MBED: Server '%s', port %d\n", tls_addr.get_ip_address(), tls_addr.get_port());
111+
112+
nsapi_error_t err = sock.set_root_ca_cert(tls_global::cert);
113+
if (err != NSAPI_ERROR_OK) {
114+
printf("Error from sock.set_root_ca_cert: %d\n", err);
115+
return err;
116+
}
117+
118+
err = sock.open(NetworkInterface::get_default_instance());
119+
if (err != NSAPI_ERROR_OK) {
120+
printf("Error from sock.open: %d\n", err);
121+
return err;
122+
}
123+
124+
err = sock.connect(tls_addr);
125+
if (err != NSAPI_ERROR_OK) {
126+
printf("Error from sock.connect: %d\n", err);
127+
return err;
128+
}
129+
130+
return NSAPI_ERROR_OK;
131+
}
132+
133+
nsapi_error_t tlssocket_connect_to_echo_srv(TLSSocket &sock)
134+
{
135+
return tlssocket_connect_to_srv(sock, MBED_CONF_APP_ECHO_SERVER_PORT_TLS);
136+
}
137+
138+
nsapi_error_t tlssocket_connect_to_discard_srv(TLSSocket &sock)
139+
{
140+
return tlssocket_connect_to_srv(sock, MBED_CONF_APP_ECHO_SERVER_DISCARD_PORT_TLS);
141+
}
142+
143+
void fill_tx_buffer_ascii(char *buff, size_t len)
144+
{
145+
for (size_t i = 0; i < len; ++i) {
146+
buff[i] = (rand() % 43) + '0';
147+
}
148+
}
149+
150+
int split2half_rmng_tls_test_time()
151+
{
152+
return (tls_global::TESTS_TIMEOUT - tc_bucket.read()) / 2;
153+
}
154+
155+
#if MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
156+
int fetch_stats()
157+
{
158+
return SocketStats::mbed_stats_socket_get_each(&tls_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT);
159+
}
160+
#endif
161+
162+
// Test setup
163+
utest::v1::status_t greentea_setup(const size_t number_of_cases)
164+
{
165+
GREENTEA_SETUP(tls_global::TESTS_TIMEOUT, "default_auto");
166+
_ifup();
167+
tc_bucket.start();
168+
return greentea_test_setup_handler(number_of_cases);
169+
}
170+
171+
void greentea_teardown(const size_t passed, const size_t failed, const failure_t failure)
172+
{
173+
tc_bucket.stop();
174+
_ifdown();
175+
return greentea_test_teardown_handler(passed, failed, failure);
176+
}
177+
178+
179+
Case cases[] = {
180+
Case("TLSSOCKET_ECHOTEST", TLSSOCKET_ECHOTEST),
181+
Case("TLSSOCKET_ECHOTEST_NONBLOCK", TLSSOCKET_ECHOTEST_NONBLOCK),
182+
Case("TLSSOCKET_CONNECT_INVALID", TLSSOCKET_CONNECT_INVALID),
183+
Case("TLSSOCKET_ECHOTEST_BURST", TLSSOCKET_ECHOTEST_BURST),
184+
Case("TLSSOCKET_ECHOTEST_BURST_NONBLOCK", TLSSOCKET_ECHOTEST_BURST_NONBLOCK),
185+
Case("TLSSOCKET_RECV_TIMEOUT", TLSSOCKET_RECV_TIMEOUT),
186+
Case("TLSSOCKET_ENDPOINT_CLOSE", TLSSOCKET_ENDPOINT_CLOSE),
187+
Case("TLSSOCKET_HANDSHAKE_INVALID", TLSSOCKET_HANDSHAKE_INVALID),
188+
Case("TLSSOCKET_OPEN_TWICE", TLSSOCKET_OPEN_TWICE),
189+
Case("TLSSOCKET_OPEN_LIMIT", TLSSOCKET_OPEN_LIMIT),
190+
Case("TLSSOCKET_OPEN_DESTRUCT", TLSSOCKET_OPEN_DESTRUCT),
191+
Case("TLSSOCKET_SEND_UNCONNECTED", TLSSOCKET_SEND_UNCONNECTED),
192+
Case("TLSSOCKET_SEND_CLOSED", TLSSOCKET_SEND_CLOSED),
193+
Case("TLSSOCKET_SEND_REPEAT", TLSSOCKET_SEND_REPEAT),
194+
Case("TLSSOCKET_SEND_TIMEOUT", TLSSOCKET_SEND_TIMEOUT),
195+
Case("TLSSOCKET_NO_CERT", TLSSOCKET_NO_CERT),
196+
Case("TLSSOCKET_SIMULTANEOUS", TLSSOCKET_SIMULTANEOUS)
197+
};
198+
199+
Specification specification(greentea_setup, cases, greentea_teardown, greentea_continue_handlers);
200+
201+
int retval;
202+
void run_test(void)
203+
{
204+
retval = !Harness::run(specification);
205+
}
206+
207+
static unsigned char stack_mem[8192];
208+
int main()
209+
{
210+
Thread *th = new Thread(osPriorityNormal, 8192, stack_mem, "tls_gt_thread");
211+
th->start(callback(run_test));
212+
th->join();
213+
return retval;
214+
}

0 commit comments

Comments
 (0)