| 119 | } |
| 120 | |
| 121 | void SC::SocketTest::socketClientServer(SocketFlags::SocketType socketType, SocketFlags::ProtocolType protocol) |
| 122 | { |
| 123 | SocketDescriptor serverSocket; |
| 124 | SocketServer server(serverSocket); |
| 125 | SocketFlags::AddressFamily invalidFamily; |
| 126 | SC_TEST_EXPECT(not serverSocket.getAddressFamily(invalidFamily)); |
| 127 | // Look for an available port |
| 128 | const uint16_t tcpPort = report.mapPort(5050); |
| 129 | static constexpr StringView serverAddress = "::1"; //"127.0.0.1" |
| 130 | |
| 131 | SocketIPAddress nativeAddress; |
| 132 | SC_TEST_EXPECT(nativeAddress.fromAddressPort(serverAddress, tcpPort)); |
| 133 | SC_TEST_EXPECT(serverSocket.create(nativeAddress.getAddressFamily(), socketType, protocol)); |
| 134 | SC_TEST_EXPECT(server.bind(nativeAddress)); |
| 135 | if (protocol == SocketFlags::ProtocolTcp) |
| 136 | { |
| 137 | SC_TEST_EXPECT(server.listen(0)); |
| 138 | } |
| 139 | static constexpr char testValue = 123; |
| 140 | struct Params |
| 141 | { |
| 142 | Result connectRes = Result(false); |
| 143 | Result writeRes = Result(false); |
| 144 | Result closeRes = Result(false); |
| 145 | EventObject eventObject; |
| 146 | uint16_t port = 0; |
| 147 | } params; |
| 148 | params.port = tcpPort; |
| 149 | SocketDescriptor clientSocket; |
| 150 | SC_TEST_EXPECT(clientSocket.create(nativeAddress.getAddressFamily(), socketType, protocol)); |
| 151 | auto func = [&clientSocket, ¶ms](Thread& thread) |
| 152 | { |
| 153 | thread.setThreadName(SC_NATIVE_STR("func")); |
| 154 | SocketClient client(clientSocket); |
| 155 | params.connectRes = client.connect(serverAddress, params.port); |
| 156 | char buf[1] = {testValue}; |
| 157 | params.writeRes = client.write({buf, sizeof(buf)}); |
| 158 | params.eventObject.wait(); |
| 159 | buf[0]++; |
| 160 | params.writeRes = client.write({buf, sizeof(buf)}); |
| 161 | params.eventObject.wait(); |
| 162 | params.closeRes = clientSocket.close(); |
| 163 | }; |
| 164 | Thread thread; |
| 165 | SC_TEST_EXPECT(thread.start(func)); |
| 166 | SocketFlags::AddressFamily family; |
| 167 | SC_TEST_EXPECT(serverSocket.getAddressFamily(family)); |
| 168 | SocketDescriptor acceptedClientSocket; |
| 169 | if (protocol == SocketFlags::ProtocolTcp) |
| 170 | { |
| 171 | SC_TEST_EXPECT(server.accept(family, acceptedClientSocket)); |
| 172 | SC_TEST_EXPECT(acceptedClientSocket.isValid()); |
| 173 | } |
| 174 | |
| 175 | SocketDescriptor& socket = protocol == SocketFlags::ProtocolTcp ? acceptedClientSocket : serverSocket; |
| 176 | SocketClient acceptedClient(socket); |
| 177 | Span<char> readData; |
| 178 | char buf[1] = {0}; |
nothing calls this directly
no test coverage detected