This is an automated email from the ASF dual-hosted git repository.
guangmingchen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git
The following commit(s) were added to refs/heads/master by this push:
new ede6b776 Fix rdma UT (#3146)
ede6b776 is described below
commit ede6b7763ab52829bd1436c4f0bab4a708800c3a
Author: Bright Chen <[email protected]>
AuthorDate: Sun Nov 9 16:50:42 2025 +0800
Fix rdma UT (#3146)
---
.github/actions/install-soft-RoCE/action.yml | 20 +++
test/brpc_rdma_unittest.cpp | 241 ++++++++++++++++-----------
2 files changed, 167 insertions(+), 94 deletions(-)
diff --git a/.github/actions/install-soft-RoCE/action.yml
b/.github/actions/install-soft-RoCE/action.yml
new file mode 100644
index 00000000..3cb5c34f
--- /dev/null
+++ b/.github/actions/install-soft-RoCE/action.yml
@@ -0,0 +1,20 @@
+runs:
+ using: "composite"
+ steps:
+ - run: |
+ KERNEL_VERSION=$(uname -r | cut -d '-' -f 1)
+ KERNEL_NAME="linux-${KERNEL_VERSION%'.0'}"
+
DOWNLOAD_LINK="https://cdn.kernel.org/pub/linux/kernel/v${KERNEL_VERSION%%.*}.x/${KERNEL_NAME}.tar.xz"
+ ETHERNET_CARD=$(ip link | awk -F ": " '$0 !~ "lo|vir|wl|^[^0-9]"{print
$2;getline}' | head -1)
+ echo "kernel version is ${KERNEL_VERSION}, download link is
${DOWNLOAD_LINK}, ethernet card is ${ETHERNET_CARD}"
+ wget -q $DOWNLOAD_LINK -O /tmp/$KERNEL_NAME.tar.xz
+ tar xf /tmp/$KERNEL_NAME.tar.xz --directory=/tmp
+ RXE_PATH="/tmp/$KERNEL_NAME/drivers/infiniband/sw/rxe"
+ sed 's/$(CONFIG_RDMA_RXE)/m/g' $RXE_PATH/Makefile > $RXE_PATH/Kbuild
+ make -C /lib/modules/$(uname -r)/build M=$RXE_PATH modules -j
+ sudo modprobe ib_core
+ sudo modprobe rdma_ucm
+ sudo insmod $RXE_PATH/rdma_rxe.ko
+ sudo rdma link add rxe_0 type rxe netdev $ETHERNET_CARD
+ rdma link
+ shell: bash
diff --git a/test/brpc_rdma_unittest.cpp b/test/brpc_rdma_unittest.cpp
index 26a82361..066d0127 100644
--- a/test/brpc_rdma_unittest.cpp
+++ b/test/brpc_rdma_unittest.cpp
@@ -42,7 +42,9 @@
#include "echo.pb.h"
static const int PORT = 8713;
-static const size_t RDMA_HELLO_MSG_LEN = 40;
+static const size_t RDMA_HELLO_MSG_LEN = 40;
+static uint16_t RDMA_HELLO_VERSION = 2;
+static uint16_t RDMA_IMPL_VERSION = 1;
using namespace brpc;
@@ -61,9 +63,10 @@ struct HelloMessage {
uint16_t msg_len;
uint16_t hello_ver;
uint16_t impl_ver;
- uint16_t block_size;
+ uint32_t block_size;
uint16_t sq_size;
uint16_t rq_size;
+ uint16_t lid;
ibv_gid gid;
uint32_t qp_num;
};
@@ -137,7 +140,7 @@ private:
void StartServer(bool use_rdma = true) {
ServerOptions options;
options.use_rdma = use_rdma;
- options.idle_timeout_sec = 5;
+ options.idle_timeout_sec = 10;
options.max_concurrency = 0;
options.internal_port = -1;
EXPECT_EQ(0, _server.Start(PORT, &options));
@@ -287,8 +290,11 @@ TEST_F(RdmaTest, client_hello_msg_invalid_len) {
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
memcpy(data, "RDMA", 4);
- memset(data + 4, 0, 34);
- ASSERT_EQ(38, write(sockfd1, data, 38)); // write invalid length
+ ASSERT_EQ(4, write(sockfd1, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ memset(data + 4, 0, 36);
+ ASSERT_EQ(36, write(sockfd1, data + 4, 36)); // Write invalid length.
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(NULL, GetSocketFromServer(0));
@@ -299,10 +305,13 @@ TEST_F(RdmaTest, client_hello_msg_invalid_len) {
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
memcpy(data, "RDMA", 4);
+ ASSERT_EQ(4, write(sockfd2, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
uint16_t len = butil::HostToNet16(35);
- memcpy(data + 4, &len, 2);
- memset(data + 6, 0, 32);
- ASSERT_EQ(38, write(sockfd2, data, 38)); // write invalid length
+ memcpy(data + 4, &len, sizeof(len));
+ memset(data + 6, 0, 34);
+ ASSERT_EQ(36, write(sockfd2, data + 4, 36)); // write invalid length
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(NULL, GetSocketFromServer(0));
@@ -318,7 +327,7 @@ TEST_F(RdmaTest, client_hello_msg_invalid_version) {
addr.sin_port = htons(PORT);
Socket* s = NULL;
uint8_t data[RDMA_HELLO_MSG_LEN];
- uint16_t len = butil::HostToNet16(38);
+ uint16_t len = butil::HostToNet16(RDMA_HELLO_MSG_LEN);
uint16_t ver = butil::HostToNet16(1);
butil::fd_guard sockfd1(socket(AF_INET, SOCK_STREAM, 0));
@@ -328,18 +337,22 @@ TEST_F(RdmaTest, client_hello_msg_invalid_version) {
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
memcpy(data, "RDMA", 4);
+ ASSERT_EQ(4, write(sockfd1, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
memcpy(data + 4, &len, 2);
- memset(data + 6, 0, 32);
+ memset(data + 6, 0, 34);
memcpy(data + 6, &ver, 2); // hello_ver == 1, impl_ver == 0
- ASSERT_EQ(38, write(sockfd1, data, 38));
+ ASSERT_EQ(36, write(sockfd1, data, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
- memset(data, 0, 4);
- ASSERT_EQ(4, write(sockfd1, data, 4));
+ ASSERT_EQ(Socket::RDMA_OFF, s->_rdma_state);
+ uint32_t flags = 0;
+ ASSERT_EQ(sizeof(flags), write(sockfd1, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
- close(sockfd1);
- usleep(100000);
+ sockfd1.reset(-1);
+ usleep(100000); // wait for server to handle the msg
ASSERT_EQ(NULL, GetSocketFromServer(0));
butil::fd_guard sockfd2(socket(AF_INET, SOCK_STREAM, 0));
@@ -349,15 +362,21 @@ TEST_F(RdmaTest, client_hello_msg_invalid_version) {
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
memcpy(data, "RDMA", 4);
+ ASSERT_EQ(4, write(sockfd2, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
memcpy(data + 4, &len, 2);
memset(data + 6, 0, 32);
memcpy(data + 8, &ver, 2); // hello_ver == 0, impl_ver == 1
- ASSERT_EQ(38, write(sockfd2, data, 38));
+ ASSERT_EQ(36, write(sockfd2, data, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
- uint32_t flag = butil::HostToNet32(1);
- ASSERT_EQ(4, write(sockfd2, &flag, 4));
- usleep(100000);
+ ASSERT_EQ(Socket::RDMA_OFF, s->_rdma_state);
+ ASSERT_EQ(sizeof(flags), write(sockfd2, &flags, sizeof(flags)));
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
+ sockfd2.reset(-1);
+ usleep(100000); // wait for server to handle the msg
ASSERT_EQ(NULL, GetSocketFromServer(0));
StopServer();
@@ -371,11 +390,12 @@ TEST_F(RdmaTest,
client_hello_msg_invalid_sq_rq_block_size) {
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
Socket* s = NULL;
- rdma::HelloMessage msg;
+ uint32_t flags = butil::HostToNet32(0);
+ rdma::HelloMessage msg{};
uint8_t data[RDMA_HELLO_MSG_LEN];
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 10;
msg.rq_size = 16;
@@ -388,14 +408,19 @@ TEST_F(RdmaTest,
client_hello_msg_invalid_sq_rq_block_size) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd1, data, 38));
+ ASSERT_EQ(4, write(sockfd1, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd1, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
- memset(data, 0, 4);
- ASSERT_EQ(4, write(sockfd1, data, 4));
+ ASSERT_EQ(Socket::RDMA_OFF, s->_rdma_state);
+ ASSERT_EQ(sizeof(flags), write(sockfd1, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
- close(sockfd1);
+ sockfd1.reset(-1);
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(NULL, GetSocketFromServer(0));
msg.sq_size = 16;
msg.rq_size = 10;
@@ -408,14 +433,19 @@ TEST_F(RdmaTest,
client_hello_msg_invalid_sq_rq_block_size) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd2, data, 38));
+ ASSERT_EQ(4, write(sockfd2, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd2, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
- memset(data, 0, 4);
- ASSERT_EQ(4, write(sockfd1, data, 4));
+ ASSERT_EQ(Socket::RDMA_OFF, s->_rdma_state);
+ ASSERT_EQ(sizeof(flags), write(sockfd2, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
- close(sockfd2);
+ sockfd2.reset(-1);
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(NULL, GetSocketFromServer(0));
msg.sq_size = 16;
msg.rq_size = 16;
@@ -428,13 +458,19 @@ TEST_F(RdmaTest,
client_hello_msg_invalid_sq_rq_block_size) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd3, data, 38));
+ ASSERT_EQ(4, write(sockfd3, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd3, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
- memset(data, 0, 4);
- ASSERT_EQ(4, write(sockfd3, data, 4));
+ ASSERT_EQ(Socket::RDMA_OFF, s->_rdma_state);
+ ASSERT_EQ(sizeof(flags), write(sockfd3, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
+ sockfd3.reset(-1);
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(NULL, GetSocketFromServer(0));
StopServer();
}
@@ -449,9 +485,9 @@ TEST_F(RdmaTest, client_close_after_qp_build) {
Socket* s = NULL;
rdma::HelloMessage msg;
uint8_t data[RDMA_HELLO_MSG_LEN];
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 16;
msg.rq_size = 16;
msg.block_size = 8192;
@@ -466,7 +502,7 @@ TEST_F(RdmaTest, client_close_after_qp_build) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd1, data, 38));
+ ASSERT_EQ(40, write(sockfd1, data, 40));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
close(sockfd1);
@@ -486,9 +522,9 @@ TEST_F(RdmaTest, client_close_during_ack_send) {
Socket* s = NULL;
rdma::HelloMessage msg;
uint8_t data[RDMA_HELLO_MSG_LEN];
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 16;
msg.rq_size = 16;
msg.block_size = 8192;
@@ -503,13 +539,16 @@ TEST_F(RdmaTest, client_close_during_ack_send) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd1, data, 38));
+ ASSERT_EQ(4, write(sockfd1, data, 4)); // Write magic string.
usleep(100000); // wait for server to handle the msg
- ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
- uint32_t flags = butil::HostToNet32(0);
- ASSERT_EQ(2, write(sockfd1, &flags, 2));
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd1, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
+ uint32_t flags = butil::HostToNet32(1);
+ ASSERT_EQ(sizeof(flags), write(sockfd1, &flags, sizeof(flags)));
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::ESTABLISHED, s->_rdma_ep->_state);
close(sockfd1);
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(NULL, GetSocketFromServer(0));
@@ -527,9 +566,9 @@ TEST_F(RdmaTest, client_close_after_ack_send) {
Socket* s = NULL;
rdma::HelloMessage msg;
uint8_t data[RDMA_HELLO_MSG_LEN];
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 16;
msg.rq_size = 16;
msg.block_size = 8192;
@@ -544,13 +583,17 @@ TEST_F(RdmaTest, client_close_after_ack_send) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd1, data, 38));
+ ASSERT_EQ(4, write(sockfd1, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd1, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
uint32_t flags = butil::HostToNet32(0);
- ASSERT_EQ(4, write(sockfd1, &flags, 4));
+ ASSERT_EQ(sizeof(flags), write(sockfd1, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
+ ASSERT_EQ(Socket::RDMA_OFF, s->_rdma_state);
close(sockfd1);
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(NULL, GetSocketFromServer(0));
@@ -561,11 +604,14 @@ TEST_F(RdmaTest, client_close_after_ack_send) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd2, data, 38));
+ ASSERT_EQ(4, write(sockfd2, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd2, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
flags = butil::HostToNet32(1);
- ASSERT_EQ(4, write(sockfd2, &flags, 4));
+ ASSERT_EQ(sizeof(flags), write(sockfd2, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::ESTABLISHED, s->_rdma_ep->_state);
close(sockfd2);
@@ -585,9 +631,9 @@ TEST_F(RdmaTest, client_send_data_on_tcp_after_ack_send) {
Socket* s = NULL;
rdma::HelloMessage msg;
uint8_t data[RDMA_HELLO_MSG_LEN];
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 16;
msg.rq_size = 16;
msg.block_size = 8192;
@@ -602,14 +648,17 @@ TEST_F(RdmaTest, client_send_data_on_tcp_after_ack_send) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd1, data, 38));
+ ASSERT_EQ(4, write(sockfd1, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd1, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
uint32_t flags = butil::HostToNet32(0);
- ASSERT_EQ(4, write(sockfd1, &flags, 4));
+ ASSERT_EQ(sizeof(flags), write(sockfd1, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
- ASSERT_EQ(4, write(sockfd1, &flags, 4));
+ ASSERT_EQ(sizeof(flags), write(sockfd1, &flags, sizeof(flags)));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
close(sockfd1);
@@ -622,14 +671,17 @@ TEST_F(RdmaTest, client_send_data_on_tcp_after_ack_send) {
usleep(100000); // wait for server to handle the msg
s = GetSocketFromServer(0);
ASSERT_EQ(rdma::RdmaEndpoint::UNINIT, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(sockfd2, data, 38));
+ ASSERT_EQ(4, write(sockfd2, data, 4)); // Write magic string.
+ usleep(100000); // wait for server to handle the msg
+ ASSERT_EQ(rdma::RdmaEndpoint::S_HELLO_WAIT, s->_rdma_ep->_state);
+ ASSERT_EQ(36, write(sockfd2, data + 4, 36));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::S_ACK_WAIT, s->_rdma_ep->_state);
flags = butil::HostToNet32(1);
- ASSERT_EQ(4, write(sockfd2, &flags, 4));
+ ASSERT_EQ(sizeof(flags), write(sockfd2, &flags, sizeof(flags)));
usleep(100000); // wait for server to handle the msg
ASSERT_EQ(rdma::RdmaEndpoint::ESTABLISHED, s->_rdma_ep->_state);
- ASSERT_EQ(4, write(sockfd1, &flags, 4));
+ ASSERT_EQ(sizeof(flags), write(sockfd2, &flags, sizeof(flags)));
usleep(100000);
ASSERT_EQ(NULL, GetSocketFromServer(0));
@@ -694,7 +746,7 @@ TEST_F(RdmaTest, server_close_before_hello_send) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
close(acc_fd);
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::FAILED, s->_rdma_ep->_state);
@@ -730,7 +782,7 @@ TEST_F(RdmaTest, server_miss_during_magic_str) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
ASSERT_EQ(2, write(acc_fd, "RD", 2));
usleep(100000);
bthread_id_join(cntl.call_id());
@@ -765,8 +817,9 @@ TEST_F(RdmaTest, server_close_during_magic_str) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
ASSERT_EQ(2, write(acc_fd, "RD", 2));
+ usleep(100000);
close(acc_fd);
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::FAILED, s->_rdma_ep->_state);
@@ -802,7 +855,7 @@ TEST_F(RdmaTest, server_hello_invalid_magic_str) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
ASSERT_EQ(4, write(acc_fd, "ABCD", 4));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::FAILED, s->_rdma_ep->_state);
@@ -838,7 +891,7 @@ TEST_F(RdmaTest, server_miss_during_hello_msg) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
ASSERT_EQ(4, write(acc_fd, "RDMA", 4));
ASSERT_EQ(2, write(acc_fd, "00", 2));
bthread_id_join(cntl.call_id());
@@ -873,7 +926,7 @@ TEST_F(RdmaTest, server_close_during_hello_msg) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
ASSERT_EQ(4, write(acc_fd, "RDMA", 4));
ASSERT_EQ(2, write(acc_fd, "00", 2));
close(acc_fd);
@@ -911,12 +964,12 @@ TEST_F(RdmaTest, server_hello_invalid_msg_len) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
memcpy(data, "RDMA", 4);
uint16_t len = butil::HostToNet16(35);
memcpy(data + 4, &len, 2);
memset(data + 6, 0, 32);
- ASSERT_EQ(38, write(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, write(acc_fd, data, RDMA_HELLO_MSG_LEN));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::FAILED, s->_rdma_ep->_state);
bthread_id_join(cntl.call_id());
@@ -951,12 +1004,12 @@ TEST_F(RdmaTest, server_hello_invalid_version) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
memcpy(data, "RDMA", 4);
- uint16_t len = butil::HostToNet16(38);
+ uint16_t len = butil::HostToNet16(RDMA_HELLO_MSG_LEN);
memcpy(data + 4, &len, 2);
memset(data + 6, 0, 32);
- ASSERT_EQ(38, write(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, write(acc_fd, data, RDMA_HELLO_MSG_LEN));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
ASSERT_EQ(4, read(acc_fd, data, 4));
@@ -994,10 +1047,10 @@ TEST_F(RdmaTest, server_hello_invalid_sq_rq_size) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
rdma::HelloMessage msg;
- msg.msg_len = 38;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
msg.hello_ver = 1;
msg.impl_ver = 1;
msg.sq_size = 0;
@@ -1007,7 +1060,7 @@ TEST_F(RdmaTest, server_hello_invalid_sq_rq_size) {
msg.gid = rdma::GetRdmaGid();
memcpy(data, "RDMA", 4);
msg.Serialize(data + 4);
- ASSERT_EQ(38, write(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, write(acc_fd, data, RDMA_HELLO_MSG_LEN));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::FALLBACK_TCP, s->_rdma_ep->_state);
@@ -1046,12 +1099,12 @@ TEST_F(RdmaTest, server_miss_after_ack) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
rdma::HelloMessage msg;
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 16;
msg.rq_size = 16;
msg.block_size = 8192;
@@ -1059,7 +1112,7 @@ TEST_F(RdmaTest, server_miss_after_ack) {
msg.gid = rdma::GetRdmaGid();
memcpy(data, "RDMA", 4);
msg.Serialize(data + 4);
- ASSERT_EQ(38, write(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, write(acc_fd, data, RDMA_HELLO_MSG_LEN));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::ESTABLISHED, s->_rdma_ep->_state);
@@ -1098,12 +1151,12 @@ TEST_F(RdmaTest, server_close_after_ack) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
rdma::HelloMessage msg;
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 16;
msg.rq_size = 16;
msg.block_size = 8192;
@@ -1111,7 +1164,7 @@ TEST_F(RdmaTest, server_close_after_ack) {
msg.gid = rdma::GetRdmaGid();
memcpy(data, "RDMA", 4);
msg.Serialize(data + 4);
- ASSERT_EQ(38, write(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, write(acc_fd, data, RDMA_HELLO_MSG_LEN));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::ESTABLISHED, s->_rdma_ep->_state);
@@ -1151,12 +1204,12 @@ TEST_F(RdmaTest, server_send_data_on_tcp_after_ack) {
butil::fd_guard acc_fd(accept(sockfd, NULL, NULL));
ASSERT_TRUE(acc_fd >= 0);
uint8_t data[RDMA_HELLO_MSG_LEN];
- ASSERT_EQ(38, read(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, read(acc_fd, data, RDMA_HELLO_MSG_LEN));
rdma::HelloMessage msg;
- msg.msg_len = 38;
- msg.hello_ver = 1;
- msg.impl_ver = 1;
+ msg.msg_len = RDMA_HELLO_MSG_LEN;
+ msg.hello_ver = RDMA_HELLO_VERSION;
+ msg.impl_ver = RDMA_IMPL_VERSION;
msg.sq_size = 16;
msg.rq_size = 16;
msg.block_size = 8192;
@@ -1164,11 +1217,11 @@ TEST_F(RdmaTest, server_send_data_on_tcp_after_ack) {
msg.gid = rdma::GetRdmaGid();
memcpy(data, "RDMA", 4);
msg.Serialize(data + 4);
- ASSERT_EQ(38, write(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, write(acc_fd, data, RDMA_HELLO_MSG_LEN));
usleep(100000);
ASSERT_EQ(rdma::RdmaEndpoint::ESTABLISHED, s->_rdma_ep->_state);
- ASSERT_EQ(38, write(acc_fd, data, 38));
+ ASSERT_EQ(RDMA_HELLO_MSG_LEN, write(acc_fd, data, RDMA_HELLO_MSG_LEN));
bthread_id_join(cntl.call_id());
ASSERT_EQ(EPROTO, cntl.ErrorCode());
@@ -1407,7 +1460,7 @@ TEST_F(RdmaTest, send_rpcs_in_one_qp) {
ChannelOptions chan_options;
chan_options.use_rdma = true;
chan_options.connect_timeout_ms = 500;
- chan_options.timeout_ms = 3000;
+ chan_options.timeout_ms = 5000;
chan_options.max_retry = 0;
ASSERT_EQ(0, channel.Init(g_ep, &chan_options));
Controller cntl[RPC_NUM];
@@ -1467,8 +1520,8 @@ TEST_F(RdmaTest, send_rpcs_in_one_qp) {
Socket* m = GetSocketFromServer(0);
DumpRdmaEndpointInfo(s.get(), m);
}
- ASSERT_TRUE(0 == cntl[i].ErrorCode() ||
- EOVERCROWDED == cntl[i].ErrorCode()) << "req[" << i << "]";
+ ASSERT_TRUE(0 == cntl[i].ErrorCode() || EOVERCROWDED ==
cntl[i].ErrorCode())
+ << "req[" << i << "] " << berror(cntl[i].ErrorCode());
}
StopServer();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]