From d2169f9b2d216afeec91137bebcf0594571f6599 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Sun, 5 Jul 2020 19:04:07 +0800 Subject: [PATCH] emulate send() and sendto() random fail too. --- src/os/linux/inc/os.h | 7 +++++++ src/os/linux/src/linuxPlatform.c | 23 ++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/os/linux/inc/os.h b/src/os/linux/inc/os.h index 16fe56ac48..00b9f33f1b 100644 --- a/src/os/linux/inc/os.h +++ b/src/os/linux/inc/os.h @@ -88,9 +88,16 @@ extern "C" { #ifdef TAOS_RANDOM_NETWORK_FAIL +ssize_t taos_send_random_fail(int sockfd, const void *buf, size_t len, int flags); + +ssize_t taos_sendto_random_fail(int sockfd, const void *buf, size_t len, int flags, + const struct sockaddr *dest_addr, socklen_t addrlen); ssize_t taos_read_random_fail(int fd, void *buf, size_t count); ssize_t taos_write_random_fail(int fd, const void *buf, size_t count); +#define send(sockfd, buf, len, flags) taos_send_random_fail(sockfd, buf, len, flags) +#define sendto(sockfd, buf, len, flags, dest_addr, addrlen) \ + taos_sendto_random_fail(sockfd, buf, len, flags, dest_addr, addrlen) #define taosWriteSocket(fd, buf, len) taos_write_random_fail(fd, buf, len) #define taosReadSocket(fd, buf, len) taos_read_random_fail(fd, buf, len) diff --git a/src/os/linux/src/linuxPlatform.c b/src/os/linux/src/linuxPlatform.c index 5edae8f9b2..216d8942bc 100644 --- a/src/os/linux/src/linuxPlatform.c +++ b/src/os/linux/src/linuxPlatform.c @@ -272,7 +272,28 @@ int tSystem(const char * cmd) #ifdef TAOS_RANDOM_NETWORK_FAIL -#define RANDOM_NETWORK_FAIL_FACTOR 5 +#define RANDOM_NETWORK_FAIL_FACTOR 20 + +ssize_t taos_send_random_fail(int sockfd, const void *buf, size_t len, int flags) +{ + if (rand() % RANDOM_NETWORK_FAIL_FACTOR == 0) { + errno = ECONNRESET; + return -1; + } + + return send(sockfd, buf, len, flags); +} + +ssize_t taos_sendto_random_fail(int sockfd, const void *buf, size_t len, int flags, + const struct sockaddr *dest_addr, socklen_t addrlen) +{ + if (rand() % RANDOM_NETWORK_FAIL_FACTOR == 0) { + errno = ECONNRESET; + return -1; + } + + return sendto(sockfd, buf, len, flags, dest_addr, addrlen); +} ssize_t taos_read_random_fail(int fd, void *buf, size_t count) { -- GitLab