15
15
* limitations under the License.
16
16
*/
17
17
18
- #ifndef MBED_CONF_APP_CONNECT_STATEMENT
19
- #error [NOT_SUPPORTED] No network configuration found for this target.
20
- #endif
18
+ #ifndef MBED_CONF_APP_CONNECT_STATEMENT
19
+ #error [NOT_SUPPORTED] No network configuration found for this target.
20
+ #endif
21
21
22
22
#ifndef MBED_EXTENDED_TESTS
23
- #error [NOT_SUPPORTED] Parallel tests are not supported by default
23
+ #error [NOT_SUPPORTED] Parallel tests are not supported by default
24
24
#endif
25
25
26
26
#include " mbed.h"
33
33
using namespace utest ::v1;
34
34
35
35
36
- #ifndef MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE
37
- #define MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE 64
36
+ #ifndef MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE
37
+ #define MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE 64
38
38
#endif
39
39
40
- #ifndef MBED_CFG_TCP_CLIENT_ECHO_THREADS
41
- #define MBED_CFG_TCP_CLIENT_ECHO_THREADS 3
40
+ #ifndef MBED_CONF_APP_TCP_CLIENT_ECHO_THREADS
41
+ #define MBED_CONF_APP_TCP_CLIENT_ECHO_THREADS 3
42
42
#endif
43
43
44
44
#define STRINGIZE (x ) STRINGIZE2(x)
@@ -49,51 +49,59 @@ NetworkInterface* net;
49
49
SocketAddress tcp_addr;
50
50
Mutex iomutex;
51
51
52
- void prep_buffer (char *tx_buffer, size_t tx_size) {
53
- for (size_t i=0 ; i<tx_size; ++i) {
52
+ void prep_buffer (char *tx_buffer, size_t tx_size)
53
+ {
54
+ for (size_t i = 0 ; i < tx_size; ++i) {
54
55
tx_buffer[i] = (rand () % 10 ) + ' 0' ;
55
56
}
56
57
}
57
58
58
59
59
60
// Each echo class is in charge of one parallel transaction
60
- class Echo {
61
+ class Echo
62
+ {
61
63
private:
62
- char tx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE ];
63
- char rx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE ];
64
+ char tx_buffer[MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE ];
65
+ char rx_buffer[MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE ];
64
66
65
67
TCPSocket sock;
66
68
Thread thread;
67
69
68
70
public:
69
71
// Limiting stack size to 1k
70
- Echo (): thread(osPriorityNormal, 1024 ) {
72
+ Echo (): thread(osPriorityNormal, 1024 )
73
+ {
71
74
}
72
75
73
- void start () {
76
+ void start ()
77
+ {
74
78
osStatus status = thread.start (callback (this , &Echo::echo));
75
79
TEST_ASSERT_EQUAL (osOK, status);
76
80
}
77
81
78
- void join () {
82
+ void join ()
83
+ {
79
84
osStatus status = thread.join ();
80
85
TEST_ASSERT_EQUAL (osOK, status);
81
86
}
82
87
83
- void echo () {
88
+ void echo ()
89
+ {
84
90
int err = sock.open (net);
85
91
TEST_ASSERT_EQUAL (0 , err);
86
92
87
93
err = sock.connect (tcp_addr);
88
94
TEST_ASSERT_EQUAL (0 , err);
89
95
96
+ #if defined(MBED_CONF_APP_TCP_ECHO_PREFIX)
90
97
// recv connection prefix message
91
98
sock.recv (rx_buffer, sizeof (MBED_CONF_APP_TCP_ECHO_PREFIX));
99
+ #endif /* MBED_CONF_APP_TCP_ECHO_PREFIX */
92
100
memset (rx_buffer, 0 , sizeof (rx_buffer));
93
101
94
102
iomutex.lock ();
95
103
printf (" HTTP: Connected to %s:%d\r\n " ,
96
- tcp_addr.get_ip_address (), tcp_addr.get_port ());
104
+ tcp_addr.get_ip_address (), tcp_addr.get_port ());
97
105
printf (" tx_buffer buffer size: %u\r\n " , sizeof (tx_buffer));
98
106
printf (" rx_buffer buffer size: %u\r\n " , sizeof (rx_buffer));
99
107
iomutex.unlock ();
@@ -112,26 +120,45 @@ class Echo {
112
120
}
113
121
};
114
122
115
- Echo *echoers[MBED_CFG_TCP_CLIENT_ECHO_THREADS ];
123
+ Echo *echoers[MBED_CONF_APP_TCP_CLIENT_ECHO_THREADS ];
116
124
117
125
118
- void test_tcp_echo_parallel () {
126
+ void test_tcp_echo_parallel ()
127
+ {
119
128
net = MBED_CONF_APP_OBJECT_CONSTRUCTION;
120
129
int err = MBED_CONF_APP_CONNECT_STATEMENT;
121
130
TEST_ASSERT_EQUAL (0 , err);
122
131
123
132
printf (" MBED: TCPClient IP address is '%s'\n " , net->get_ip_address ());
124
133
134
+ #if defined(MBED_CONF_APP_ECHO_SERVER_ADDR) && defined(MBED_CONF_APP_ECHO_SERVER_PORT)
125
135
tcp_addr.set_ip_address (MBED_CONF_APP_ECHO_SERVER_ADDR);
126
136
tcp_addr.set_port (MBED_CONF_APP_ECHO_SERVER_PORT);
137
+ #else /* MBED_CONF_APP_ECHO_SERVER_ADDR && MBED_CONF_APP_ECHO_SERVER_PORT */
138
+ char recv_key[] = " host_port" ;
139
+ char ipbuf[60 ] = {0 };
140
+ char portbuf[16 ] = {0 };
141
+ unsigned int port = 0 ;
142
+
143
+ greentea_send_kv (" target_ip" , net->get_ip_address ());
144
+ greentea_send_kv (" host_ip" , " " );
145
+ greentea_parse_kv (recv_key, ipbuf, sizeof (recv_key), sizeof (ipbuf));
146
+
147
+ greentea_send_kv (" host_port" , " " );
148
+ greentea_parse_kv (recv_key, portbuf, sizeof (recv_key), sizeof (ipbuf));
149
+ sscanf (portbuf, " %u" , &port);
150
+
151
+ tcp_addr.set_ip_address (ipbuf);
152
+ tcp_addr.set_port (port);
153
+ #endif /* MBED_CONF_APP_ECHO_SERVER_ADDR && MBED_CONF_APP_ECHO_SERVER_PORT */
127
154
128
155
// Startup echo threads in parallel
129
- for (int i = 0 ; i < MBED_CFG_TCP_CLIENT_ECHO_THREADS ; i++) {
156
+ for (int i = 0 ; i < MBED_CONF_APP_TCP_CLIENT_ECHO_THREADS ; i++) {
130
157
echoers[i] = new Echo;
131
158
echoers[i]->start ();
132
159
}
133
160
134
- for (int i = 0 ; i < MBED_CFG_TCP_CLIENT_ECHO_THREADS ; i++) {
161
+ for (int i = 0 ; i < MBED_CONF_APP_TCP_CLIENT_ECHO_THREADS ; i++) {
135
162
echoers[i]->join ();
136
163
delete echoers[i];
137
164
}
@@ -140,7 +167,8 @@ void test_tcp_echo_parallel() {
140
167
}
141
168
142
169
// Test setup
143
- utest::v1::status_t test_setup (const size_t number_of_cases) {
170
+ utest::v1::status_t test_setup (const size_t number_of_cases)
171
+ {
144
172
GREENTEA_SETUP (120 , " tcp_echo" );
145
173
return verbose_test_setup_handler (number_of_cases);
146
174
}
@@ -151,6 +179,7 @@ Case cases[] = {
151
179
152
180
Specification specification (test_setup, cases);
153
181
154
- int main () {
182
+ int main ()
183
+ {
155
184
return !Harness::run (specification);
156
185
}
0 commit comments