Skip to content

Commit 7d036b5

Browse files
authored
Merge pull request #9283 from michalpasztamobica/tlssocket_greentea
Add TLSSocket greentea tests.
2 parents 1031e2d + af65522 commit 7d036b5

30 files changed

+1763
-234
lines changed

TESTS/netsocket/README.md

Lines changed: 240 additions & 234 deletions
Large diffs are not rendered by default.

TESTS/netsocket/tls/main.cpp

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
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+
#if defined(MBEDTLS_SSL_CLI_C) || defined(DOXYGEN_ONLY)
35+
36+
using namespace utest::v1;
37+
38+
namespace {
39+
Timer tc_bucket; // Timer to limit a test cases run time
40+
}
41+
42+
#if MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
43+
mbed_stats_socket_t tls_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
44+
#endif
45+
46+
char tls_global::rx_buffer[RX_BUFF_SIZE];
47+
char tls_global::tx_buffer[TX_BUFF_SIZE];
48+
49+
const char *tls_global::cert = \
50+
"-----BEGIN CERTIFICATE-----\n"
51+
"MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n"
52+
"MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n"
53+
"DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n"
54+
"SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n"
55+
"GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
56+
"AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n"
57+
"q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n"
58+
"SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n"
59+
"Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n"
60+
"a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n"
61+
"/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n"
62+
"AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n"
63+
"CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n"
64+
"bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n"
65+
"c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n"
66+
"VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n"
67+
"ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n"
68+
"MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n"
69+
"Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n"
70+
"AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n"
71+
"uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n"
72+
"wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n"
73+
"X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n"
74+
"PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n"
75+
"KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n"
76+
"-----END CERTIFICATE-----\n";
77+
78+
void drop_bad_packets(TLSSocket &sock, int orig_timeout)
79+
{
80+
nsapi_error_t err;
81+
sock.set_timeout(0);
82+
while (true) {
83+
err = sock.recv(NULL, 0);
84+
if (err == NSAPI_ERROR_WOULD_BLOCK) {
85+
break;
86+
}
87+
}
88+
sock.set_timeout(orig_timeout);
89+
}
90+
91+
static void _ifup()
92+
{
93+
NetworkInterface *net = NetworkInterface::get_default_instance();
94+
nsapi_error_t err = net->connect();
95+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, err);
96+
printf("MBED: TLSClient IP address is '%s'\n", net->get_ip_address());
97+
}
98+
99+
static void _ifdown()
100+
{
101+
NetworkInterface::get_default_instance()->disconnect();
102+
printf("MBED: ifdown\n");
103+
}
104+
105+
nsapi_error_t tlssocket_connect_to_srv(TLSSocket &sock, uint16_t port)
106+
{
107+
SocketAddress tls_addr;
108+
109+
NetworkInterface::get_default_instance()->gethostbyname(MBED_CONF_APP_ECHO_SERVER_ADDR, &tls_addr);
110+
tls_addr.set_port(port);
111+
112+
printf("MBED: Server '%s', port %d\n", tls_addr.get_ip_address(), tls_addr.get_port());
113+
114+
nsapi_error_t err = sock.set_root_ca_cert(tls_global::cert);
115+
if (err != NSAPI_ERROR_OK) {
116+
printf("Error from sock.set_root_ca_cert: %d\n", err);
117+
return err;
118+
}
119+
120+
err = sock.open(NetworkInterface::get_default_instance());
121+
if (err != NSAPI_ERROR_OK) {
122+
printf("Error from sock.open: %d\n", err);
123+
return err;
124+
}
125+
126+
err = sock.connect(tls_addr);
127+
if (err != NSAPI_ERROR_OK) {
128+
printf("Error from sock.connect: %d\n", err);
129+
return err;
130+
}
131+
132+
return NSAPI_ERROR_OK;
133+
}
134+
135+
nsapi_error_t tlssocket_connect_to_echo_srv(TLSSocket &sock)
136+
{
137+
return tlssocket_connect_to_srv(sock, MBED_CONF_APP_ECHO_SERVER_PORT_TLS);
138+
}
139+
140+
nsapi_error_t tlssocket_connect_to_discard_srv(TLSSocket &sock)
141+
{
142+
return tlssocket_connect_to_srv(sock, MBED_CONF_APP_ECHO_SERVER_DISCARD_PORT_TLS);
143+
}
144+
145+
void fill_tx_buffer_ascii(char *buff, size_t len)
146+
{
147+
for (size_t i = 0; i < len; ++i) {
148+
buff[i] = (rand() % 43) + '0';
149+
}
150+
}
151+
152+
int split2half_rmng_tls_test_time()
153+
{
154+
return (tls_global::TESTS_TIMEOUT - tc_bucket.read()) / 2;
155+
}
156+
157+
#if MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
158+
int fetch_stats()
159+
{
160+
return SocketStats::mbed_stats_socket_get_each(&tls_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT);
161+
}
162+
#endif
163+
164+
// Test setup
165+
utest::v1::status_t greentea_setup(const size_t number_of_cases)
166+
{
167+
GREENTEA_SETUP(tls_global::TESTS_TIMEOUT, "default_auto");
168+
_ifup();
169+
tc_bucket.start();
170+
return greentea_test_setup_handler(number_of_cases);
171+
}
172+
173+
void greentea_teardown(const size_t passed, const size_t failed, const failure_t failure)
174+
{
175+
tc_bucket.stop();
176+
_ifdown();
177+
return greentea_test_teardown_handler(passed, failed, failure);
178+
}
179+
180+
181+
Case cases[] = {
182+
Case("TLSSOCKET_ECHOTEST", TLSSOCKET_ECHOTEST),
183+
Case("TLSSOCKET_ECHOTEST_NONBLOCK", TLSSOCKET_ECHOTEST_NONBLOCK),
184+
Case("TLSSOCKET_CONNECT_INVALID", TLSSOCKET_CONNECT_INVALID),
185+
Case("TLSSOCKET_ECHOTEST_BURST", TLSSOCKET_ECHOTEST_BURST),
186+
Case("TLSSOCKET_ECHOTEST_BURST_NONBLOCK", TLSSOCKET_ECHOTEST_BURST_NONBLOCK),
187+
Case("TLSSOCKET_RECV_TIMEOUT", TLSSOCKET_RECV_TIMEOUT),
188+
Case("TLSSOCKET_ENDPOINT_CLOSE", TLSSOCKET_ENDPOINT_CLOSE),
189+
Case("TLSSOCKET_HANDSHAKE_INVALID", TLSSOCKET_HANDSHAKE_INVALID),
190+
Case("TLSSOCKET_OPEN_TWICE", TLSSOCKET_OPEN_TWICE),
191+
Case("TLSSOCKET_OPEN_LIMIT", TLSSOCKET_OPEN_LIMIT),
192+
Case("TLSSOCKET_OPEN_DESTRUCT", TLSSOCKET_OPEN_DESTRUCT),
193+
Case("TLSSOCKET_SEND_UNCONNECTED", TLSSOCKET_SEND_UNCONNECTED),
194+
Case("TLSSOCKET_SEND_CLOSED", TLSSOCKET_SEND_CLOSED),
195+
Case("TLSSOCKET_SEND_REPEAT", TLSSOCKET_SEND_REPEAT),
196+
Case("TLSSOCKET_SEND_TIMEOUT", TLSSOCKET_SEND_TIMEOUT),
197+
Case("TLSSOCKET_NO_CERT", TLSSOCKET_NO_CERT),
198+
#ifndef __IAR_SYSTEMS_ICC__
199+
Case("TLSSOCKET_SIMULTANEOUS", TLSSOCKET_SIMULTANEOUS)
200+
#endif
201+
};
202+
203+
Specification specification(greentea_setup, cases, greentea_teardown, greentea_continue_handlers);
204+
205+
int retval;
206+
void run_test(void)
207+
{
208+
retval = !Harness::run(specification);
209+
}
210+
211+
static unsigned char stack_mem[8192];
212+
int main()
213+
{
214+
Thread *th = new Thread(osPriorityNormal, 8192, stack_mem, "tls_gt_thread");
215+
th->start(callback(run_test));
216+
th->join();
217+
return retval;
218+
}
219+
220+
#else
221+
#error [NOT_SUPPORTED] This device does not support SSL library
222+
#endif // defined(MBEDTLS_SSL_CLI_C) || defined(DOXYGEN_ONLY)

TESTS/netsocket/tls/tls_tests.h

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
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+
#ifndef TLS_TESTS_H
19+
#define TLS_TESTS_H
20+
21+
#include "TLSSocket.h"
22+
23+
#if defined(MBEDTLS_SSL_CLI_C) || defined(DOXYGEN_ONLY)
24+
25+
NetworkInterface *get_interface();
26+
void drop_bad_packets(TLSSocket &sock, int orig_timeout);
27+
void fill_tx_buffer_ascii(char *buff, size_t len);
28+
nsapi_error_t tlssocket_connect_to_echo_srv(TLSSocket &sock);
29+
nsapi_error_t tlssocket_connect_to_discard_srv(TLSSocket &sock);
30+
31+
#if MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
32+
extern mbed_stats_socket_t tls_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
33+
int fetch_stats(void);
34+
#endif
35+
36+
/**
37+
* Single testcase might take only half of the remaining execution time
38+
*/
39+
int split2half_rmng_tls_test_time(); // [s]
40+
41+
namespace tls_global {
42+
static const int TESTS_TIMEOUT = 480;
43+
static const int TLS_OS_STACK_SIZE = 2048;
44+
45+
static const int RX_BUFF_SIZE = 1220;
46+
static const int TX_BUFF_SIZE = 1220;
47+
48+
extern char rx_buffer[RX_BUFF_SIZE];
49+
extern char tx_buffer[TX_BUFF_SIZE];
50+
extern const char *cert;
51+
}
52+
53+
/*
54+
* Test cases
55+
*/
56+
void TLSSOCKET_CONNECT_INVALID();
57+
void TLSSOCKET_HANDSHAKE_INVALID();
58+
void TLSSOCKET_ECHOTEST();
59+
void TLSSOCKET_ECHOTEST_NONBLOCK();
60+
void TLSSOCKET_ECHOTEST_BURST();
61+
void TLSSOCKET_ECHOTEST_BURST_NONBLOCK();
62+
void TLSSOCKET_ENDPOINT_CLOSE();
63+
void TLSSOCKET_RECV_TIMEOUT();
64+
void TLSSOCKET_OPEN_TWICE();
65+
void TLSSOCKET_OPEN_LIMIT();
66+
void TLSSOCKET_OPEN_DESTRUCT();
67+
void TLSSOCKET_SEND_UNCONNECTED();
68+
void TLSSOCKET_SEND_CLOSED();
69+
void TLSSOCKET_SEND_REPEAT();
70+
void TLSSOCKET_NO_CERT();
71+
void TLSSOCKET_SIMULTANEOUS();
72+
void TLSSOCKET_SEND_TIMEOUT();
73+
74+
#endif // defined(MBEDTLS_SSL_CLI_C) || defined(DOXYGEN_ONLY)
75+
76+
#endif //TLS_TESTS_H
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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+
#include "mbed.h"
19+
#include "TLSSocket.h"
20+
#include "greentea-client/test_env.h"
21+
#include "unity/unity.h"
22+
#include "utest.h"
23+
#include "tls_tests.h"
24+
25+
using namespace utest::v1;
26+
27+
#if defined(MBEDTLS_SSL_CLI_C)
28+
29+
void TLSSOCKET_CONNECT_INVALID()
30+
{
31+
TLSSocket sock;
32+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.open(NetworkInterface::get_default_instance()));
33+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.set_root_ca_cert(tls_global::cert));
34+
35+
TEST_ASSERT(sock.connect(NULL, MBED_CONF_APP_ECHO_SERVER_DISCARD_PORT_TLS) < 0);
36+
TEST_ASSERT(sock.connect("", MBED_CONF_APP_ECHO_SERVER_DISCARD_PORT_TLS) < 0);
37+
TEST_ASSERT(sock.connect("", 0) < 0);
38+
39+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK,
40+
sock.connect(MBED_CONF_APP_ECHO_SERVER_ADDR, MBED_CONF_APP_ECHO_SERVER_DISCARD_PORT_TLS));
41+
42+
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock.close());
43+
}
44+
45+
#endif // defined(MBEDTLS_SSL_CLI_C)

0 commit comments

Comments
 (0)