From dbfc895ff95cb577c39c412925c3dddf5d9a34aa Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Mon, 18 Apr 2016 22:58:10 -0700
Subject: [PATCH] Stub out request call call

---
 test/core/end2end/fuzzers/api_fuzzer.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c
index 225c333cda..707f27a0c1 100644
--- a/test/core/end2end/fuzzers/api_fuzzer.c
+++ b/test/core/end2end/fuzzers/api_fuzzer.c
@@ -348,7 +348,7 @@ static void free_non_null(void *p) {
 }
 
 typedef enum {
-  ROOT, CLIENT, SERVER
+  ROOT, CLIENT, SERVER, PENDING_SERVER
 } call_state_type;
 
 typedef struct call_state {
@@ -361,6 +361,7 @@ typedef struct call_state {
   char *recv_status_details;
   size_t recv_status_details_capacity;
   int cancelled;
+  grpc_call_details call_details;
 
   struct call_state *next;
   struct call_state *prev;
@@ -601,7 +602,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
       }
       // queue some ops on a call
       case 12: {
-        if (active_call->type == ROOT || active_call->call == NULL) {
+        if (active_call->type ==PENDING_SERVER || active_call->type == ROOT || active_call->call == NULL) {
           end(&inp);
           break;
         }
@@ -761,6 +762,18 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         gpr_free(tracer);
         break;
       }
+      // request a server call
+      case 19: {
+        if (g_server == NULL) {
+          end(&inp);
+          break;
+        }
+        call_state *cs = new_call(active_call, PENDING_SERVER);
+        grpc_call_error error = grpc_server_request_call(g_server, &cs->call, &cs->call_details, &cs->recv_initial_metadata,
+                                                         cq, cq, NULL);
+        gpr_log(GPR_DEBUG, "%d", error);
+        break;
+      }
     }
   }
 
-- 
GitLab