aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2016-03-11 16:53:58 -0800
committerGravatar Craig Tiller <ctiller@google.com>2016-03-11 16:53:58 -0800
commit57e2743b6580ae19326ceccb5ac9ed88e0691a94 (patch)
tree51b17e1897f1a53bd5ada6a76904ce0026e13b4e /test
parent6a462d4b08de01027e80e16afe6e891bb0fdabe3 (diff)
Add contributed test
Diffstat (limited to 'test')
-rw-r--r--test/core/surface/concurrent_connectivity_test.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c
new file mode 100644
index 0000000000..d8639f5e51
--- /dev/null
+++ b/test/core/surface/concurrent_connectivity_test.c
@@ -0,0 +1,48 @@
+#include <stdio.h>
+
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/thd.h>
+
+#define NUM_THREADS 100
+static grpc_channel* channels[NUM_THREADS];
+static grpc_completion_queue* queues[NUM_THREADS];
+
+void create_loop_destroy(void* actually_an_int) {
+ int thread_index = (int)(actually_an_int);
+ for (int i = 0; i < 10; ++i) {
+ grpc_completion_queue* cq = grpc_completion_queue_create(NULL);
+ grpc_channel* chan = grpc_insecure_channel_create("localhost", NULL, NULL);
+
+ channels[thread_index] = chan;
+ queues[thread_index] = cq;
+
+ gpr_timespec inf_future = gpr_inf_future(GPR_CLOCK_REALTIME);
+ gpr_timespec delta = gpr_time_from_millis(10, GPR_TIMESPAN);
+ for (int j = 0; j < 10; ++j) {
+ gpr_timespec later_time =
+ gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), delta);
+ grpc_connectivity_state state =
+ grpc_channel_check_connectivity_state(chan, 1);
+ grpc_channel_watch_connectivity_state(chan, state, later_time, cq, NULL);
+ grpc_completion_queue_next(cq, inf_future, NULL);
+ }
+ grpc_channel_destroy(channels[thread_index]);
+ grpc_completion_queue_destroy(queues[thread_index]);
+ }
+}
+
+int main() {
+ grpc_init();
+ gpr_thd_id threads[NUM_THREADS];
+ for (intptr_t i = 0; i < NUM_THREADS; ++i) {
+ gpr_thd_options options = gpr_thd_options_default();
+ gpr_thd_options_set_joinable(&options);
+ gpr_thd_new(&threads[i], create_loop_destroy, (void*)i, &options);
+ }
+ for (int i = 0; i < NUM_THREADS; ++i) {
+ gpr_thd_join(threads[i]);
+ }
+ grpc_shutdown();
+ return 0;
+}