FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:35:07 2017 +0000
Revision:
0:a2cb7295a1f7
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:a2cb7295a1f7 1 /*
ram54288 0:a2cb7295a1f7 2 * Copyright (c) 2016 ARM Limited. All rights reserved.
ram54288 0:a2cb7295a1f7 3 * SPDX-License-Identifier: Apache-2.0
ram54288 0:a2cb7295a1f7 4 * Licensed under the Apache License, Version 2.0 (the License); you may
ram54288 0:a2cb7295a1f7 5 * not use this file except in compliance with the License.
ram54288 0:a2cb7295a1f7 6 * You may obtain a copy of the License at
ram54288 0:a2cb7295a1f7 7 *
ram54288 0:a2cb7295a1f7 8 * http://www.apache.org/licenses/LICENSE-2.0
ram54288 0:a2cb7295a1f7 9 *
ram54288 0:a2cb7295a1f7 10 * Unless required by applicable law or agreed to in writing, software
ram54288 0:a2cb7295a1f7 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
ram54288 0:a2cb7295a1f7 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ram54288 0:a2cb7295a1f7 13 * See the License for the specific language governing permissions and
ram54288 0:a2cb7295a1f7 14 * limitations under the License.
ram54288 0:a2cb7295a1f7 15 */
ram54288 0:a2cb7295a1f7 16
ram54288 0:a2cb7295a1f7 17 #include "pal.h"
ram54288 0:a2cb7295a1f7 18 #include "pal_network.h"
ram54288 0:a2cb7295a1f7 19 #include "pal_plat_network.h"
ram54288 0:a2cb7295a1f7 20 #include "unity.h"
ram54288 0:a2cb7295a1f7 21 #include "unity_fixture.h"
ram54288 0:a2cb7295a1f7 22 #include "pal_test_utils.h"
ram54288 0:a2cb7295a1f7 23 #include "pal_socket_test_utils.h"
ram54288 0:a2cb7295a1f7 24 #include "string.h"
ram54288 0:a2cb7295a1f7 25
ram54288 0:a2cb7295a1f7 26
ram54288 0:a2cb7295a1f7 27
ram54288 0:a2cb7295a1f7 28 TEST_GROUP(pal_socket);
ram54288 0:a2cb7295a1f7 29
ram54288 0:a2cb7295a1f7 30 //sometimes you may want to get at local data in a module.
ram54288 0:a2cb7295a1f7 31 //for example: If you plan to pass by reference, this could be useful
ram54288 0:a2cb7295a1f7 32 //however, it should often be avoided
ram54288 0:a2cb7295a1f7 33 //extern int Counter;
ram54288 0:a2cb7295a1f7 34
ram54288 0:a2cb7295a1f7 35 #define PAL_NET_SUPPORT_LWIP 1
ram54288 0:a2cb7295a1f7 36 #define PAL_NET_TEST_SERVER_NAME "e109180-lin.kfn.arm.com"
ram54288 0:a2cb7295a1f7 37 #define PAL_NET_TEST_SERVER_IP {10,45,48,190}
ram54288 0:a2cb7295a1f7 38 #define PAL_NET_TEST_SERVER_IP_STRING "10.45.48.190"
ram54288 0:a2cb7295a1f7 39 #define PAL_NET_TEST_SERVER_HTTP_PORT 8686
ram54288 0:a2cb7295a1f7 40 #define PAL_NET_TEST_SERVER_UDP_PORT 8383
ram54288 0:a2cb7295a1f7 41 #define PAL_NET_TEST_INCOMING_PORT 8000
ram54288 0:a2cb7295a1f7 42
ram54288 0:a2cb7295a1f7 43 void * g_networkInterface = NULL;
ram54288 0:a2cb7295a1f7 44
ram54288 0:a2cb7295a1f7 45
ram54288 0:a2cb7295a1f7 46 static uint32_t s_callbackcounter = 0;
ram54288 0:a2cb7295a1f7 47
ram54288 0:a2cb7295a1f7 48 void socketCallback()
ram54288 0:a2cb7295a1f7 49 {
ram54288 0:a2cb7295a1f7 50 s_callbackcounter++;
ram54288 0:a2cb7295a1f7 51 }
ram54288 0:a2cb7295a1f7 52
ram54288 0:a2cb7295a1f7 53 TEST_SETUP(pal_socket)
ram54288 0:a2cb7295a1f7 54 {
ram54288 0:a2cb7295a1f7 55 uint32_t index = 0;
ram54288 0:a2cb7295a1f7 56 palStatus_t status = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 57 static void * interfaceCTX = NULL;
ram54288 0:a2cb7295a1f7 58 //This is run before EACH TEST
ram54288 0:a2cb7295a1f7 59 if (!interfaceCTX)
ram54288 0:a2cb7295a1f7 60 {
ram54288 0:a2cb7295a1f7 61 status = pal_init();
ram54288 0:a2cb7295a1f7 62 if (PAL_SUCCESS == status)
ram54288 0:a2cb7295a1f7 63 {
ram54288 0:a2cb7295a1f7 64 interfaceCTX = palTestGetNetWorkInterfaceContext();
ram54288 0:a2cb7295a1f7 65 pal_registerNetworkInterface(interfaceCTX , &index);
ram54288 0:a2cb7295a1f7 66 g_networkInterface = interfaceCTX;
ram54288 0:a2cb7295a1f7 67 }
ram54288 0:a2cb7295a1f7 68 }
ram54288 0:a2cb7295a1f7 69 }
ram54288 0:a2cb7295a1f7 70
ram54288 0:a2cb7295a1f7 71 TEST_TEAR_DOWN(pal_socket)
ram54288 0:a2cb7295a1f7 72 {
ram54288 0:a2cb7295a1f7 73 }
ram54288 0:a2cb7295a1f7 74
ram54288 0:a2cb7295a1f7 75 #define PAL_TEST_BUFFER_SIZE 50
ram54288 0:a2cb7295a1f7 76
ram54288 0:a2cb7295a1f7 77 TEST(pal_socket, socketUDPCreationOptionsTest)
ram54288 0:a2cb7295a1f7 78 {
ram54288 0:a2cb7295a1f7 79 palStatus_t result = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 80 palSocket_t sock = 0;
ram54288 0:a2cb7295a1f7 81 palSocket_t sock2 = 0;
ram54288 0:a2cb7295a1f7 82 palSocket_t sock3 = 0;
ram54288 0:a2cb7295a1f7 83 palSocket_t sock5 = 0;
ram54288 0:a2cb7295a1f7 84 uint32_t numInterface = 0;
ram54288 0:a2cb7295a1f7 85 palNetInterfaceInfo_t interfaceInfo;
ram54288 0:a2cb7295a1f7 86 uint32_t interfaceIndex = 0;
ram54288 0:a2cb7295a1f7 87 uint32_t sockOptVal = 5000;
ram54288 0:a2cb7295a1f7 88 uint32_t sockOptLen = sizeof(sockOptVal);
ram54288 0:a2cb7295a1f7 89
ram54288 0:a2cb7295a1f7 90 TEST_PRINTF("start socket test\r\n");
ram54288 0:a2cb7295a1f7 91
ram54288 0:a2cb7295a1f7 92 memset(&interfaceInfo,0,sizeof(interfaceInfo));
ram54288 0:a2cb7295a1f7 93 // check that re-addignt he network interface returns the same index
ram54288 0:a2cb7295a1f7 94 pal_registerNetworkInterface(g_networkInterface, &interfaceIndex);
ram54288 0:a2cb7295a1f7 95 TEST_ASSERT_EQUAL(interfaceIndex, 0);
ram54288 0:a2cb7295a1f7 96 pal_registerNetworkInterface(g_networkInterface, &interfaceIndex);
ram54288 0:a2cb7295a1f7 97 TEST_ASSERT_EQUAL(interfaceIndex, 0);
ram54288 0:a2cb7295a1f7 98
ram54288 0:a2cb7295a1f7 99 TEST_PRINTF("create sockets\r\n");
ram54288 0:a2cb7295a1f7 100
ram54288 0:a2cb7295a1f7 101
ram54288 0:a2cb7295a1f7 102 //blocking
ram54288 0:a2cb7295a1f7 103 result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, interfaceIndex, &sock);
ram54288 0:a2cb7295a1f7 104 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 105 result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, interfaceIndex, &sock2);
ram54288 0:a2cb7295a1f7 106 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 107 //non-blocking
ram54288 0:a2cb7295a1f7 108 result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, true, interfaceIndex, &sock5);
ram54288 0:a2cb7295a1f7 109 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 110
ram54288 0:a2cb7295a1f7 111 result = pal_asynchronousSocket(PAL_AF_INET, PAL_SOCK_STREAM, false, interfaceIndex, socketCallback, &sock3);
ram54288 0:a2cb7295a1f7 112 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 113
ram54288 0:a2cb7295a1f7 114
ram54288 0:a2cb7295a1f7 115 result = pal_getNumberOfNetInterfaces(&numInterface);
ram54288 0:a2cb7295a1f7 116 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 117 TEST_ASSERT_EQUAL(numInterface, 1);
ram54288 0:a2cb7295a1f7 118
ram54288 0:a2cb7295a1f7 119 result = pal_getNetInterfaceInfo(0, &interfaceInfo);
ram54288 0:a2cb7295a1f7 120 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 121 TEST_PRINTF("interface addr: %d %d %d %d \r\n", interfaceInfo.address.addressData[2], interfaceInfo.address.addressData[3], interfaceInfo.address.addressData[4], interfaceInfo.address.addressData[5]);
ram54288 0:a2cb7295a1f7 122
ram54288 0:a2cb7295a1f7 123
ram54288 0:a2cb7295a1f7 124 result = pal_setSocketOptions(sock, PAL_SO_RCVTIMEO, &sockOptVal, sockOptLen);
ram54288 0:a2cb7295a1f7 125 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 126
ram54288 0:a2cb7295a1f7 127 TEST_PRINTF("close sockets\r\n");
ram54288 0:a2cb7295a1f7 128
ram54288 0:a2cb7295a1f7 129 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 130 result = pal_close(&sock);
ram54288 0:a2cb7295a1f7 131 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 132 result = pal_close(&sock2);
ram54288 0:a2cb7295a1f7 133 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 134 result = pal_close(&sock5);
ram54288 0:a2cb7295a1f7 135 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 136 result = pal_close(&sock3);
ram54288 0:a2cb7295a1f7 137 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 138
ram54288 0:a2cb7295a1f7 139 TEST_PRINTF("end\r\n");
ram54288 0:a2cb7295a1f7 140
ram54288 0:a2cb7295a1f7 141 }
ram54288 0:a2cb7295a1f7 142
ram54288 0:a2cb7295a1f7 143
ram54288 0:a2cb7295a1f7 144 TEST(pal_socket, basicTCPclinetSendRecieve)
ram54288 0:a2cb7295a1f7 145 {
ram54288 0:a2cb7295a1f7 146
ram54288 0:a2cb7295a1f7 147
ram54288 0:a2cb7295a1f7 148 palStatus_t result = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 149 palSocket_t sock = 0;
ram54288 0:a2cb7295a1f7 150 palSocketAddress_t address = { 0 };
ram54288 0:a2cb7295a1f7 151 const char* message = "GET / HTTP/1.0\r\n\r\n";
ram54288 0:a2cb7295a1f7 152 size_t sent = 0;
ram54288 0:a2cb7295a1f7 153 char buffer[100] = { 0 };
ram54288 0:a2cb7295a1f7 154 size_t read = 0;
ram54288 0:a2cb7295a1f7 155 palSocketLength_t addrlen = 0;
ram54288 0:a2cb7295a1f7 156
ram54288 0:a2cb7295a1f7 157 result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock);
ram54288 0:a2cb7295a1f7 158 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 159
ram54288 0:a2cb7295a1f7 160 result = pal_getAddressInfo(PAL_NET_TEST_SERVER_NAME, &address, &addrlen);
ram54288 0:a2cb7295a1f7 161 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 162
ram54288 0:a2cb7295a1f7 163 result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_HTTP_PORT);
ram54288 0:a2cb7295a1f7 164 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 165
ram54288 0:a2cb7295a1f7 166 result = pal_connect(sock, &address, 16);
ram54288 0:a2cb7295a1f7 167 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 168
ram54288 0:a2cb7295a1f7 169 result = pal_send(sock, message, 45, &sent);
ram54288 0:a2cb7295a1f7 170 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 171
ram54288 0:a2cb7295a1f7 172 result = pal_recv(sock, buffer, 99, &read);
ram54288 0:a2cb7295a1f7 173 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 174 TEST_PRINTF(buffer);
ram54288 0:a2cb7295a1f7 175
ram54288 0:a2cb7295a1f7 176 TEST_ASSERT(read >= 4);
ram54288 0:a2cb7295a1f7 177 TEST_ASSERT(buffer[0] == 'H' && buffer[1] == 'T'&& buffer[2] == 'T' && buffer[3] == 'P');
ram54288 0:a2cb7295a1f7 178 pal_close(&sock);
ram54288 0:a2cb7295a1f7 179
ram54288 0:a2cb7295a1f7 180 TEST_PRINTF("test Done");
ram54288 0:a2cb7295a1f7 181
ram54288 0:a2cb7295a1f7 182 }
ram54288 0:a2cb7295a1f7 183
ram54288 0:a2cb7295a1f7 184 TEST(pal_socket, basicUDPclinetSendRecieve)
ram54288 0:a2cb7295a1f7 185 {
ram54288 0:a2cb7295a1f7 186
ram54288 0:a2cb7295a1f7 187 palStatus_t result = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 188 palSocket_t sock = 0;
ram54288 0:a2cb7295a1f7 189 palSocketAddress_t address = { 0 };
ram54288 0:a2cb7295a1f7 190 palSocketAddress_t address2 = { 0 };
ram54288 0:a2cb7295a1f7 191 uint8_t buffer[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
ram54288 0:a2cb7295a1f7 192 size_t sent = 0;
ram54288 0:a2cb7295a1f7 193 size_t read = 0;
ram54288 0:a2cb7295a1f7 194 palSocketLength_t addrlen = 0;
ram54288 0:a2cb7295a1f7 195
ram54288 0:a2cb7295a1f7 196 result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, 0, &sock);
ram54288 0:a2cb7295a1f7 197 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 198
ram54288 0:a2cb7295a1f7 199 result = pal_getAddressInfo(PAL_NET_TEST_SERVER_NAME, &address, &addrlen);
ram54288 0:a2cb7295a1f7 200 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 201 result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_UDP_PORT);
ram54288 0:a2cb7295a1f7 202 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 203
ram54288 0:a2cb7295a1f7 204 TEST_PRINTF("udp send \r\n");
ram54288 0:a2cb7295a1f7 205 result = pal_sendTo(sock, buffer, 10, &address, 16, &sent);
ram54288 0:a2cb7295a1f7 206 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 207 TEST_ASSERT_EQUAL(sent, 10);
ram54288 0:a2cb7295a1f7 208 result = pal_plat_receiveFrom(sock, buffer, 10, &address2, &addrlen, &read);
ram54288 0:a2cb7295a1f7 209 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 210 TEST_ASSERT_EQUAL(read, 10);
ram54288 0:a2cb7295a1f7 211 TEST_PRINTF("udp done \r\n");
ram54288 0:a2cb7295a1f7 212 pal_close(&sock);
ram54288 0:a2cb7295a1f7 213 }
ram54288 0:a2cb7295a1f7 214
ram54288 0:a2cb7295a1f7 215
ram54288 0:a2cb7295a1f7 216 TEST(pal_socket, basicSocketScenario3)
ram54288 0:a2cb7295a1f7 217 {
ram54288 0:a2cb7295a1f7 218 palStatus_t result = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 219 palSocket_t sock = 0;
ram54288 0:a2cb7295a1f7 220 palSocketAddress_t address = { 0 };
ram54288 0:a2cb7295a1f7 221 const char* message = "GET / HTTP/1.0\r\nHost:10.45.48.68:8000\r\n\r\n";
ram54288 0:a2cb7295a1f7 222 size_t sent = 0;
ram54288 0:a2cb7295a1f7 223 char buffer[100] = { 0 };
ram54288 0:a2cb7295a1f7 224 size_t read = 0;
ram54288 0:a2cb7295a1f7 225 s_callbackcounter = 0;
ram54288 0:a2cb7295a1f7 226 palSocketLength_t addrlen = 0;
ram54288 0:a2cb7295a1f7 227
ram54288 0:a2cb7295a1f7 228 result = pal_asynchronousSocket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, socketCallback, &sock);
ram54288 0:a2cb7295a1f7 229 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 230
ram54288 0:a2cb7295a1f7 231 result = pal_getAddressInfo(PAL_NET_TEST_SERVER_NAME, &address, &addrlen);
ram54288 0:a2cb7295a1f7 232 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 233
ram54288 0:a2cb7295a1f7 234 result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_HTTP_PORT);
ram54288 0:a2cb7295a1f7 235 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 236
ram54288 0:a2cb7295a1f7 237 result = pal_connect(sock, &address, 16);
ram54288 0:a2cb7295a1f7 238 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 239
ram54288 0:a2cb7295a1f7 240 result = pal_send(sock, message, 45, &sent);
ram54288 0:a2cb7295a1f7 241 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 242
ram54288 0:a2cb7295a1f7 243 result = pal_recv(sock, buffer, 99, &read);
ram54288 0:a2cb7295a1f7 244 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 245 TEST_PRINTF(buffer);
ram54288 0:a2cb7295a1f7 246
ram54288 0:a2cb7295a1f7 247 TEST_ASSERT(read >= 4);
ram54288 0:a2cb7295a1f7 248 TEST_ASSERT(buffer[0] == 'H' && buffer[1] == 'T'&& buffer[2] == 'T' && buffer[3] == 'P');
ram54288 0:a2cb7295a1f7 249 TEST_ASSERT(s_callbackcounter > 0);
ram54288 0:a2cb7295a1f7 250 TEST_PRINTF("callback counter %d \r\n", s_callbackcounter);
ram54288 0:a2cb7295a1f7 251 pal_close(&sock);
ram54288 0:a2cb7295a1f7 252
ram54288 0:a2cb7295a1f7 253 TEST_PRINTF("test Done");
ram54288 0:a2cb7295a1f7 254 }
ram54288 0:a2cb7295a1f7 255
ram54288 0:a2cb7295a1f7 256 TEST(pal_socket, basicSocketScenario4)
ram54288 0:a2cb7295a1f7 257 {
ram54288 0:a2cb7295a1f7 258 palStatus_t result = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 259 palSocket_t sock = 0;
ram54288 0:a2cb7295a1f7 260 palSocket_t sock2 = 0;
ram54288 0:a2cb7295a1f7 261 palSocketAddress_t address = { 0 };
ram54288 0:a2cb7295a1f7 262 const char* message = "GET / HTTP/1.0\r\n\r\n";
ram54288 0:a2cb7295a1f7 263 size_t sent = 0;
ram54288 0:a2cb7295a1f7 264 char buffer[100] = { 0 };
ram54288 0:a2cb7295a1f7 265 size_t read = 0;
ram54288 0:a2cb7295a1f7 266 palSocketLength_t addlen = 0;
ram54288 0:a2cb7295a1f7 267 uint32_t numSockets = 0;
ram54288 0:a2cb7295a1f7 268 palSocket_t socketsToCheck[PAL_NET_SOCKET_SELECT_MAX_SOCKETS] = { 0 };
ram54288 0:a2cb7295a1f7 269 pal_timeVal_t tv = {0};
ram54288 0:a2cb7295a1f7 270 uint8_t palSocketStatus[PAL_NET_SOCKET_SELECT_MAX_SOCKETS] = { 0 };
ram54288 0:a2cb7295a1f7 271
ram54288 0:a2cb7295a1f7 272 result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock);
ram54288 0:a2cb7295a1f7 273 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 274
ram54288 0:a2cb7295a1f7 275 result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock2);
ram54288 0:a2cb7295a1f7 276 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 277
ram54288 0:a2cb7295a1f7 278 result = pal_getAddressInfo("www.w3.org", &address, &addlen);
ram54288 0:a2cb7295a1f7 279 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 280 TEST_PRINTF("addr lookup: %d %d %d %d \r\n", address.addressData[2], address.addressData[3], address.addressData[4], address.addressData[5]);
ram54288 0:a2cb7295a1f7 281
ram54288 0:a2cb7295a1f7 282 result = pal_setSockAddrPort(&address, 80);
ram54288 0:a2cb7295a1f7 283 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 284
ram54288 0:a2cb7295a1f7 285 result = pal_connect(sock, &address, 16);
ram54288 0:a2cb7295a1f7 286 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 287
ram54288 0:a2cb7295a1f7 288 result = pal_send(sock, message, 45, &sent);
ram54288 0:a2cb7295a1f7 289 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 290
ram54288 0:a2cb7295a1f7 291 socketsToCheck[0] = sock;
ram54288 0:a2cb7295a1f7 292 socketsToCheck[1] = sock2;
ram54288 0:a2cb7295a1f7 293 tv.pal_tv_sec = 5;
ram54288 0:a2cb7295a1f7 294 tv.pal_tv_usec = 1000;
ram54288 0:a2cb7295a1f7 295
ram54288 0:a2cb7295a1f7 296 result = pal_plat_socketMiniSelect(socketsToCheck, 2, &tv, palSocketStatus, &numSockets);
ram54288 0:a2cb7295a1f7 297 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 298 //TEST_ASSERT_EQUAL(numSockets, 1);
ram54288 0:a2cb7295a1f7 299 //TEST_ASSERT(palSocketStatus[0] >= 0);
ram54288 0:a2cb7295a1f7 300
ram54288 0:a2cb7295a1f7 301 result = pal_recv(sock, buffer, 99, &read);
ram54288 0:a2cb7295a1f7 302 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 303 TEST_PRINTF(buffer);
ram54288 0:a2cb7295a1f7 304
ram54288 0:a2cb7295a1f7 305 TEST_ASSERT(read >= 4);
ram54288 0:a2cb7295a1f7 306 TEST_ASSERT(buffer[0] == 'H' && buffer[1] == 'T'&& buffer[2] == 'T' && buffer[3] == 'P');
ram54288 0:a2cb7295a1f7 307
ram54288 0:a2cb7295a1f7 308 socketsToCheck[0] = sock2;
ram54288 0:a2cb7295a1f7 309 socketsToCheck[1] = 0;
ram54288 0:a2cb7295a1f7 310 tv.pal_tv_sec = 0;
ram54288 0:a2cb7295a1f7 311 tv.pal_tv_usec = 20000;
ram54288 0:a2cb7295a1f7 312 result = pal_plat_socketMiniSelect(socketsToCheck, 1, &tv, palSocketStatus, &numSockets);
ram54288 0:a2cb7295a1f7 313 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 314 TEST_ASSERT_EQUAL(numSockets, 0);
ram54288 0:a2cb7295a1f7 315 TEST_ASSERT(palSocketStatus[0] == 0);
ram54288 0:a2cb7295a1f7 316
ram54288 0:a2cb7295a1f7 317 pal_close(&sock);
ram54288 0:a2cb7295a1f7 318 pal_close(&sock2);
ram54288 0:a2cb7295a1f7 319
ram54288 0:a2cb7295a1f7 320 TEST_PRINTF("test Done");
ram54288 0:a2cb7295a1f7 321
ram54288 0:a2cb7295a1f7 322 }
ram54288 0:a2cb7295a1f7 323
ram54288 0:a2cb7295a1f7 324 TEST(pal_socket, basicSocketScenario5)
ram54288 0:a2cb7295a1f7 325 {
ram54288 0:a2cb7295a1f7 326 palStatus_t result = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 327 palSocket_t sock = 0;
ram54288 0:a2cb7295a1f7 328 palSocket_t sock2 = 0;
ram54288 0:a2cb7295a1f7 329 palSocket_t sock3 = 0;
ram54288 0:a2cb7295a1f7 330
ram54288 0:a2cb7295a1f7 331 palSocketAddress_t address2 = { 0 };
ram54288 0:a2cb7295a1f7 332
ram54288 0:a2cb7295a1f7 333 char buffer[100] = { 0 };
ram54288 0:a2cb7295a1f7 334 const char* messageOut = "HTTP/1.0 200 OK";
ram54288 0:a2cb7295a1f7 335 size_t sent = 0;
ram54288 0:a2cb7295a1f7 336 size_t read = 0;
ram54288 0:a2cb7295a1f7 337 palSocketLength_t addrlen = 16;
ram54288 0:a2cb7295a1f7 338 palNetInterfaceInfo_t interfaceInfo;
ram54288 0:a2cb7295a1f7 339
ram54288 0:a2cb7295a1f7 340 memset(&interfaceInfo,0,sizeof(interfaceInfo));
ram54288 0:a2cb7295a1f7 341
ram54288 0:a2cb7295a1f7 342
ram54288 0:a2cb7295a1f7 343 result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM_SERVER, false, 0, &sock);
ram54288 0:a2cb7295a1f7 344 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 345
ram54288 0:a2cb7295a1f7 346 result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock2);
ram54288 0:a2cb7295a1f7 347 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 348
ram54288 0:a2cb7295a1f7 349 result = pal_getNetInterfaceInfo(0, &interfaceInfo);
ram54288 0:a2cb7295a1f7 350 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 351
ram54288 0:a2cb7295a1f7 352 result = pal_setSockAddrPort(&(interfaceInfo.address), PAL_NET_TEST_INCOMING_PORT);
ram54288 0:a2cb7295a1f7 353 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 354
ram54288 0:a2cb7295a1f7 355 result = pal_bind(sock, &(interfaceInfo.address), interfaceInfo.addressSize);
ram54288 0:a2cb7295a1f7 356 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 357
ram54288 0:a2cb7295a1f7 358 result = pal_listen(sock, 10);
ram54288 0:a2cb7295a1f7 359 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 360
ram54288 0:a2cb7295a1f7 361 TEST_PRINTF("waiting for connection:\r\n");
ram54288 0:a2cb7295a1f7 362 result = pal_accept(sock, &address2, &addrlen, &sock2);
ram54288 0:a2cb7295a1f7 363 TEST_PRINTF("after accept:\r\n");
ram54288 0:a2cb7295a1f7 364 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 365
ram54288 0:a2cb7295a1f7 366
ram54288 0:a2cb7295a1f7 367 result = pal_recv(sock2, buffer, 99, &read);
ram54288 0:a2cb7295a1f7 368 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 369 TEST_PRINTF(buffer);
ram54288 0:a2cb7295a1f7 370
ram54288 0:a2cb7295a1f7 371 result = pal_send(sock2, messageOut, 15, &sent);
ram54288 0:a2cb7295a1f7 372 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 373
ram54288 0:a2cb7295a1f7 374
ram54288 0:a2cb7295a1f7 375 result = pal_socket(PAL_AF_INET, PAL_SOCK_STREAM, false, 0, &sock3);
ram54288 0:a2cb7295a1f7 376 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 377
ram54288 0:a2cb7295a1f7 378
ram54288 0:a2cb7295a1f7 379
ram54288 0:a2cb7295a1f7 380 pal_close(&sock2);
ram54288 0:a2cb7295a1f7 381 pal_close(&sock3);
ram54288 0:a2cb7295a1f7 382 pal_close(&sock);
ram54288 0:a2cb7295a1f7 383
ram54288 0:a2cb7295a1f7 384 TEST_PRINTF("test Done");
ram54288 0:a2cb7295a1f7 385 }
ram54288 0:a2cb7295a1f7 386
ram54288 0:a2cb7295a1f7 387
ram54288 0:a2cb7295a1f7 388 TEST(pal_socket, tProvUDPTest)
ram54288 0:a2cb7295a1f7 389 {
ram54288 0:a2cb7295a1f7 390
ram54288 0:a2cb7295a1f7 391 palStatus_t result = PAL_SUCCESS;
ram54288 0:a2cb7295a1f7 392 palSocket_t sock = 0;
ram54288 0:a2cb7295a1f7 393 palSocketAddress_t address = { 0 };
ram54288 0:a2cb7295a1f7 394 palSocketAddress_t address2 = { 0 };
ram54288 0:a2cb7295a1f7 395 char buffer[100] = { 0 };
ram54288 0:a2cb7295a1f7 396 const char* messageOut = "HTTP/1.0 200 OK";
ram54288 0:a2cb7295a1f7 397 size_t sent = 0;
ram54288 0:a2cb7295a1f7 398 size_t read = 0;
ram54288 0:a2cb7295a1f7 399 palSocketLength_t addrlen = 16;
ram54288 0:a2cb7295a1f7 400 palSocketLength_t addrlen2 = 16;
ram54288 0:a2cb7295a1f7 401 int timeout = 10000;
ram54288 0:a2cb7295a1f7 402 result = pal_socket(PAL_AF_INET, PAL_SOCK_DGRAM, false, 0, &sock);
ram54288 0:a2cb7295a1f7 403 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 404
ram54288 0:a2cb7295a1f7 405 result = pal_getAddressInfo(PAL_NET_TEST_SERVER_IP_STRING, &address, &addrlen);
ram54288 0:a2cb7295a1f7 406 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 407
ram54288 0:a2cb7295a1f7 408 result = pal_setSockAddrPort(&address, PAL_NET_TEST_SERVER_UDP_PORT);
ram54288 0:a2cb7295a1f7 409 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 410
ram54288 0:a2cb7295a1f7 411 result = pal_setSocketOptions(sock, PAL_SO_SNDTIMEO, &timeout, sizeof(timeout));
ram54288 0:a2cb7295a1f7 412 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 413
ram54288 0:a2cb7295a1f7 414 result = pal_sendTo(sock, messageOut, 16, &address, addrlen, &sent);
ram54288 0:a2cb7295a1f7 415 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 416 TEST_ASSERT_EQUAL(sent, 16);
ram54288 0:a2cb7295a1f7 417
ram54288 0:a2cb7295a1f7 418 result = pal_receiveFrom(sock, buffer, 100, NULL, NULL, &read);
ram54288 0:a2cb7295a1f7 419 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 420 TEST_ASSERT_EQUAL(read, 16);
ram54288 0:a2cb7295a1f7 421
ram54288 0:a2cb7295a1f7 422 timeout = 1;
ram54288 0:a2cb7295a1f7 423 result = pal_setSocketOptions(sock, PAL_SO_RCVTIMEO, &timeout, sizeof(timeout));
ram54288 0:a2cb7295a1f7 424 TEST_ASSERT_EQUAL(result, PAL_SUCCESS);
ram54288 0:a2cb7295a1f7 425
ram54288 0:a2cb7295a1f7 426 result = pal_receiveFrom(sock, buffer, 100, &address2, &addrlen2, &read); // should get timeout
ram54288 0:a2cb7295a1f7 427 TEST_ASSERT_EQUAL(result, PAL_ERR_SOCKET_WOULD_BLOCK);
ram54288 0:a2cb7295a1f7 428 }