aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core
diff options
context:
space:
mode:
authorGravatar Yuchen Zeng <zyc@google.com>2016-10-11 18:36:24 -0700
committerGravatar Yuchen Zeng <zyc@google.com>2016-10-11 18:36:24 -0700
commita4f708a4c4af88e114209eb29f625c4d4d935bb4 (patch)
tree05242ed8fac0f07d4331878cebb10afff2e214cc /test/core
parentb5273fdb7354942a4deab0e2228de493ae40721e (diff)
Introduce grpc_socket_mutator
Diffstat (limited to 'test/core')
-rw-r--r--test/core/iomgr/socket_utils_test.c48
-rw-r--r--test/core/iomgr/socket_utils_tos_test.c67
2 files changed, 48 insertions, 67 deletions
diff --git a/test/core/iomgr/socket_utils_test.c b/test/core/iomgr/socket_utils_test.c
index 297531c44d..113668b4e9 100644
--- a/test/core/iomgr/socket_utils_test.c
+++ b/test/core/iomgr/socket_utils_test.c
@@ -35,11 +35,37 @@
#include "src/core/lib/iomgr/socket_utils_posix.h"
#include <errno.h>
+#include <netinet/ip.h>
#include <string.h>
#include <grpc/support/log.h>
#include "test/core/util/test_config.h"
+struct test_socket_mutator {
+ grpc_socket_mutator base;
+ int option_value;
+};
+
+static bool mutate_fd(int fd, grpc_socket_mutator* mutator) {
+ int newval;
+ socklen_t intlen = sizeof(newval);
+ struct test_socket_mutator* m = (struct test_socket_mutator*)mutator;
+
+ if (0 != setsockopt(fd, IPPROTO_IP, IP_TOS, &m->option_value,
+ sizeof(m->option_value))) {
+ return false;
+ }
+ if (0 != getsockopt(fd, IPPROTO_IP, IP_TOS, &newval, &intlen)) {
+ return false;
+ }
+ if (newval != m->option_value) {
+ return false;
+ }
+ return true;
+}
+
+static const grpc_socket_mutator_vtable mutator_vtable = {mutate_fd};
+
int main(int argc, char **argv) {
int sock;
grpc_test_init(argc, argv);
@@ -64,6 +90,28 @@ int main(int argc, char **argv) {
GPR_ASSERT(GRPC_LOG_IF_ERROR("set_socket_low_latency",
grpc_set_socket_low_latency(sock, 0)));
+ struct test_socket_mutator mutator;
+ mutator.base.vtable = &mutator_vtable;
+
+ mutator.option_value = IPTOS_LOWDELAY;
+ GPR_ASSERT(GRPC_LOG_IF_ERROR(
+ "set_socket_with_mutator",
+ grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator)));
+
+ mutator.option_value = IPTOS_THROUGHPUT;
+ GPR_ASSERT(GRPC_LOG_IF_ERROR(
+ "set_socket_with_mutator",
+ grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator)));
+
+ mutator.option_value = IPTOS_RELIABILITY;
+ GPR_ASSERT(GRPC_LOG_IF_ERROR(
+ "set_socket_with_mutator",
+ grpc_set_socket_with_mutator(sock, (grpc_socket_mutator*)&mutator)));
+
+ mutator.option_value = -1;
+ GPR_ASSERT(GRPC_ERROR_NONE != grpc_set_socket_with_mutator(
+ sock, (grpc_socket_mutator*)&mutator));
+
close(sock);
return 0;
diff --git a/test/core/iomgr/socket_utils_tos_test.c b/test/core/iomgr/socket_utils_tos_test.c
deleted file mode 100644
index ee3a43367b..0000000000
--- a/test/core/iomgr/socket_utils_tos_test.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *
- * Copyright 2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <grpc/support/port_platform.h>
-#include "src/core/lib/iomgr/socket_utils_posix.h"
-
-#include <errno.h>
-#include <netinet/ip.h>
-#include <string.h>
-
-#include <grpc/support/log.h>
-#include "test/core/util/test_config.h"
-
-int main(int argc, char **argv) {
- int sock;
- grpc_arg tos_arg;
- grpc_test_init(argc, argv);
-
- sock = socket(PF_INET, SOCK_STREAM, 0);
- GPR_ASSERT(sock > 0);
-
- tos_arg.key = GRPC_ARG_TOS;
- tos_arg.type = GRPC_ARG_INTEGER;
- tos_arg.value.integer = IPTOS_LOWDELAY;
- GPR_ASSERT(
- GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg)));
- tos_arg.value.integer = IPTOS_THROUGHPUT;
- GPR_ASSERT(
- GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg)));
- tos_arg.value.integer = IPTOS_RELIABILITY;
- GPR_ASSERT(
- GRPC_LOG_IF_ERROR("set_socket_tos", grpc_set_socket_tos(sock, &tos_arg)));
-
- close(sock);
-
- return 0;
-}