Committer:
borlanic
Date:
Tue Apr 24 11:45:18 2018 +0000
Revision:
0:02dd72d1d465
BaBoRo_test2 - backup 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
borlanic 0:02dd72d1d465 1 /*
borlanic 0:02dd72d1d465 2 * Copyright (c) 2013-2017, ARM Limited, All Rights Reserved
borlanic 0:02dd72d1d465 3 * SPDX-License-Identifier: Apache-2.0
borlanic 0:02dd72d1d465 4 *
borlanic 0:02dd72d1d465 5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
borlanic 0:02dd72d1d465 6 * not use this file except in compliance with the License.
borlanic 0:02dd72d1d465 7 * You may obtain a copy of the License at
borlanic 0:02dd72d1d465 8 *
borlanic 0:02dd72d1d465 9 * http://www.apache.org/licenses/LICENSE-2.0
borlanic 0:02dd72d1d465 10 *
borlanic 0:02dd72d1d465 11 * Unless required by applicable law or agreed to in writing, software
borlanic 0:02dd72d1d465 12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
borlanic 0:02dd72d1d465 13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
borlanic 0:02dd72d1d465 14 * See the License for the specific language governing permissions and
borlanic 0:02dd72d1d465 15 * limitations under the License.
borlanic 0:02dd72d1d465 16 */
borlanic 0:02dd72d1d465 17
borlanic 0:02dd72d1d465 18 #ifndef MBED_CONF_APP_CONNECT_STATEMENT
borlanic 0:02dd72d1d465 19 #error [NOT_SUPPORTED] No network configuration found for this target.
borlanic 0:02dd72d1d465 20 #endif
borlanic 0:02dd72d1d465 21
borlanic 0:02dd72d1d465 22 #include "mbed.h"
borlanic 0:02dd72d1d465 23 #include MBED_CONF_APP_HEADER_FILE
borlanic 0:02dd72d1d465 24 #include "TCPSocket.h"
borlanic 0:02dd72d1d465 25 #include "greentea-client/test_env.h"
borlanic 0:02dd72d1d465 26 #include "unity/unity.h"
borlanic 0:02dd72d1d465 27 #include "utest.h"
borlanic 0:02dd72d1d465 28
borlanic 0:02dd72d1d465 29 using namespace utest::v1;
borlanic 0:02dd72d1d465 30
borlanic 0:02dd72d1d465 31 #ifndef MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE
borlanic 0:02dd72d1d465 32 #define MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE 256
borlanic 0:02dd72d1d465 33 #endif
borlanic 0:02dd72d1d465 34
borlanic 0:02dd72d1d465 35 namespace
borlanic 0:02dd72d1d465 36 {
borlanic 0:02dd72d1d465 37 char tx_buffer[MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0};
borlanic 0:02dd72d1d465 38 char rx_buffer[MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0};
borlanic 0:02dd72d1d465 39 }
borlanic 0:02dd72d1d465 40
borlanic 0:02dd72d1d465 41 void prep_buffer(char *tx_buffer, size_t tx_size)
borlanic 0:02dd72d1d465 42 {
borlanic 0:02dd72d1d465 43 for (size_t i = 0; i < tx_size; ++i) {
borlanic 0:02dd72d1d465 44 tx_buffer[i] = (rand() % 10) + '0';
borlanic 0:02dd72d1d465 45 }
borlanic 0:02dd72d1d465 46 }
borlanic 0:02dd72d1d465 47
borlanic 0:02dd72d1d465 48 void test_tcp_echo()
borlanic 0:02dd72d1d465 49 {
borlanic 0:02dd72d1d465 50 int n = 0;
borlanic 0:02dd72d1d465 51 NetworkInterface* net = MBED_CONF_APP_OBJECT_CONSTRUCTION;
borlanic 0:02dd72d1d465 52 int err = MBED_CONF_APP_CONNECT_STATEMENT;
borlanic 0:02dd72d1d465 53
borlanic 0:02dd72d1d465 54 if (err) {
borlanic 0:02dd72d1d465 55 printf("MBED: failed to connect with an error of %d\r\n", err);
borlanic 0:02dd72d1d465 56 TEST_ASSERT_EQUAL(0, err);
borlanic 0:02dd72d1d465 57 }
borlanic 0:02dd72d1d465 58
borlanic 0:02dd72d1d465 59 printf("MBED: TCPClient IP address is '%s'\n", net->get_ip_address());
borlanic 0:02dd72d1d465 60
borlanic 0:02dd72d1d465 61 bool result = false;
borlanic 0:02dd72d1d465 62
borlanic 0:02dd72d1d465 63 TCPSocket sock(net);
borlanic 0:02dd72d1d465 64
borlanic 0:02dd72d1d465 65 #if defined(MBED_CONF_APP_ECHO_SERVER_ADDR) && defined(MBED_CONF_APP_ECHO_SERVER_PORT)
borlanic 0:02dd72d1d465 66 printf("TCP: Connect to %s:%d\r\n", MBED_CONF_APP_ECHO_SERVER_ADDR, MBED_CONF_APP_ECHO_SERVER_PORT);
borlanic 0:02dd72d1d465 67 SocketAddress tcp_addr(MBED_CONF_APP_ECHO_SERVER_ADDR, MBED_CONF_APP_ECHO_SERVER_PORT);
borlanic 0:02dd72d1d465 68 #else /* MBED_CONF_APP_ECHO_SERVER_ADDR && MBED_CONF_APP_ECHO_SERVER_PORT */
borlanic 0:02dd72d1d465 69 char recv_key[] = "host_port";
borlanic 0:02dd72d1d465 70 char ipbuf[60] = {0};
borlanic 0:02dd72d1d465 71 char portbuf[16] = {0};
borlanic 0:02dd72d1d465 72 unsigned int port = 0;
borlanic 0:02dd72d1d465 73
borlanic 0:02dd72d1d465 74 greentea_send_kv("target_ip", net->get_ip_address());
borlanic 0:02dd72d1d465 75 greentea_send_kv("host_ip", " ");
borlanic 0:02dd72d1d465 76 greentea_parse_kv(recv_key, ipbuf, sizeof(recv_key), sizeof(ipbuf));
borlanic 0:02dd72d1d465 77
borlanic 0:02dd72d1d465 78 greentea_send_kv("host_port", " ");
borlanic 0:02dd72d1d465 79 greentea_parse_kv(recv_key, portbuf, sizeof(recv_key), sizeof(ipbuf));
borlanic 0:02dd72d1d465 80 sscanf(portbuf, "%u", &port);
borlanic 0:02dd72d1d465 81
borlanic 0:02dd72d1d465 82 printf("TCP: Connect to %s:%d\r\n", ipbuf, port);
borlanic 0:02dd72d1d465 83 SocketAddress tcp_addr(ipbuf, port);
borlanic 0:02dd72d1d465 84 #endif /* MBED_CONF_APP_ECHO_SERVER_ADDR && MBED_CONF_APP_ECHO_SERVER_PORT */
borlanic 0:02dd72d1d465 85
borlanic 0:02dd72d1d465 86 if (sock.connect(tcp_addr) == 0) {
borlanic 0:02dd72d1d465 87 printf("tx_buffer buffer size: %u\r\n", sizeof(tx_buffer));
borlanic 0:02dd72d1d465 88 printf("rx_buffer buffer size: %u\r\n", sizeof(rx_buffer));
borlanic 0:02dd72d1d465 89
borlanic 0:02dd72d1d465 90 prep_buffer(tx_buffer, sizeof(tx_buffer));
borlanic 0:02dd72d1d465 91 #if defined(MBED_CONF_APP_TCP_ECHO_PREFIX)
borlanic 0:02dd72d1d465 92 n = sock.recv(rx_buffer, sizeof(MBED_CONF_APP_TCP_ECHO_PREFIX));
borlanic 0:02dd72d1d465 93 if (n >= 0) {
borlanic 0:02dd72d1d465 94 printf("recv-ed prefix: %d bytes - %.*s \n", n, n, rx_buffer);
borlanic 0:02dd72d1d465 95 } else {
borlanic 0:02dd72d1d465 96 printf("Network error in receiving prefix: %d\n", n);
borlanic 0:02dd72d1d465 97 }
borlanic 0:02dd72d1d465 98 #endif /* MBED_CONF_APP_TCP_ECHO_PREFIX */
borlanic 0:02dd72d1d465 99 const int ret = sock.send(tx_buffer, sizeof(tx_buffer));
borlanic 0:02dd72d1d465 100 if (ret >= 0) {
borlanic 0:02dd72d1d465 101 printf("sent %d bytes - %.*s \n", ret, ret, tx_buffer);
borlanic 0:02dd72d1d465 102 } else {
borlanic 0:02dd72d1d465 103 printf("Network error %d\n", ret);
borlanic 0:02dd72d1d465 104 }
borlanic 0:02dd72d1d465 105
borlanic 0:02dd72d1d465 106 n = sock.recv(rx_buffer, sizeof(rx_buffer));
borlanic 0:02dd72d1d465 107 if (n >= 0) {
borlanic 0:02dd72d1d465 108 printf("recv %d bytes - %.*s \n", n, n, rx_buffer);
borlanic 0:02dd72d1d465 109 } else {
borlanic 0:02dd72d1d465 110 printf("Network error %d\n", n);
borlanic 0:02dd72d1d465 111 }
borlanic 0:02dd72d1d465 112
borlanic 0:02dd72d1d465 113 result = !memcmp(tx_buffer, rx_buffer, sizeof(tx_buffer));
borlanic 0:02dd72d1d465 114 TEST_ASSERT_EQUAL(ret, sizeof(rx_buffer));
borlanic 0:02dd72d1d465 115 TEST_ASSERT_EQUAL(true, result);
borlanic 0:02dd72d1d465 116 }
borlanic 0:02dd72d1d465 117
borlanic 0:02dd72d1d465 118 sock.close();
borlanic 0:02dd72d1d465 119 net->disconnect();
borlanic 0:02dd72d1d465 120 TEST_ASSERT_EQUAL(true, result);
borlanic 0:02dd72d1d465 121 }
borlanic 0:02dd72d1d465 122
borlanic 0:02dd72d1d465 123
borlanic 0:02dd72d1d465 124 // Test setup
borlanic 0:02dd72d1d465 125 utest::v1::status_t test_setup(const size_t number_of_cases)
borlanic 0:02dd72d1d465 126 {
borlanic 0:02dd72d1d465 127 GREENTEA_SETUP(240, "tcp_echo");
borlanic 0:02dd72d1d465 128 return verbose_test_setup_handler(number_of_cases);
borlanic 0:02dd72d1d465 129 }
borlanic 0:02dd72d1d465 130
borlanic 0:02dd72d1d465 131 Case cases[] = {
borlanic 0:02dd72d1d465 132 Case("TCP echo", test_tcp_echo),
borlanic 0:02dd72d1d465 133 };
borlanic 0:02dd72d1d465 134
borlanic 0:02dd72d1d465 135 Specification specification(test_setup, cases);
borlanic 0:02dd72d1d465 136
borlanic 0:02dd72d1d465 137 int main()
borlanic 0:02dd72d1d465 138 {
borlanic 0:02dd72d1d465 139 return !Harness::run(specification);
borlanic 0:02dd72d1d465 140 }