From f707d62db625e3929680d165f2fbc67f9c8d3f9c Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Fri, 6 May 2016 14:26:12 -0700
Subject: [PATCH] Convert tests to new error scheme

---
 Makefile                                      |  130 +-
 build.yaml                                    |   23 +-
 .../ext/client_config/channel_connectivity.c  |    4 +-
 src/core/ext/client_config/client_channel.c   |    6 +-
 src/core/ext/client_config/subchannel.c       |    2 +-
 .../client_config/subchannel_call_holder.c    |    4 +-
 .../ext/lb_policy/pick_first/pick_first.c     |   18 +-
 .../ext/lb_policy/round_robin/round_robin.c   |   14 +-
 .../chttp2/server/insecure/server_chttp2.c    |    2 +-
 .../server/secure/server_secure_chttp2.c      |    4 +-
 .../chttp2/transport/chttp2_transport.c       |   18 +-
 .../transport/chttp2/transport/frame_data.c   |    4 +-
 .../transport/chttp2/transport/hpack_parser.c |    4 +-
 .../ext/transport/chttp2/transport/parsing.c  |    2 +-
 src/core/lib/iomgr/closure.c                  |    4 +-
 src/core/lib/iomgr/error.c                    |   22 +-
 src/core/lib/iomgr/error.h                    |    8 +-
 src/core/lib/iomgr/exec_ctx.c                 |    2 +-
 src/core/lib/iomgr/tcp_server_posix.c         |    4 +-
 src/core/lib/iomgr/timer.c                    |    4 +-
 .../composite/composite_credentials.c         |    1 -
 .../composite/composite_credentials.h         |    1 -
 .../lib/security/credentials/credentials.c    |    8 +-
 .../credentials/fake/fake_credentials.h       |    1 -
 .../google_default_credentials.h              |    2 -
 .../credentials/iam/iam_credentials.c         |    2 -
 .../credentials/iam/iam_credentials.h         |    3 -
 .../lib/security/credentials/jwt/json_token.c |    1 -
 .../credentials/jwt/jwt_credentials.c         |    1 -
 .../credentials/jwt/jwt_credentials.h         |    1 -
 .../credentials/plugin/plugin_credentials.c   |    2 -
 .../credentials/plugin/plugin_credentials.h   |    3 -
 .../credentials/ssl/ssl_credentials.c         |    4 -
 .../credentials/ssl/ssl_credentials.h         |    1 -
 .../lib/security/transport/secure_endpoint.c  |    2 +-
 .../security/transport/server_auth_filter.c   |    2 +-
 src/core/lib/security/util/json_util.c        |    1 -
 src/core/lib/security/util/json_util.h        |    4 +-
 src/core/lib/surface/call.c                   |    6 +-
 src/core/lib/transport/connectivity_state.c   |   11 +-
 src/core/lib/transport/transport.c            |    6 +-
 test/core/bad_client/bad_client.c             |    2 +-
 test/core/channel/channel_stack_test.c        |    5 +-
 .../dns_resolver_connectivity_test.c          |   18 +-
 .../set_initial_connect_string_test.c         |    4 +-
 test/core/end2end/dualstack_socket_test.c     |    4 +-
 test/core/end2end/fuzzers/api_fuzzer.c        |    6 +-
 test/core/end2end/goaway_server_test.c        |   27 +-
 test/core/end2end/tests/filter_causes_close.c |    5 +-
 test/core/http/httpcli_test.c                 |   17 +-
 test/core/http/httpscli_test.c                |   17 +-
 test/core/http/parser_test.c                  |  146 +--
 .../0299ca2580e4398d170c4a336e0c33eb2cd9d427  |    0
 .../05e613853d64a9669ea3cf41b0de777dc24931ba  |    0
 .../069352518a1d1baa05f317c677d275cefda2ac97  |    0
 .../0925527c9358b1e10ec0f0387cd99f35204d9a34  |    0
 .../0c5b7c2569410b526605e308309a7f36574e530d  |    0
 .../0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf  |    0
 .../1e1273f90187fdf5df3625764245610f86af6aa4  |    0
 .../1fbc57d118f3733287e9a9d808bb8947b3260e55  |    0
 .../24756c396bc72894fd720092bb6f9c03e66b469f  |    0
 .../276def41311933421ae7a9ee42e906c85b6a4d3f  |    0
 .../29daa75432381937fd005cb25e314e328de6e9f9  |    0
 .../2a75204bc492084ad853682f8de3fb137d5907bc  |    0
 .../2d34ba249b755a880525cf53c665633a5e359305  |    0
 .../33f4ea0c7ea27c37d8f95cfa64d282370efdafd2  |    0
 .../35554617ea6418bd43161fe9a2c337ed82d7ec5b  |    0
 .../35f0c561297cfc840ddaeebb9fc61091f4eadece  |    0
 .../3787bcc22ef645e665cc5f722b8a633af86de9cf  |    0
 .../3953688866ccb3b4f371f1a858570d6afdb6452d  |    0
 .../39b19c41ba537f37511eff7727733715db432e76  |    0
 .../3e3c4756d5e40b5aa250954cbac86b826e70a7ac  |    0
 .../3f03265921120c6ffa61b944e213e062a5538d4b  |    0
 .../3fb034e66ee5494a67acae1b4e6ff64ba92a2046  |    0
 .../466059ed07a0d55d6ad5e522c7d367cbf278eaf9  |    0
 .../487725eb38511c79a9340bf4560a1411061fa6fa  |    0
 .../48b9b205cae8ac21512a3f26f49fd53e21ee13c5  |    0
 .../4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55  |    0
 .../5028c56a5116a186b7343ff59567b47347a0796d  |    0
 .../533f62b3f495ce704babf3ee8d840f196a714dff  |    0
 .../5892cbb284771fc9761caae37b19cd6e27dbc104  |    0
 .../5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee  |    0
 .../5b6292bdf009b0daecbc90b85cca30a88c36eec5  |    0
 .../5c1659b77678b41faa4fa13df7772dae3238d1c0  |    0
 .../5c81f61621e29ec9c6a64ac3af9b3b216141618e  |    0
 .../657368df512ca6294b9df16adf935a3f374a8be2  |    0
 .../7fc4520094902ce2c760d70eaad5b674d2817337  |    0
 .../81f59a12b458ec3604035cb962165c604d1355e6  |    0
 .../8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9  |    0
 .../97c16de7fe3c390a2e6c09ff5c28f17d5c67542c  |    0
 .../97e4499d450c95660de86747f527e670f2012548  |    0
 .../9a996857196e0998a1278994a9bab3d35526e7f1  |    0
 .../9b7e00049ec356ecd84b1747e4e1941140139ae8  |    0
 .../9f0c38ec455cc363369b3674a2d32bc21c206de1  |    0
 .../a1dc7bc235e46eb21d91084d7b52d5ff9f45df85  |    0
 .../aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441  |    0
 .../ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0  |    0
 .../b04fea5c041c707db0ad9c09a81672557b52cc47  |    0
 .../c4acff8aa2ff886f35439f72625d05002990c940  |    0
 .../c55ce9995b002e88a102ae2891a71e8bacb346c8  |    0
 .../ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2  |    0
 .../cce734f1b263de6994f7950e0df7bf0c81449f70  |    0
 .../d39c8ee11a697634a09b309460c0bbd967e7effa  |    0
 .../d4c3e4cf5d035596433c30eaabbd2b2925f4b453  |    0
 .../d51f7fcc089f269c7afecaaca51966bab5fde629  |    0
 .../d936dad71c129cf659097dc3db64550c4dd467f4  |    0
 .../e275b0466a8fb8d9e0e15856e343ddc7112ae66b  |    0
 .../e5c364b205855a2991ce07482aebb2a3a6147089  |    0
 .../ee2077e08c3cfccd9bd82adb574ac4fc7d429afb  |    0
 .../fc5d4b9117ba9e87388174aee4f4970bdfe8d066  |    0
 .../fdeb2c7daa9e7704f67e141106384e6dd0042c0b  |    0
 .../{corpus => request_corpus}/request1.txt   |    0
 .../{corpus => request_corpus}/request2.txt   |    0
 .../{corpus => request_corpus}/request3.txt   |    0
 .../{corpus => request_corpus}/request4.txt   |    0
 .../{corpus => request_corpus}/request5.txt   |    0
 .../{corpus => request_corpus}/response1.txt  |    0
 .../{corpus => request_corpus}/response2.txt  |    0
 .../{corpus => request_corpus}/response3.txt  |    0
 .../{corpus => request_corpus}/response4.txt  |    0
 .../{corpus => request_corpus}/response5.txt  |    0
 .../{corpus => request_corpus}/response6.txt  |    0
 .../{corpus => request_corpus}/toolong.txt    |    0
 test/core/http/{fuzzer.c => request_fuzzer.c} |    9 +-
 .../0299ca2580e4398d170c4a336e0c33eb2cd9d427  |    2 +
 .../05e613853d64a9669ea3cf41b0de777dc24931ba  |    2 +
 .../069352518a1d1baa05f317c677d275cefda2ac97  |    2 +
 .../0925527c9358b1e10ec0f0387cd99f35204d9a34  |    2 +
 .../0c5b7c2569410b526605e308309a7f36574e530d  |    4 +
 .../0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf  |    3 +
 .../1e1273f90187fdf5df3625764245610f86af6aa4  |    3 +
 .../1fbc57d118f3733287e9a9d808bb8947b3260e55  |    3 +
 .../24756c396bc72894fd720092bb6f9c03e66b469f  |    2 +
 .../276def41311933421ae7a9ee42e906c85b6a4d3f  |    2 +
 .../29daa75432381937fd005cb25e314e328de6e9f9  |    2 +
 .../2a75204bc492084ad853682f8de3fb137d5907bc  |    2 +
 .../2d34ba249b755a880525cf53c665633a5e359305  |    2 +
 .../33f4ea0c7ea27c37d8f95cfa64d282370efdafd2  |    2 +
 .../35554617ea6418bd43161fe9a2c337ed82d7ec5b  |    4 +
 .../35f0c561297cfc840ddaeebb9fc61091f4eadece  |    2 +
 .../3787bcc22ef645e665cc5f722b8a633af86de9cf  |    9 +
 .../3953688866ccb3b4f371f1a858570d6afdb6452d  |    3 +
 .../39b19c41ba537f37511eff7727733715db432e76  |    2 +
 .../3e3c4756d5e40b5aa250954cbac86b826e70a7ac  |    3 +
 .../3f03265921120c6ffa61b944e213e062a5538d4b  |    2 +
 .../3fb034e66ee5494a67acae1b4e6ff64ba92a2046  |    2 +
 .../466059ed07a0d55d6ad5e522c7d367cbf278eaf9  |    4 +
 .../487725eb38511c79a9340bf4560a1411061fa6fa  |    2 +
 .../48b9b205cae8ac21512a3f26f49fd53e21ee13c5  |    2 +
 .../4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55  |    2 +
 .../5028c56a5116a186b7343ff59567b47347a0796d  |    3 +
 .../533f62b3f495ce704babf3ee8d840f196a714dff  |    4 +
 .../5892cbb284771fc9761caae37b19cd6e27dbc104  |    2 +
 .../5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee  |    2 +
 .../5b6292bdf009b0daecbc90b85cca30a88c36eec5  |    2 +
 .../5c1659b77678b41faa4fa13df7772dae3238d1c0  |    2 +
 .../5c81f61621e29ec9c6a64ac3af9b3b216141618e  |    2 +
 .../657368df512ca6294b9df16adf935a3f374a8be2  |    3 +
 .../7fc4520094902ce2c760d70eaad5b674d2817337  |    5 +
 .../81f59a12b458ec3604035cb962165c604d1355e6  |    2 +
 .../8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9  |    4 +
 .../97c16de7fe3c390a2e6c09ff5c28f17d5c67542c  |    2 +
 .../97e4499d450c95660de86747f527e670f2012548  |    3 +
 .../9a996857196e0998a1278994a9bab3d35526e7f1  |    2 +
 .../9b7e00049ec356ecd84b1747e4e1941140139ae8  |    3 +
 .../9f0c38ec455cc363369b3674a2d32bc21c206de1  |    5 +
 .../a1dc7bc235e46eb21d91084d7b52d5ff9f45df85  |    3 +
 .../aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441  |    2 +
 .../ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0  |   17 +
 .../b04fea5c041c707db0ad9c09a81672557b52cc47  |    2 +
 .../c4acff8aa2ff886f35439f72625d05002990c940  |    4 +
 .../c55ce9995b002e88a102ae2891a71e8bacb346c8  |    2 +
 .../ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2  |    3 +
 .../cce734f1b263de6994f7950e0df7bf0c81449f70  |    3 +
 .../d39c8ee11a697634a09b309460c0bbd967e7effa  |   17 +
 .../d4c3e4cf5d035596433c30eaabbd2b2925f4b453  |    3 +
 .../d51f7fcc089f269c7afecaaca51966bab5fde629  |    2 +
 .../d936dad71c129cf659097dc3db64550c4dd467f4  |    2 +
 .../e275b0466a8fb8d9e0e15856e343ddc7112ae66b  |    3 +
 .../e5c364b205855a2991ce07482aebb2a3a6147089  |    2 +
 .../ee2077e08c3cfccd9bd82adb574ac4fc7d429afb  |    2 +
 .../fc5d4b9117ba9e87388174aee4f4970bdfe8d066  |    1 +
 .../fdeb2c7daa9e7704f67e141106384e6dd0042c0b  |    2 +
 test/core/http/response_corpus/request1.txt   |    3 +
 test/core/http/response_corpus/request2.txt   |    3 +
 test/core/http/response_corpus/request3.txt   |    3 +
 test/core/http/response_corpus/request4.txt   |    3 +
 test/core/http/response_corpus/request5.txt   |    3 +
 test/core/http/response_corpus/response1.txt  |    4 +
 test/core/http/response_corpus/response2.txt  |    4 +
 test/core/http/response_corpus/response3.txt  |    5 +
 test/core/http/response_corpus/response4.txt  |    2 +
 test/core/http/response_corpus/response5.txt  |    5 +
 test/core/http/response_corpus/response6.txt  |    5 +
 test/core/http/response_corpus/toolong.txt    |    2 +
 test/core/http/response_fuzzer.c              |   53 +
 test/core/internal_api_canaries/iomgr.c       |   11 +-
 test/core/iomgr/endpoint_pair_test.c          |    3 +-
 test/core/iomgr/fd_posix_test.c               |   23 +-
 test/core/iomgr/resolve_address_test.c        |   99 +-
 test/core/iomgr/tcp_client_posix_test.c       |   12 +-
 test/core/iomgr/tcp_posix_test.c              |   13 +-
 test/core/iomgr/tcp_server_posix_test.c       |   41 +-
 test/core/iomgr/timer_list_test.c             |    4 +-
 test/core/iomgr/workqueue_test.c              |   11 +-
 test/core/security/credentials_test.c         |   61 +-
 test/core/security/jwt_verifier_test.c        |   62 +-
 .../print_google_default_creds_token.c        |    2 +-
 test/core/security/secure_endpoint_test.c     |    6 +-
 test/core/surface/completion_queue_test.c     |   21 +-
 .../surface/concurrent_connectivity_test.c    |    9 +-
 test/core/surface/lame_client_test.c          |    7 +-
 test/core/transport/connectivity_state_test.c |   14 +-
 test/core/util/test_tcp_server.c              |   13 +-
 ...er_test.sh => http_request_fuzzer_test.sh} |    2 +-
 .../runners/http_response_fuzzer_test.sh      |   45 +
 tools/run_tests/sources_and_headers.json      |   45 +-
 tools/run_tests/tests.json                    | 1136 -----------------
 218 files changed, 940 insertions(+), 1583 deletions(-)
 rename test/core/http/{corpus => request_corpus}/0299ca2580e4398d170c4a336e0c33eb2cd9d427 (100%)
 rename test/core/http/{corpus => request_corpus}/05e613853d64a9669ea3cf41b0de777dc24931ba (100%)
 rename test/core/http/{corpus => request_corpus}/069352518a1d1baa05f317c677d275cefda2ac97 (100%)
 rename test/core/http/{corpus => request_corpus}/0925527c9358b1e10ec0f0387cd99f35204d9a34 (100%)
 rename test/core/http/{corpus => request_corpus}/0c5b7c2569410b526605e308309a7f36574e530d (100%)
 rename test/core/http/{corpus => request_corpus}/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf (100%)
 rename test/core/http/{corpus => request_corpus}/1e1273f90187fdf5df3625764245610f86af6aa4 (100%)
 rename test/core/http/{corpus => request_corpus}/1fbc57d118f3733287e9a9d808bb8947b3260e55 (100%)
 rename test/core/http/{corpus => request_corpus}/24756c396bc72894fd720092bb6f9c03e66b469f (100%)
 rename test/core/http/{corpus => request_corpus}/276def41311933421ae7a9ee42e906c85b6a4d3f (100%)
 rename test/core/http/{corpus => request_corpus}/29daa75432381937fd005cb25e314e328de6e9f9 (100%)
 rename test/core/http/{corpus => request_corpus}/2a75204bc492084ad853682f8de3fb137d5907bc (100%)
 rename test/core/http/{corpus => request_corpus}/2d34ba249b755a880525cf53c665633a5e359305 (100%)
 rename test/core/http/{corpus => request_corpus}/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 (100%)
 rename test/core/http/{corpus => request_corpus}/35554617ea6418bd43161fe9a2c337ed82d7ec5b (100%)
 rename test/core/http/{corpus => request_corpus}/35f0c561297cfc840ddaeebb9fc61091f4eadece (100%)
 rename test/core/http/{corpus => request_corpus}/3787bcc22ef645e665cc5f722b8a633af86de9cf (100%)
 rename test/core/http/{corpus => request_corpus}/3953688866ccb3b4f371f1a858570d6afdb6452d (100%)
 rename test/core/http/{corpus => request_corpus}/39b19c41ba537f37511eff7727733715db432e76 (100%)
 rename test/core/http/{corpus => request_corpus}/3e3c4756d5e40b5aa250954cbac86b826e70a7ac (100%)
 rename test/core/http/{corpus => request_corpus}/3f03265921120c6ffa61b944e213e062a5538d4b (100%)
 rename test/core/http/{corpus => request_corpus}/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 (100%)
 rename test/core/http/{corpus => request_corpus}/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 (100%)
 rename test/core/http/{corpus => request_corpus}/487725eb38511c79a9340bf4560a1411061fa6fa (100%)
 rename test/core/http/{corpus => request_corpus}/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 (100%)
 rename test/core/http/{corpus => request_corpus}/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 (100%)
 rename test/core/http/{corpus => request_corpus}/5028c56a5116a186b7343ff59567b47347a0796d (100%)
 rename test/core/http/{corpus => request_corpus}/533f62b3f495ce704babf3ee8d840f196a714dff (100%)
 rename test/core/http/{corpus => request_corpus}/5892cbb284771fc9761caae37b19cd6e27dbc104 (100%)
 rename test/core/http/{corpus => request_corpus}/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee (100%)
 rename test/core/http/{corpus => request_corpus}/5b6292bdf009b0daecbc90b85cca30a88c36eec5 (100%)
 rename test/core/http/{corpus => request_corpus}/5c1659b77678b41faa4fa13df7772dae3238d1c0 (100%)
 rename test/core/http/{corpus => request_corpus}/5c81f61621e29ec9c6a64ac3af9b3b216141618e (100%)
 rename test/core/http/{corpus => request_corpus}/657368df512ca6294b9df16adf935a3f374a8be2 (100%)
 rename test/core/http/{corpus => request_corpus}/7fc4520094902ce2c760d70eaad5b674d2817337 (100%)
 rename test/core/http/{corpus => request_corpus}/81f59a12b458ec3604035cb962165c604d1355e6 (100%)
 rename test/core/http/{corpus => request_corpus}/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 (100%)
 rename test/core/http/{corpus => request_corpus}/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c (100%)
 rename test/core/http/{corpus => request_corpus}/97e4499d450c95660de86747f527e670f2012548 (100%)
 rename test/core/http/{corpus => request_corpus}/9a996857196e0998a1278994a9bab3d35526e7f1 (100%)
 rename test/core/http/{corpus => request_corpus}/9b7e00049ec356ecd84b1747e4e1941140139ae8 (100%)
 rename test/core/http/{corpus => request_corpus}/9f0c38ec455cc363369b3674a2d32bc21c206de1 (100%)
 rename test/core/http/{corpus => request_corpus}/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 (100%)
 rename test/core/http/{corpus => request_corpus}/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 (100%)
 rename test/core/http/{corpus => request_corpus}/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 (100%)
 rename test/core/http/{corpus => request_corpus}/b04fea5c041c707db0ad9c09a81672557b52cc47 (100%)
 rename test/core/http/{corpus => request_corpus}/c4acff8aa2ff886f35439f72625d05002990c940 (100%)
 rename test/core/http/{corpus => request_corpus}/c55ce9995b002e88a102ae2891a71e8bacb346c8 (100%)
 rename test/core/http/{corpus => request_corpus}/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 (100%)
 rename test/core/http/{corpus => request_corpus}/cce734f1b263de6994f7950e0df7bf0c81449f70 (100%)
 rename test/core/http/{corpus => request_corpus}/d39c8ee11a697634a09b309460c0bbd967e7effa (100%)
 rename test/core/http/{corpus => request_corpus}/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 (100%)
 rename test/core/http/{corpus => request_corpus}/d51f7fcc089f269c7afecaaca51966bab5fde629 (100%)
 rename test/core/http/{corpus => request_corpus}/d936dad71c129cf659097dc3db64550c4dd467f4 (100%)
 rename test/core/http/{corpus => request_corpus}/e275b0466a8fb8d9e0e15856e343ddc7112ae66b (100%)
 rename test/core/http/{corpus => request_corpus}/e5c364b205855a2991ce07482aebb2a3a6147089 (100%)
 rename test/core/http/{corpus => request_corpus}/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb (100%)
 rename test/core/http/{corpus => request_corpus}/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 (100%)
 rename test/core/http/{corpus => request_corpus}/fdeb2c7daa9e7704f67e141106384e6dd0042c0b (100%)
 rename test/core/http/{corpus => request_corpus}/request1.txt (100%)
 rename test/core/http/{corpus => request_corpus}/request2.txt (100%)
 rename test/core/http/{corpus => request_corpus}/request3.txt (100%)
 rename test/core/http/{corpus => request_corpus}/request4.txt (100%)
 rename test/core/http/{corpus => request_corpus}/request5.txt (100%)
 rename test/core/http/{corpus => request_corpus}/response1.txt (100%)
 rename test/core/http/{corpus => request_corpus}/response2.txt (100%)
 rename test/core/http/{corpus => request_corpus}/response3.txt (100%)
 rename test/core/http/{corpus => request_corpus}/response4.txt (100%)
 rename test/core/http/{corpus => request_corpus}/response5.txt (100%)
 rename test/core/http/{corpus => request_corpus}/response6.txt (100%)
 rename test/core/http/{corpus => request_corpus}/toolong.txt (100%)
 rename test/core/http/{fuzzer.c => request_fuzzer.c} (87%)
 create mode 100644 test/core/http/response_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427
 create mode 100644 test/core/http/response_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba
 create mode 100644 test/core/http/response_corpus/069352518a1d1baa05f317c677d275cefda2ac97
 create mode 100644 test/core/http/response_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34
 create mode 100644 test/core/http/response_corpus/0c5b7c2569410b526605e308309a7f36574e530d
 create mode 100644 test/core/http/response_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf
 create mode 100644 test/core/http/response_corpus/1e1273f90187fdf5df3625764245610f86af6aa4
 create mode 100644 test/core/http/response_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55
 create mode 100644 test/core/http/response_corpus/24756c396bc72894fd720092bb6f9c03e66b469f
 create mode 100644 test/core/http/response_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f
 create mode 100644 test/core/http/response_corpus/29daa75432381937fd005cb25e314e328de6e9f9
 create mode 100644 test/core/http/response_corpus/2a75204bc492084ad853682f8de3fb137d5907bc
 create mode 100644 test/core/http/response_corpus/2d34ba249b755a880525cf53c665633a5e359305
 create mode 100644 test/core/http/response_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2
 create mode 100644 test/core/http/response_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b
 create mode 100644 test/core/http/response_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece
 create mode 100644 test/core/http/response_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf
 create mode 100644 test/core/http/response_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d
 create mode 100644 test/core/http/response_corpus/39b19c41ba537f37511eff7727733715db432e76
 create mode 100644 test/core/http/response_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac
 create mode 100644 test/core/http/response_corpus/3f03265921120c6ffa61b944e213e062a5538d4b
 create mode 100644 test/core/http/response_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046
 create mode 100644 test/core/http/response_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9
 create mode 100644 test/core/http/response_corpus/487725eb38511c79a9340bf4560a1411061fa6fa
 create mode 100644 test/core/http/response_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5
 create mode 100644 test/core/http/response_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55
 create mode 100644 test/core/http/response_corpus/5028c56a5116a186b7343ff59567b47347a0796d
 create mode 100644 test/core/http/response_corpus/533f62b3f495ce704babf3ee8d840f196a714dff
 create mode 100644 test/core/http/response_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104
 create mode 100644 test/core/http/response_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee
 create mode 100644 test/core/http/response_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5
 create mode 100644 test/core/http/response_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0
 create mode 100644 test/core/http/response_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e
 create mode 100644 test/core/http/response_corpus/657368df512ca6294b9df16adf935a3f374a8be2
 create mode 100644 test/core/http/response_corpus/7fc4520094902ce2c760d70eaad5b674d2817337
 create mode 100644 test/core/http/response_corpus/81f59a12b458ec3604035cb962165c604d1355e6
 create mode 100644 test/core/http/response_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9
 create mode 100644 test/core/http/response_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c
 create mode 100644 test/core/http/response_corpus/97e4499d450c95660de86747f527e670f2012548
 create mode 100644 test/core/http/response_corpus/9a996857196e0998a1278994a9bab3d35526e7f1
 create mode 100644 test/core/http/response_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8
 create mode 100644 test/core/http/response_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1
 create mode 100644 test/core/http/response_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85
 create mode 100644 test/core/http/response_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441
 create mode 100644 test/core/http/response_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0
 create mode 100644 test/core/http/response_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47
 create mode 100644 test/core/http/response_corpus/c4acff8aa2ff886f35439f72625d05002990c940
 create mode 100644 test/core/http/response_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8
 create mode 100644 test/core/http/response_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2
 create mode 100644 test/core/http/response_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70
 create mode 100644 test/core/http/response_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa
 create mode 100644 test/core/http/response_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453
 create mode 100644 test/core/http/response_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629
 create mode 100644 test/core/http/response_corpus/d936dad71c129cf659097dc3db64550c4dd467f4
 create mode 100644 test/core/http/response_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b
 create mode 100644 test/core/http/response_corpus/e5c364b205855a2991ce07482aebb2a3a6147089
 create mode 100644 test/core/http/response_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb
 create mode 100644 test/core/http/response_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066
 create mode 100644 test/core/http/response_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b
 create mode 100644 test/core/http/response_corpus/request1.txt
 create mode 100644 test/core/http/response_corpus/request2.txt
 create mode 100644 test/core/http/response_corpus/request3.txt
 create mode 100644 test/core/http/response_corpus/request4.txt
 create mode 100644 test/core/http/response_corpus/request5.txt
 create mode 100644 test/core/http/response_corpus/response1.txt
 create mode 100644 test/core/http/response_corpus/response2.txt
 create mode 100644 test/core/http/response_corpus/response3.txt
 create mode 100644 test/core/http/response_corpus/response4.txt
 create mode 100644 test/core/http/response_corpus/response5.txt
 create mode 100644 test/core/http/response_corpus/response6.txt
 create mode 100644 test/core/http/response_corpus/toolong.txt
 create mode 100644 test/core/http/response_fuzzer.c
 rename tools/fuzzer/runners/{http_fuzzer_test.sh => http_request_fuzzer_test.sh} (95%)
 create mode 100644 tools/fuzzer/runners/http_response_fuzzer_test.sh

diff --git a/Makefile b/Makefile
index 6e1c3b6fd4..281501796a 100644
--- a/Makefile
+++ b/Makefile
@@ -941,8 +941,9 @@ grpc_verify_jwt: $(BINDIR)/$(CONFIG)/grpc_verify_jwt
 hpack_parser_fuzzer_test: $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test
 hpack_parser_test: $(BINDIR)/$(CONFIG)/hpack_parser_test
 hpack_table_test: $(BINDIR)/$(CONFIG)/hpack_table_test
-http_fuzzer_test: $(BINDIR)/$(CONFIG)/http_fuzzer_test
 http_parser_test: $(BINDIR)/$(CONFIG)/http_parser_test
+http_request_fuzzer_test: $(BINDIR)/$(CONFIG)/http_request_fuzzer_test
+http_response_fuzzer_test: $(BINDIR)/$(CONFIG)/http_response_fuzzer_test
 httpcli_format_request_test: $(BINDIR)/$(CONFIG)/httpcli_format_request_test
 httpcli_test: $(BINDIR)/$(CONFIG)/httpcli_test
 httpscli_test: $(BINDIR)/$(CONFIG)/httpscli_test
@@ -1125,7 +1126,8 @@ h2_uds_nosec_test: $(BINDIR)/$(CONFIG)/h2_uds_nosec_test
 api_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/api_fuzzer_one_entry
 client_fuzzer_one_entry: $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry
 hpack_parser_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry
-http_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry
+http_request_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry
+http_response_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry
 json_fuzzer_test_one_entry: $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry
 nanopb_fuzzer_response_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry
 nanopb_fuzzer_serverlist_test_one_entry: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry
@@ -1354,7 +1356,8 @@ buildtests_c: privatelibs_c \
   $(BINDIR)/$(CONFIG)/api_fuzzer_one_entry \
   $(BINDIR)/$(CONFIG)/client_fuzzer_one_entry \
   $(BINDIR)/$(CONFIG)/hpack_parser_fuzzer_test_one_entry \
-  $(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry \
+  $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry \
+  $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry \
   $(BINDIR)/$(CONFIG)/json_fuzzer_test_one_entry \
   $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test_one_entry \
   $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test_one_entry \
@@ -8017,66 +8020,98 @@ endif
 endif
 
 
-HTTP_FUZZER_TEST_SRC = \
-    test/core/http/fuzzer.c \
+HTTP_PARSER_TEST_SRC = \
+    test/core/http/parser_test.c \
 
-HTTP_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_FUZZER_TEST_SRC))))
+HTTP_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_PARSER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
 
 # You can't build secure targets if you don't have OpenSSL.
 
-$(BINDIR)/$(CONFIG)/http_fuzzer_test: openssl_dep_error
+$(BINDIR)/$(CONFIG)/http_parser_test: openssl_dep_error
 
 else
 
 
 
-$(BINDIR)/$(CONFIG)/http_fuzzer_test: $(HTTP_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/http_parser_test: $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LDXX) $(LDFLAGS) $(HTTP_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_fuzzer_test
+	$(Q) $(LD) $(LDFLAGS) $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/http_parser_test
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/http/fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/http/parser_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
-deps_http_fuzzer_test: $(HTTP_FUZZER_TEST_OBJS:.o=.dep)
+deps_http_parser_test: $(HTTP_PARSER_TEST_OBJS:.o=.dep)
 
 ifneq ($(NO_SECURE),true)
 ifneq ($(NO_DEPS),true)
--include $(HTTP_FUZZER_TEST_OBJS:.o=.dep)
+-include $(HTTP_PARSER_TEST_OBJS:.o=.dep)
 endif
 endif
 
 
-HTTP_PARSER_TEST_SRC = \
-    test/core/http/parser_test.c \
+HTTP_REQUEST_FUZZER_TEST_SRC = \
+    test/core/http/request_fuzzer.c \
 
-HTTP_PARSER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_PARSER_TEST_SRC))))
+HTTP_REQUEST_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_REQUEST_FUZZER_TEST_SRC))))
 ifeq ($(NO_SECURE),true)
 
 # You can't build secure targets if you don't have OpenSSL.
 
-$(BINDIR)/$(CONFIG)/http_parser_test: openssl_dep_error
+$(BINDIR)/$(CONFIG)/http_request_fuzzer_test: openssl_dep_error
 
 else
 
 
 
-$(BINDIR)/$(CONFIG)/http_parser_test: $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/http_request_fuzzer_test: $(HTTP_REQUEST_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) $(HTTP_PARSER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/http_parser_test
+	$(Q) $(LDXX) $(LDFLAGS) $(HTTP_REQUEST_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_request_fuzzer_test
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/http/parser_test.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/http/request_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
-deps_http_parser_test: $(HTTP_PARSER_TEST_OBJS:.o=.dep)
+deps_http_request_fuzzer_test: $(HTTP_REQUEST_FUZZER_TEST_OBJS:.o=.dep)
 
 ifneq ($(NO_SECURE),true)
 ifneq ($(NO_DEPS),true)
--include $(HTTP_PARSER_TEST_OBJS:.o=.dep)
+-include $(HTTP_REQUEST_FUZZER_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
+HTTP_RESPONSE_FUZZER_TEST_SRC = \
+    test/core/http/response_fuzzer.c \
+
+HTTP_RESPONSE_FUZZER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_RESPONSE_FUZZER_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/http_response_fuzzer_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/http_response_fuzzer_test: $(HTTP_RESPONSE_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LDXX) $(LDFLAGS) $(HTTP_RESPONSE_FUZZER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -lFuzzer -o $(BINDIR)/$(CONFIG)/http_response_fuzzer_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/http/response_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_http_response_fuzzer_test: $(HTTP_RESPONSE_FUZZER_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(HTTP_RESPONSE_FUZZER_TEST_OBJS:.o=.dep)
 endif
 endif
 
@@ -14108,37 +14143,72 @@ endif
 endif
 
 
-HTTP_FUZZER_TEST_ONE_ENTRY_SRC = \
-    test/core/http/fuzzer.c \
+HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_SRC = \
+    test/core/http/request_fuzzer.c \
+    test/core/util/one_corpus_entry_fuzzer.c \
+
+HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry: $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LD) $(LDFLAGS) $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/http_request_fuzzer_test_one_entry
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/http/request_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+$(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_http_request_fuzzer_test_one_entry: $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(HTTP_REQUEST_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep)
+endif
+endif
+
+
+HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_SRC = \
+    test/core/http/response_fuzzer.c \
     test/core/util/one_corpus_entry_fuzzer.c \
 
-HTTP_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_FUZZER_TEST_ONE_ENTRY_SRC))))
+HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_SRC))))
 ifeq ($(NO_SECURE),true)
 
 # You can't build secure targets if you don't have OpenSSL.
 
-$(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry: openssl_dep_error
+$(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry: openssl_dep_error
 
 else
 
 
 
-$(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry: $(HTTP_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry: $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) $(HTTP_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/http_fuzzer_test_one_entry
+	$(Q) $(LD) $(LDFLAGS) $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/http_response_fuzzer_test_one_entry
 
 endif
 
-$(OBJDIR)/$(CONFIG)/test/core/http/fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/core/http/response_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
 $(OBJDIR)/$(CONFIG)/test/core/util/one_corpus_entry_fuzzer.o:  $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
 
-deps_http_fuzzer_test_one_entry: $(HTTP_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep)
+deps_http_response_fuzzer_test_one_entry: $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep)
 
 ifneq ($(NO_SECURE),true)
 ifneq ($(NO_DEPS),true)
--include $(HTTP_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep)
+-include $(HTTP_RESPONSE_FUZZER_TEST_ONE_ENTRY_OBJS:.o=.dep)
 endif
 endif
 
diff --git a/build.yaml b/build.yaml
index 78c1aaf704..611fce261f 100644
--- a/build.yaml
+++ b/build.yaml
@@ -1751,11 +1751,21 @@ targets:
   - grpc
   - gpr_test_util
   - gpr
-- name: http_fuzzer_test
+- name: http_parser_test
+  build: test
+  language: c
+  src:
+  - test/core/http/parser_test.c
+  deps:
+  - grpc_test_util
+  - grpc
+  - gpr_test_util
+  - gpr
+- name: http_request_fuzzer_test
   build: fuzzer
   language: c
   src:
-  - test/core/http/fuzzer.c
+  - test/core/http/request_fuzzer.c
   deps:
   - grpc_test_util
   - grpc
@@ -1764,16 +1774,19 @@ targets:
   corpus_dirs:
   - test/core/http/corpus
   maxlen: 2048
-- name: http_parser_test
-  build: test
+- name: http_response_fuzzer_test
+  build: fuzzer
   language: c
   src:
-  - test/core/http/parser_test.c
+  - test/core/http/response_fuzzer.c
   deps:
   - grpc_test_util
   - grpc
   - gpr_test_util
   - gpr
+  corpus_dirs:
+  - test/core/http/corpus
+  maxlen: 2048
 - name: httpcli_format_request_test
   build: test
   language: c
diff --git a/src/core/ext/client_config/channel_connectivity.c b/src/core/ext/client_config/channel_connectivity.c
index 1898bf6279..9bbb09fa39 100644
--- a/src/core/ext/client_config/channel_connectivity.c
+++ b/src/core/ext/client_config/channel_connectivity.c
@@ -131,13 +131,13 @@ static void partly_done(grpc_exec_ctx *exec_ctx, state_watcher *w,
 
   gpr_mu_lock(&w->mu);
   if (due_to_completion) {
-    grpc_error_unref(w->error);
+    GRPC_ERROR_UNREF(w->error);
     w->error = GRPC_ERROR_NONE;
   }
   switch (w->phase) {
     case WAITING:
       w->phase = CALLING_BACK;
-      grpc_cq_end_op(exec_ctx, w->cq, w->tag, grpc_error_ref(w->error),
+      grpc_cq_end_op(exec_ctx, w->cq, w->tag, GRPC_ERROR_REF(w->error),
                      finished_completion, w, &w->completion_storage);
       break;
     case CALLING_BACK:
diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_config/client_channel.c
index be9e962bcd..801cbe0702 100644
--- a/src/core/ext/client_config/client_channel.c
+++ b/src/core/ext/client_config/client_channel.c
@@ -193,7 +193,7 @@ static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg,
     if (lb_policy != NULL) {
       GRPC_LB_POLICY_REF(lb_policy, "channel");
       GRPC_LB_POLICY_REF(lb_policy, "config_change");
-      grpc_error_unref(state_error);
+      GRPC_ERROR_UNREF(state_error);
       state =
           grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error);
     }
@@ -308,7 +308,7 @@ static void cc_start_transport_op(grpc_exec_ctx *exec_ctx,
   if (op->disconnect_with_error != GRPC_ERROR_NONE && chand->resolver != NULL) {
     set_channel_connectivity_state_locked(
         exec_ctx, chand, GRPC_CHANNEL_FATAL_FAILURE,
-        grpc_error_ref(op->disconnect_with_error), "disconnect");
+        GRPC_ERROR_REF(op->disconnect_with_error), "disconnect");
     grpc_resolver_shutdown(exec_ctx, chand->resolver);
     GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
     chand->resolver = NULL;
@@ -350,7 +350,7 @@ static void continue_picking(grpc_exec_ctx *exec_ctx, void *arg,
   if (cpa->connected_subchannel == NULL) {
     /* cancelled, do nothing */
   } else if (error != GRPC_ERROR_NONE) {
-    grpc_exec_ctx_push(exec_ctx, cpa->on_ready, grpc_error_ref(error), NULL);
+    grpc_exec_ctx_push(exec_ctx, cpa->on_ready, GRPC_ERROR_REF(error), NULL);
   } else if (cc_pick_subchannel(exec_ctx, cpa->elem, cpa->initial_metadata,
                                 cpa->initial_metadata_flags,
                                 cpa->connected_subchannel, cpa->on_ready)) {
diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c
index 2c7b227cb8..0f58dabb1e 100644
--- a/src/core/ext/client_config/subchannel.c
+++ b/src/core/ext/client_config/subchannel.c
@@ -602,7 +602,7 @@ static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
   if (c->disconnected) {
     error = GRPC_ERROR_CREATE_REFERENCING("Disconnected", &error, 1);
   } else {
-    grpc_error_ref(error);
+    GRPC_ERROR_REF(error);
   }
   if (error != GRPC_ERROR_NONE) {
     c->next_attempt =
diff --git a/src/core/ext/client_config/subchannel_call_holder.c b/src/core/ext/client_config/subchannel_call_holder.c
index 3b10aa4474..b65127b627 100644
--- a/src/core/ext/client_config/subchannel_call_holder.c
+++ b/src/core/ext/client_config/subchannel_call_holder.c
@@ -255,10 +255,10 @@ static void fail_locked(grpc_exec_ctx *exec_ctx,
   size_t i;
   for (i = 0; i < holder->waiting_ops_count; i++) {
     grpc_transport_stream_op_finish_with_failure(
-        exec_ctx, &holder->waiting_ops[i], grpc_error_ref(error));
+        exec_ctx, &holder->waiting_ops[i], GRPC_ERROR_REF(error));
   }
   holder->waiting_ops_count = 0;
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 char *grpc_subchannel_call_holder_get_peer(
diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c
index 48e6246781..bc52e2804f 100644
--- a/src/core/ext/lb_policy/pick_first/pick_first.c
+++ b/src/core/ext/lb_policy/pick_first/pick_first.c
@@ -265,7 +265,7 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
   pending_pick *pp;
   grpc_connected_subchannel *selected;
 
-  grpc_error_ref(error);
+  GRPC_ERROR_REF(error);
 
   gpr_mu_lock(&p->mu);
 
@@ -281,7 +281,7 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
       p->checking_connectivity = GRPC_CHANNEL_FATAL_FAILURE;
     }
     grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
-                                p->checking_connectivity, grpc_error_ref(error),
+                                p->checking_connectivity, GRPC_ERROR_REF(error),
                                 "selected_changed");
     if (p->checking_connectivity != GRPC_CHANNEL_FATAL_FAILURE) {
       grpc_connected_subchannel_notify_on_state_change(
@@ -328,9 +328,9 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
           /* only trigger transient failure when we've tried all alternatives */
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-              grpc_error_ref(error), "connecting_transient_failure");
+              GRPC_ERROR_REF(error), "connecting_transient_failure");
         }
-        grpc_error_unref(error);
+        GRPC_ERROR_UNREF(error);
         p->checking_connectivity = grpc_subchannel_check_connectivity(
             p->subchannels[p->checking_subchannel], &error);
         if (p->checking_connectivity == GRPC_CHANNEL_TRANSIENT_FAILURE) {
@@ -346,7 +346,7 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
       case GRPC_CHANNEL_IDLE:
         grpc_connectivity_state_set(
             exec_ctx, &p->state_tracker, GRPC_CHANNEL_CONNECTING,
-            grpc_error_ref(error), "connecting_changed");
+            GRPC_ERROR_REF(error), "connecting_changed");
         grpc_subchannel_notify_on_state_change(
             exec_ctx, p->subchannels[p->checking_subchannel],
             p->base.interested_parties, &p->checking_connectivity,
@@ -359,7 +359,7 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
         GRPC_SUBCHANNEL_UNREF(exec_ctx, p->subchannels[p->num_subchannels],
                               "pick_first");
         if (p->num_subchannels == 0) {
-          grpc_error_ref(error);
+          GRPC_ERROR_REF(error);
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_FATAL_FAILURE,
               GRPC_ERROR_CREATE_REFERENCING("Pick first exhausted channels",
@@ -377,9 +377,9 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
         } else {
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-              grpc_error_ref(error), "subchannel_failed");
+              GRPC_ERROR_REF(error), "subchannel_failed");
           p->checking_subchannel %= p->num_subchannels;
-          grpc_error_unref(error);
+          GRPC_ERROR_UNREF(error);
           p->checking_connectivity = grpc_subchannel_check_connectivity(
               p->subchannels[p->checking_subchannel], &error);
           goto loop;
@@ -389,7 +389,7 @@ static void pf_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
 
   gpr_mu_unlock(&p->mu);
 
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 static grpc_connectivity_state pf_check_connectivity(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c
index c119a25772..ada2ef9b7c 100644
--- a/src/core/ext/lb_policy/round_robin/round_robin.c
+++ b/src/core/ext/lb_policy/round_robin/round_robin.c
@@ -376,7 +376,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
 
   int unref = 0;
 
-  grpc_error_ref(error);
+  GRPC_ERROR_REF(error);
   gpr_mu_lock(&p->mu);
 
   if (p->shutdown) {
@@ -385,7 +385,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
     switch (sd->connectivity_state) {
       case GRPC_CHANNEL_READY:
         grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
-                                    GRPC_CHANNEL_READY, grpc_error_ref(error),
+                                    GRPC_CHANNEL_READY, GRPC_ERROR_REF(error),
                                     "connecting_ready");
         /* add the newly connected subchannel to the list of connected ones.
          * Note that it goes to the "end of the line". */
@@ -421,7 +421,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
       case GRPC_CHANNEL_IDLE:
         grpc_connectivity_state_set(
             exec_ctx, &p->state_tracker, sd->connectivity_state,
-            grpc_error_ref(error), "connecting_changed");
+            GRPC_ERROR_REF(error), "connecting_changed");
         grpc_subchannel_notify_on_state_change(
             exec_ctx, sd->subchannel, p->base.interested_parties,
             &sd->connectivity_state, &sd->connectivity_changed_closure);
@@ -439,7 +439,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
         }
         grpc_connectivity_state_set(
             exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-            grpc_error_ref(error), "connecting_transient_failure");
+            GRPC_ERROR_REF(error), "connecting_transient_failure");
         break;
       case GRPC_CHANNEL_FATAL_FAILURE:
         if (sd->ready_list_node != NULL) {
@@ -456,7 +456,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
 
         unref = 1;
         if (p->num_subchannels == 0) {
-          grpc_error_ref(error);
+          GRPC_ERROR_REF(error);
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_FATAL_FAILURE,
               GRPC_ERROR_CREATE_REFERENCING("Round Robin Channels Exhausted",
@@ -472,7 +472,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
         } else {
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-              grpc_error_ref(error), "subchannel_failed");
+              GRPC_ERROR_REF(error), "subchannel_failed");
         }
     } /* switch */
   }   /* !unref */
@@ -483,7 +483,7 @@ static void rr_connectivity_changed(grpc_exec_ctx *exec_ctx, void *arg,
     GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "round_robin_connectivity");
   }
 
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 static grpc_connectivity_state rr_check_connectivity(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
index ef860b4223..a4d8880f61 100644
--- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
@@ -139,7 +139,7 @@ int grpc_server_add_insecure_http2_port(grpc_server *server, const char *addr) {
     /* we managed to bind some addresses: continue */
   } else {
     for (i = 0; i < resolved->naddrs; i++) {
-      grpc_error_unref(errors[i]);
+      GRPC_ERROR_UNREF(errors[i]);
     }
   }
   gpr_free(errors);
diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
index 0702fe9118..8cee95aa93 100644
--- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
@@ -145,7 +145,7 @@ static void destroy_done(grpc_exec_ctx *exec_ctx, void *statep,
   grpc_server_secure_state *state = statep;
   if (state->destroy_callback != NULL) {
     state->destroy_callback->cb(exec_ctx, state->destroy_callback->cb_arg,
-                                grpc_error_ref(error));
+                                GRPC_ERROR_REF(error));
   }
   grpc_server_security_connector_shutdown(exec_ctx, state->sc);
   state_unref(state);
@@ -249,7 +249,7 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr,
     /* we managed to bind some addresses: continue */
   } else {
     for (i = 0; i < resolved->naddrs; i++) {
-      grpc_error_unref(errors[i]);
+      GRPC_ERROR_UNREF(errors[i]);
     }
   }
   gpr_free(errors);
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 14d1c26c3a..dfee1e0b6c 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -741,7 +741,7 @@ static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx,
   allow_endpoint_shutdown_locked(exec_ctx, t);
 
   if (error != GRPC_ERROR_NONE) {
-    drop_connection(exec_ctx, t, grpc_error_ref(error));
+    drop_connection(exec_ctx, t, GRPC_ERROR_REF(error));
   }
 
   grpc_chttp2_cleanup_writing(exec_ctx, &t->global, &t->writing);
@@ -749,7 +749,7 @@ static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx,
   grpc_chttp2_stream_global *stream_global;
   while (grpc_chttp2_list_pop_closed_waiting_for_writing(&t->global,
                                                          &stream_global)) {
-    fail_pending_writes(exec_ctx, stream_global, grpc_error_ref(error));
+    fail_pending_writes(exec_ctx, stream_global, GRPC_ERROR_REF(error));
     GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "finish_writes");
   }
 
@@ -1325,10 +1325,10 @@ static void fail_pending_writes(grpc_exec_ctx *exec_ctx,
                                 grpc_error *error) {
   grpc_chttp2_complete_closure_step(
       exec_ctx, stream_global, &stream_global->send_initial_metadata_finished,
-      grpc_error_ref(error));
+      GRPC_ERROR_REF(error));
   grpc_chttp2_complete_closure_step(
       exec_ctx, stream_global, &stream_global->send_trailing_metadata_finished,
-      grpc_error_ref(error));
+      GRPC_ERROR_REF(error));
   grpc_chttp2_complete_closure_step(
       exec_ctx, stream_global, &stream_global->send_message_finished, error);
 }
@@ -1339,7 +1339,7 @@ void grpc_chttp2_mark_stream_closed(
     grpc_error *error) {
   if (stream_global->read_closed && stream_global->write_closed) {
     /* already closed */
-    grpc_error_unref(error);
+    GRPC_ERROR_UNREF(error);
     return;
   }
   grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
@@ -1356,7 +1356,7 @@ void grpc_chttp2_mark_stream_closed(
       grpc_chttp2_list_add_closed_waiting_for_writing(transport_global,
                                                       stream_global);
     } else {
-      fail_pending_writes(exec_ctx, stream_global, grpc_error_ref(error));
+      fail_pending_writes(exec_ctx, stream_global, GRPC_ERROR_REF(error));
     }
   }
   if (stream_global->read_closed && stream_global->write_closed) {
@@ -1372,7 +1372,7 @@ void grpc_chttp2_mark_stream_closed(
       GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2");
     }
   }
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 static void close_from_api(grpc_exec_ctx *exec_ctx,
@@ -1788,7 +1788,7 @@ static void incoming_byte_stream_next_locked(grpc_exec_ctx *exec_ctx,
     *arg->slice = gpr_slice_buffer_take_first(&bs->slices);
     grpc_exec_ctx_push(exec_ctx, arg->on_complete, GRPC_ERROR_NONE, NULL);
   } else if (bs->error != GRPC_ERROR_NONE) {
-    grpc_exec_ctx_push(exec_ctx, arg->on_complete, grpc_error_ref(bs->error),
+    grpc_exec_ctx_push(exec_ctx, arg->on_complete, GRPC_ERROR_REF(bs->error),
                        NULL);
   } else {
     bs->on_next = arg->on_complete;
@@ -1869,7 +1869,7 @@ static void incoming_byte_stream_finished_failed_locked(
     void *argp) {
   grpc_chttp2_incoming_byte_stream *bs = argp;
   grpc_error *error = argp;
-  grpc_exec_ctx_push(exec_ctx, bs->on_next, grpc_error_ref(error), NULL);
+  grpc_exec_ctx_push(exec_ctx, bs->on_next, GRPC_ERROR_REF(error), NULL);
   bs->on_next = NULL;
   bs->error = error;
   incoming_byte_stream_unref(exec_ctx, bs);
diff --git a/src/core/ext/transport/chttp2/transport/frame_data.c b/src/core/ext/transport/chttp2/transport/frame_data.c
index 828d0427ac..952a1cc87c 100644
--- a/src/core/ext/transport/chttp2/transport/frame_data.c
+++ b/src/core/ext/transport/chttp2/transport/frame_data.c
@@ -167,7 +167,7 @@ grpc_error *grpc_chttp2_data_parser_parse(
   switch (p->state) {
     case GRPC_CHTTP2_DATA_ERROR:
       p->state = GRPC_CHTTP2_DATA_ERROR;
-      return grpc_error_ref(p->error);
+      return GRPC_ERROR_REF(p->error);
     fh_0:
     case GRPC_CHTTP2_DATA_FH_0:
       stream_parsing->stats.incoming.framing_bytes++;
@@ -192,7 +192,7 @@ grpc_error *grpc_chttp2_data_parser_parse(
           p->error =
               grpc_error_set_int(p->error, GRPC_ERROR_INT_OFFSET, cur - beg);
           p->state = GRPC_CHTTP2_DATA_ERROR;
-          return grpc_error_ref(p->error);
+          return GRPC_ERROR_REF(p->error);
       }
       if (++cur == end) {
         p->state = GRPC_CHTTP2_DATA_FH_1;
diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.c b/src/core/ext/transport/chttp2/transport/hpack_parser.c
index 0e337a655e..609414b919 100644
--- a/src/core/ext/transport/chttp2/transport/hpack_parser.c
+++ b/src/core/ext/transport/chttp2/transport/hpack_parser.c
@@ -1004,14 +1004,14 @@ static grpc_error *parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
 static grpc_error *parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                const uint8_t *end, grpc_error *err) {
   GPR_ASSERT(err != GRPC_ERROR_NONE);
-  p->last_error = grpc_error_ref(err);
+  p->last_error = GRPC_ERROR_REF(err);
   p->state = still_parse_error;
   return err;
 }
 
 static grpc_error *still_parse_error(grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end) {
-  return grpc_error_ref(p->last_error);
+  return GRPC_ERROR_REF(p->last_error);
 }
 
 static grpc_error *parse_illegal_op(grpc_chttp2_hpack_parser *p,
diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c
index 67590aeb16..24b7de0f79 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.c
+++ b/src/core/ext/transport/chttp2/transport/parsing.c
@@ -922,7 +922,7 @@ static grpc_error *parse_frame_slice(
                                         GRPC_CHTTP2_PROTOCOL_ERROR,
                                         &stream_parsing->stats.outgoing));
     } else {
-      grpc_error_unref(err);
+      GRPC_ERROR_UNREF(err);
     }
   }
   return err;
diff --git a/src/core/lib/iomgr/closure.c b/src/core/lib/iomgr/closure.c
index 0e84d13c45..866110d89c 100644
--- a/src/core/lib/iomgr/closure.c
+++ b/src/core/lib/iomgr/closure.c
@@ -58,10 +58,10 @@ void grpc_closure_list_fail_all(grpc_closure_list *list,
                                 grpc_error *forced_failure) {
   for (grpc_closure *c = list->head; c != NULL; c = c->next_data.next) {
     if (c->error == GRPC_ERROR_NONE) {
-      c->error = grpc_error_ref(forced_failure);
+      c->error = GRPC_ERROR_REF(forced_failure);
     }
   }
-  grpc_error_unref(forced_failure);
+  GRPC_ERROR_UNREF(forced_failure);
 }
 
 bool grpc_closure_list_empty(grpc_closure_list closure_list) {
diff --git a/src/core/lib/iomgr/error.c b/src/core/lib/iomgr/error.c
index fb8decb8d3..a55f02d8f6 100644
--- a/src/core/lib/iomgr/error.c
+++ b/src/core/lib/iomgr/error.c
@@ -54,9 +54,9 @@ static void destroy_string(void *str) { gpr_free(str); }
 
 static void *copy_string(void *str) { return gpr_strdup(str); }
 
-static void destroy_err(void *err) { grpc_error_unref(err); }
+static void destroy_err(void *err) { GRPC_ERROR_UNREF(err); }
 
-static void *copy_err(void *err) { return grpc_error_ref(err); }
+static void *copy_err(void *err) { return GRPC_ERROR_REF(err); }
 
 static void destroy_time(void *tm) { gpr_free(tm); }
 
@@ -156,8 +156,9 @@ static bool is_special(grpc_error *err) {
          err == GRPC_ERROR_CANCELLED;
 }
 
-grpc_error *grpc_error_ref(grpc_error *err) {
+grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line) {
   if (is_special(err)) return err;
+  gpr_log(GPR_DEBUG, "%p: %d -> %d [%s:%d]", err, err->refs.count, err->refs.count + 1, file, line);
   gpr_ref(&err->refs);
   return err;
 }
@@ -168,10 +169,13 @@ static void error_destroy(grpc_error *err) {
   gpr_avl_unref(err->strs);
   gpr_avl_unref(err->errs);
   gpr_avl_unref(err->times);
+  gpr_free(err);
 }
 
-void grpc_error_unref(grpc_error *err) {
-  if (!is_special(err) && gpr_unref(&err->refs)) {
+void grpc_error_unref(grpc_error *err, const char *file, int line) {
+  if (is_special(err)) return;
+  gpr_log(GPR_DEBUG, "%p: %d -> %d [%s:%d]", err, err->refs.count, err->refs.count - 1, file, line);
+  if (gpr_unref(&err->refs)) {
     error_destroy(err);
   }
 }
@@ -188,13 +192,13 @@ grpc_error *grpc_error_create(const char *file, int line, const char *desc,
                           (void *)(uintptr_t)line);
   err->strs = gpr_avl_add(
       gpr_avl_add(gpr_avl_create(&avl_vtable_strs),
-                  (void *)(uintptr_t)GRPC_ERROR_STR_FILE, (void *)file),
-      (void *)(uintptr_t)GRPC_ERROR_STR_DESCRIPTION, (void *)desc);
+                  (void *)(uintptr_t)GRPC_ERROR_STR_FILE, gpr_strdup(file)),
+      (void *)(uintptr_t)GRPC_ERROR_STR_DESCRIPTION, gpr_strdup(desc));
   err->errs = gpr_avl_create(&avl_vtable_errs);
   for (size_t i = 0; i < num_referencing; i++) {
     if (referencing[i] == GRPC_ERROR_NONE) continue;
     err->errs =
-        gpr_avl_add(err->errs, (void *)(err->next_err++), referencing[i]);
+        gpr_avl_add(err->errs, (void *)(err->next_err++), GRPC_ERROR_REF(referencing[i]));
   }
   err->times = gpr_avl_add(gpr_avl_create(&avl_vtable_times),
                            (void *)(uintptr_t)GRPC_ERROR_TIME_CREATED,
@@ -218,7 +222,7 @@ static grpc_error *copy_error_and_unref(grpc_error *in) {
   out->times = gpr_avl_ref(in->times);
   out->next_err = in->next_err;
   gpr_ref_init(&out->refs, 1);
-  grpc_error_unref(in);
+  GRPC_ERROR_UNREF(in);
   return out;
 }
 
diff --git a/src/core/lib/iomgr/error.h b/src/core/lib/iomgr/error.h
index 143c8beffc..9e10d0b843 100644
--- a/src/core/lib/iomgr/error.h
+++ b/src/core/lib/iomgr/error.h
@@ -83,8 +83,12 @@ grpc_error *grpc_error_create(const char *file, int line, const char *desc,
   grpc_error_create(__FILE__, __LINE__, desc, NULL, 0)
 #define GRPC_ERROR_CREATE_REFERENCING(desc, errs, count) \
   grpc_error_create(__FILE__, __LINE__, desc, errs, count)
-grpc_error *grpc_error_ref(grpc_error *err);
-void grpc_error_unref(grpc_error *err);
+
+grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line);
+void grpc_error_unref(grpc_error *err, const char *file, int line);
+#define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__)
+#define GRPC_ERROR_UNREF(err) grpc_error_unref(err, __FILE__, __LINE__)
+
 grpc_error *grpc_error_set_int(grpc_error *src, grpc_error_ints which,
                                intptr_t value);
 const intptr_t *grpc_error_get_int(grpc_error *error, grpc_error_ints which);
diff --git a/src/core/lib/iomgr/exec_ctx.c b/src/core/lib/iomgr/exec_ctx.c
index cc52c16bce..3155ed066a 100644
--- a/src/core/lib/iomgr/exec_ctx.c
+++ b/src/core/lib/iomgr/exec_ctx.c
@@ -52,7 +52,7 @@ bool grpc_exec_ctx_flush(grpc_exec_ctx *exec_ctx) {
       did_something = true;
       GPR_TIMER_BEGIN("grpc_exec_ctx_flush.cb", 0);
       c->cb(exec_ctx, c->cb_arg, error);
-      grpc_error_unref(error);
+      GRPC_ERROR_UNREF(error);
       GPR_TIMER_END("grpc_exec_ctx_flush.cb", 0);
       c = next;
     }
diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c
index a46cd6f0f6..17e5e1bbfa 100644
--- a/src/core/lib/iomgr/tcp_server_posix.c
+++ b/src/core/lib/iomgr/tcp_server_posix.c
@@ -516,8 +516,8 @@ done:
   gpr_free(allocated_addr);
   if (sp != NULL) {
     *out_port = sp->port;
-    grpc_error_unref(errs[0]);
-    grpc_error_unref(errs[1]);
+    GRPC_ERROR_UNREF(errs[0]);
+    GRPC_ERROR_UNREF(errs[1]);
     return GRPC_ERROR_NONE;
   } else {
     *out_port = -1;
diff --git a/src/core/lib/iomgr/timer.c b/src/core/lib/iomgr/timer.c
index d785d1543f..bd8769b11b 100644
--- a/src/core/lib/iomgr/timer.c
+++ b/src/core/lib/iomgr/timer.c
@@ -307,7 +307,7 @@ static size_t pop_timers(grpc_exec_ctx *exec_ctx, shard_type *shard,
   grpc_timer *timer;
   gpr_mu_lock(&shard->mu);
   while ((timer = pop_one(shard, now))) {
-    grpc_exec_ctx_push(exec_ctx, &timer->closure, grpc_error_ref(error), NULL);
+    grpc_exec_ctx_push(exec_ctx, &timer->closure, GRPC_ERROR_REF(error), NULL);
     n++;
   }
   *new_min_deadline = compute_min_deadline(shard);
@@ -362,7 +362,7 @@ static int run_some_expired_timers(grpc_exec_ctx *exec_ctx, gpr_timespec now,
         *next, gpr_time_add(now, gpr_time_from_millis(1, GPR_TIMESPAN)));
   }
 
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 
   return (int)n;
 }
diff --git a/src/core/lib/security/credentials/composite/composite_credentials.c b/src/core/lib/security/credentials/composite/composite_credentials.c
index 4a17f7c1b9..18189a8fb8 100644
--- a/src/core/lib/security/credentials/composite/composite_credentials.c
+++ b/src/core/lib/security/credentials/composite/composite_credentials.c
@@ -260,4 +260,3 @@ grpc_channel_credentials *grpc_composite_channel_credentials_create(
   c->call_creds = grpc_call_credentials_ref(call_creds);
   return &c->base;
 }
-
diff --git a/src/core/lib/security/credentials/composite/composite_credentials.h b/src/core/lib/security/credentials/composite/composite_credentials.h
index c83f74429f..3e360c177f 100644
--- a/src/core/lib/security/credentials/composite/composite_credentials.h
+++ b/src/core/lib/security/credentials/composite/composite_credentials.h
@@ -69,4 +69,3 @@ typedef struct {
 } grpc_composite_call_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_COMPOSITE_CREDENTIALS_H
-
diff --git a/src/core/lib/security/credentials/credentials.c b/src/core/lib/security/credentials/credentials.c
index 29cf9ee884..3dde6e587d 100644
--- a/src/core/lib/security/credentials/credentials.c
+++ b/src/core/lib/security/credentials/credentials.c
@@ -53,10 +53,9 @@
 
 /* -- Common. -- */
 
-grpc_credentials_metadata_request *
-grpc_credentials_metadata_request_create(grpc_call_credentials *creds,
-                                         grpc_credentials_metadata_cb cb,
-                                         void *user_data) {
+grpc_credentials_metadata_request *grpc_credentials_metadata_request_create(
+    grpc_call_credentials *creds, grpc_credentials_metadata_cb cb,
+    void *user_data) {
   grpc_credentials_metadata_request *r =
       gpr_malloc(sizeof(grpc_credentials_metadata_request));
   r->creds = grpc_call_credentials_ref(creds);
@@ -230,4 +229,3 @@ grpc_server_credentials *grpc_find_server_credentials_in_args(
   }
   return NULL;
 }
-
diff --git a/src/core/lib/security/credentials/fake/fake_credentials.h b/src/core/lib/security/credentials/fake/fake_credentials.h
index 10c2a0b5ce..e2403b5d80 100644
--- a/src/core/lib/security/credentials/fake/fake_credentials.h
+++ b/src/core/lib/security/credentials/fake/fake_credentials.h
@@ -53,4 +53,3 @@ typedef struct {
 } grpc_md_only_test_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_FAKE_CREDENTIALS_H
-
diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.h b/src/core/lib/security/credentials/google_default/google_default_credentials.h
index 33e8c2ec8d..838989f6f0 100644
--- a/src/core/lib/security/credentials/google_default/google_default_credentials.h
+++ b/src/core/lib/security/credentials/google_default/google_default_credentials.h
@@ -43,5 +43,3 @@
 void grpc_flush_cached_google_default_credentials(void);
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_CREDENTIALS_H
-
-
diff --git a/src/core/lib/security/credentials/iam/iam_credentials.c b/src/core/lib/security/credentials/iam/iam_credentials.c
index ec0f2841f2..89defa7c60 100644
--- a/src/core/lib/security/credentials/iam/iam_credentials.c
+++ b/src/core/lib/security/credentials/iam/iam_credentials.c
@@ -83,5 +83,3 @@ grpc_call_credentials *grpc_google_iam_credentials_create(
       c->iam_md, GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY, authority_selector);
   return &c->base;
 }
-
-
diff --git a/src/core/lib/security/credentials/iam/iam_credentials.h b/src/core/lib/security/credentials/iam/iam_credentials.h
index 7110eaf478..06b4db8bef 100644
--- a/src/core/lib/security/credentials/iam/iam_credentials.h
+++ b/src/core/lib/security/credentials/iam/iam_credentials.h
@@ -42,6 +42,3 @@ typedef struct {
 } grpc_google_iam_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_IAM_CREDENTIALS_H
-
-
-
diff --git a/src/core/lib/security/credentials/jwt/json_token.c b/src/core/lib/security/credentials/jwt/json_token.c
index fd3d0d6a64..354c13133e 100644
--- a/src/core/lib/security/credentials/jwt/json_token.c
+++ b/src/core/lib/security/credentials/jwt/json_token.c
@@ -318,4 +318,3 @@ void grpc_jwt_encode_and_sign_set_override(
     grpc_jwt_encode_and_sign_override func) {
   g_jwt_encode_and_sign_override = func;
 }
-
diff --git a/src/core/lib/security/credentials/jwt/jwt_credentials.c b/src/core/lib/security/credentials/jwt/jwt_credentials.c
index 9fd0527a52..8755a96af4 100644
--- a/src/core/lib/security/credentials/jwt/jwt_credentials.c
+++ b/src/core/lib/security/credentials/jwt/jwt_credentials.c
@@ -158,4 +158,3 @@ grpc_call_credentials *grpc_service_account_jwt_access_credentials_create(
   return grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
       grpc_auth_json_key_create_from_string(json_key), token_lifetime);
 }
-
diff --git a/src/core/lib/security/credentials/jwt/jwt_credentials.h b/src/core/lib/security/credentials/jwt/jwt_credentials.h
index 6faf676414..6fba3dfcfd 100644
--- a/src/core/lib/security/credentials/jwt/jwt_credentials.h
+++ b/src/core/lib/security/credentials/jwt/jwt_credentials.h
@@ -60,4 +60,3 @@ grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
     grpc_auth_json_key key, gpr_timespec token_lifetime);
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_JWT_CREDENTIALS_H
-
diff --git a/src/core/lib/security/credentials/plugin/plugin_credentials.c b/src/core/lib/security/credentials/plugin/plugin_credentials.c
index b075e14551..bae357321e 100644
--- a/src/core/lib/security/credentials/plugin/plugin_credentials.c
+++ b/src/core/lib/security/credentials/plugin/plugin_credentials.c
@@ -127,5 +127,3 @@ grpc_call_credentials *grpc_metadata_credentials_create_from_plugin(
   c->plugin = plugin;
   return &c->base;
 }
-
-
diff --git a/src/core/lib/security/credentials/plugin/plugin_credentials.h b/src/core/lib/security/credentials/plugin/plugin_credentials.h
index cdabbbd30f..0b91d2f616 100644
--- a/src/core/lib/security/credentials/plugin/plugin_credentials.h
+++ b/src/core/lib/security/credentials/plugin/plugin_credentials.h
@@ -43,6 +43,3 @@ typedef struct {
 } grpc_plugin_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_PLUGIN_CREDENTIALS_H
-
-
-
diff --git a/src/core/lib/security/credentials/ssl/ssl_credentials.c b/src/core/lib/security/credentials/ssl/ssl_credentials.c
index ee8d2e4365..545bca9d98 100644
--- a/src/core/lib/security/credentials/ssl/ssl_credentials.c
+++ b/src/core/lib/security/credentials/ssl/ssl_credentials.c
@@ -160,7 +160,6 @@ static void ssl_server_destruct(grpc_server_credentials *creds) {
   if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs);
 }
 
-
 static grpc_security_status ssl_server_create_security_connector(
     grpc_server_credentials *creds, grpc_server_security_connector **sc) {
   grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
@@ -170,7 +169,6 @@ static grpc_security_status ssl_server_create_security_connector(
 static grpc_server_credentials_vtable ssl_server_vtable = {
     ssl_server_destruct, ssl_server_create_security_connector};
 
-
 static void ssl_build_server_config(
     const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
     size_t num_key_cert_pairs,
@@ -206,7 +204,6 @@ static void ssl_build_server_config(
   }
 }
 
-
 grpc_server_credentials *grpc_ssl_server_credentials_create(
     const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
     size_t num_key_cert_pairs, int force_client_auth, void *reserved) {
@@ -241,4 +238,3 @@ grpc_server_credentials *grpc_ssl_server_credentials_create_ex(
                           &c->config);
   return &c->base;
 }
-
diff --git a/src/core/lib/security/credentials/ssl/ssl_credentials.h b/src/core/lib/security/credentials/ssl/ssl_credentials.h
index ea4bdabc04..f23dbdbe49 100644
--- a/src/core/lib/security/credentials/ssl/ssl_credentials.h
+++ b/src/core/lib/security/credentials/ssl/ssl_credentials.h
@@ -46,4 +46,3 @@ typedef struct {
 } grpc_ssl_server_credentials;
 
 #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_SSL_SSL_CREDENTIALS_H */
-
diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c
index 9bd5305f80..a3f01ef83a 100644
--- a/src/core/lib/security/transport/secure_endpoint.c
+++ b/src/core/lib/security/transport/secure_endpoint.c
@@ -138,7 +138,7 @@ static void call_read_cb(grpc_exec_ctx *exec_ctx, secure_endpoint *ep,
     }
   }
   ep->read_buffer = NULL;
-  grpc_exec_ctx_push(exec_ctx, ep->read_cb, grpc_error_ref(error), NULL);
+  grpc_exec_ctx_push(exec_ctx, ep->read_cb, GRPC_ERROR_REF(error), NULL);
   SECURE_ENDPOINT_UNREF(exec_ctx, ep, "read");
 }
 
diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c
index e0a7fb50d1..d45ec4020c 100644
--- a/src/core/lib/security/transport/server_auth_filter.c
+++ b/src/core/lib/security/transport/server_auth_filter.c
@@ -169,7 +169,7 @@ static void auth_on_recv(grpc_exec_ctx *exec_ctx, void *user_data,
       return;
     }
   }
-  grpc_exec_ctx_push(exec_ctx, calld->on_done_recv, grpc_error_ref(error),
+  grpc_exec_ctx_push(exec_ctx, calld->on_done_recv, GRPC_ERROR_REF(error),
                      NULL);
 }
 
diff --git a/src/core/lib/security/util/json_util.c b/src/core/lib/security/util/json_util.c
index 9eda12c628..7eed039baa 100644
--- a/src/core/lib/security/util/json_util.c
+++ b/src/core/lib/security/util/json_util.c
@@ -59,4 +59,3 @@ bool grpc_copy_json_string_property(const grpc_json *json,
   *copied_value = gpr_strdup(prop_value);
   return true;
 }
-
diff --git a/src/core/lib/security/util/json_util.h b/src/core/lib/security/util/json_util.h
index 3046412729..5959626a5f 100644
--- a/src/core/lib/security/util/json_util.h
+++ b/src/core/lib/security/util/json_util.h
@@ -50,8 +50,6 @@ const char *grpc_json_get_string_property(const grpc_json *json,
 // Copies the value of the json child property specified by prop_name.
 // Returns false if the property was not found.
 bool grpc_copy_json_string_property(const grpc_json *json,
-                                    const char *prop_name,
-                                    char **copied_value);
+                                    const char *prop_name, char **copied_value);
 
 #endif  // GRPC_CORE_LIB_SECURITY_UTIL_JSON_UTIL_H
-
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index 0d6c58db62..046f2903ff 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -1082,7 +1082,7 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx,
   gpr_mu_lock(&call->mu);
 
   if (error != GRPC_ERROR_NONE) {
-    bctl->error = grpc_error_ref(error);
+    bctl->error = GRPC_ERROR_REF(error);
   } else {
     grpc_metadata_batch *md =
         &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
@@ -1167,10 +1167,10 @@ static void finish_batch(grpc_exec_ctx *exec_ctx, void *bctlp,
                        call->final_op.server.cancelled);
     }
 
-    grpc_error_unref(error);
+    GRPC_ERROR_UNREF(error);
     error = GRPC_ERROR_NONE;
   }
-  bctl->error = grpc_error_ref(error);
+  bctl->error = GRPC_ERROR_REF(error);
   gpr_mu_unlock(&call->mu);
   if (gpr_unref(&bctl->steps_to_complete)) {
     post_batch_completion(exec_ctx, bctl);
diff --git a/src/core/lib/transport/connectivity_state.c b/src/core/lib/transport/connectivity_state.c
index c6b274a5da..6df32a3a30 100644
--- a/src/core/lib/transport/connectivity_state.c
+++ b/src/core/lib/transport/connectivity_state.c
@@ -61,6 +61,7 @@ void grpc_connectivity_state_init(grpc_connectivity_state_tracker *tracker,
                                   grpc_connectivity_state init_state,
                                   const char *name) {
   tracker->current_state = init_state;
+  tracker->current_error = GRPC_ERROR_NONE;
   tracker->watchers = NULL;
   tracker->name = gpr_strdup(name);
 }
@@ -69,7 +70,6 @@ void grpc_connectivity_state_destroy(grpc_exec_ctx *exec_ctx,
                                      grpc_connectivity_state_tracker *tracker) {
   grpc_error *error;
   grpc_connectivity_state_watcher *w;
-  grpc_error_unref(tracker->current_error);
   while ((w = tracker->watchers)) {
     tracker->watchers = w->next;
 
@@ -82,6 +82,7 @@ void grpc_connectivity_state_destroy(grpc_exec_ctx *exec_ctx,
     grpc_exec_ctx_push(exec_ctx, w->notify, error, NULL);
     gpr_free(w);
   }
+  GRPC_ERROR_UNREF(tracker->current_error);
   gpr_free(tracker->name);
 }
 
@@ -92,7 +93,7 @@ grpc_connectivity_state grpc_connectivity_state_check(
             grpc_connectivity_state_name(tracker->current_state));
   }
   if (error != NULL) {
-    *error = grpc_error_ref(tracker->current_error);
+    *error = GRPC_ERROR_REF(tracker->current_error);
   }
   return tracker->current_state;
 }
@@ -132,7 +133,7 @@ int grpc_connectivity_state_notify_on_state_change(
   } else {
     if (tracker->current_state != *current) {
       *current = tracker->current_state;
-      grpc_exec_ctx_push(exec_ctx, notify, GRPC_ERROR_NONE, NULL);
+      grpc_exec_ctx_push(exec_ctx, notify, GRPC_ERROR_REF(tracker->current_error), NULL);
     } else {
       grpc_connectivity_state_watcher *w = gpr_malloc(sizeof(*w));
       w->current = current;
@@ -165,7 +166,7 @@ void grpc_connectivity_state_set(grpc_exec_ctx *exec_ctx,
       GPR_ASSERT(error != GRPC_ERROR_NONE);
       break;
   }
-  grpc_error_unref(tracker->current_error);
+  GRPC_ERROR_UNREF(tracker->current_error);
   tracker->current_error = error;
   if (tracker->current_state == state) {
     return;
@@ -176,7 +177,7 @@ void grpc_connectivity_state_set(grpc_exec_ctx *exec_ctx,
     *w->current = tracker->current_state;
     tracker->watchers = w->next;
     grpc_exec_ctx_push(exec_ctx, w->notify,
-                       grpc_error_ref(tracker->current_error), NULL);
+                       GRPC_ERROR_REF(tracker->current_error), NULL);
     gpr_free(w);
   }
 }
diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c
index f7362973a9..fdf0f4b2aa 100644
--- a/src/core/lib/transport/transport.c
+++ b/src/core/lib/transport/transport.c
@@ -146,10 +146,10 @@ char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx,
 void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx,
                                                   grpc_transport_stream_op *op,
                                                   grpc_error *error) {
-  grpc_exec_ctx_push(exec_ctx, op->recv_message_ready, grpc_error_ref(error),
+  grpc_exec_ctx_push(exec_ctx, op->recv_message_ready, GRPC_ERROR_REF(error),
                      NULL);
   grpc_exec_ctx_push(exec_ctx, op->recv_initial_metadata_ready,
-                     grpc_error_ref(error), NULL);
+                     GRPC_ERROR_REF(error), NULL);
   grpc_exec_ctx_push(exec_ctx, op->on_complete, error, NULL);
 }
 
@@ -178,7 +178,7 @@ static void free_message(grpc_exec_ctx *exec_ctx, void *p, grpc_error *error) {
   close_message_data *cmd = p;
   gpr_slice_unref(cmd->message);
   if (cmd->then_call != NULL) {
-    cmd->then_call->cb(exec_ctx, cmd->then_call->cb_arg, grpc_error_ref(error));
+    cmd->then_call->cb(exec_ctx, cmd->then_call->cb_arg, GRPC_ERROR_REF(error));
   }
   gpr_free(cmd);
 }
diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c
index cd5b541249..9f7274c9f1 100644
--- a/test/core/bad_client/bad_client.c
+++ b/test/core/bad_client/bad_client.c
@@ -62,7 +62,7 @@ static void thd_func(void *arg) {
   gpr_event_set(&a->done_thd, (void *)1);
 }
 
-static void done_write(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+static void done_write(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
   thd_args *a = arg;
   gpr_event_set(&a->done_write, (void *)1);
 }
diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c
index 1a5594bde8..cba186da09 100644
--- a/test/core/channel/channel_stack_test.c
+++ b/test/core/channel/channel_stack_test.c
@@ -81,12 +81,13 @@ static char *get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
   return gpr_strdup("peer");
 }
 
-static void free_channel(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+static void free_channel(grpc_exec_ctx *exec_ctx, void *arg,
+                         grpc_error *error) {
   grpc_channel_stack_destroy(exec_ctx, arg);
   gpr_free(arg);
 }
 
-static void free_call(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+static void free_call(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
   grpc_call_stack_destroy(exec_ctx, arg, NULL);
   gpr_free(arg);
 }
diff --git a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
index 2322aa688a..f6067463d5 100644
--- a/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
+++ b/test/core/client_config/resolvers/dns_resolver_connectivity_test.c
@@ -67,21 +67,21 @@ static grpc_client_channel_factory cc_factory = {&sc_vtable};
 static gpr_mu g_mu;
 static bool g_fail_resolution = true;
 
-static grpc_resolved_addresses *my_resolve_address(const char *name,
-                                                   const char *addr) {
+static grpc_error *my_resolve_address(const char *name, const char *addr,
+                                      grpc_resolved_addresses **addrs) {
   gpr_mu_lock(&g_mu);
   GPR_ASSERT(0 == strcmp("test", name));
   if (g_fail_resolution) {
     g_fail_resolution = false;
     gpr_mu_unlock(&g_mu);
-    return NULL;
+    return GRPC_ERROR_CREATE("Forced Failure");
   } else {
     gpr_mu_unlock(&g_mu);
-    grpc_resolved_addresses *addrs = gpr_malloc(sizeof(*addrs));
-    addrs->naddrs = 1;
-    addrs->addrs = gpr_malloc(sizeof(*addrs->addrs));
-    addrs->addrs[0].len = 123;
-    return addrs;
+    *addrs = gpr_malloc(sizeof(*addrs));
+    (*addrs)->naddrs = 1;
+    (*addrs)->addrs = gpr_malloc(sizeof(*(*addrs)->addrs));
+    (*addrs)->addrs[0].len = 123;
+    return GRPC_ERROR_NONE;
   }
 }
 
@@ -100,7 +100,7 @@ static grpc_resolver *create_resolver(const char *name) {
   return resolver;
 }
 
-static void on_done(grpc_exec_ctx *exec_ctx, void *ev, bool success) {
+static void on_done(grpc_exec_ctx *exec_ctx, void *ev, grpc_error *error) {
   gpr_event_set(ev, (void *)1);
 }
 
diff --git a/test/core/client_config/set_initial_connect_string_test.c b/test/core/client_config/set_initial_connect_string_test.c
index 3ad8ce964a..499074a7bf 100644
--- a/test/core/client_config/set_initial_connect_string_test.c
+++ b/test/core/client_config/set_initial_connect_string_test.c
@@ -64,8 +64,8 @@ static int server_port;
 static struct rpc_state state;
 static grpc_closure on_read;
 
-static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
-  GPR_ASSERT(success);
+static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
   gpr_slice_buffer_move_into(&state.temp_incoming_buffer,
                              &state.incoming_buffer);
   if (state.incoming_buffer.length > strlen(magic_connect_string)) {
diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c
index 81f76ea79c..9be72824fa 100644
--- a/test/core/end2end/dualstack_socket_test.c
+++ b/test/core/end2end/dualstack_socket_test.c
@@ -266,7 +266,9 @@ void test_connect(const char *server_host, const char *client_host, int port,
 }
 
 int external_dns_works(const char *host) {
-  grpc_resolved_addresses *res = grpc_blocking_resolve_address(host, "80");
+  grpc_resolved_addresses *res;
+  grpc_error *error = grpc_blocking_resolve_address(host, "80", &res);
+  GRPC_ERROR_UNREF(error);
   if (res != NULL) {
     grpc_resolved_addresses_destroy(res);
     return 1;
diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c
index 858ebd9683..3eba4a4e2e 100644
--- a/test/core/end2end/fuzzers/api_fuzzer.c
+++ b/test/core/end2end/fuzzers/api_fuzzer.c
@@ -50,7 +50,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 // logging
 
-static const bool squelch = true;
+static const bool squelch = !true;
 
 static void dont_log(gpr_log_func_args *args) {}
 
@@ -202,7 +202,7 @@ static void finish_resolve(grpc_exec_ctx *exec_ctx, void *arg,
     *r->addrs = addrs;
     grpc_exec_ctx_push(exec_ctx, r->on_done, GRPC_ERROR_NONE, NULL);
   } else {
-    grpc_error_ref(error);
+    GRPC_ERROR_REF(error);
     grpc_exec_ctx_push(
         exec_ctx, r->on_done,
         GRPC_ERROR_CREATE_REFERENCING("Resolution failed", &error, 1), NULL);
@@ -248,7 +248,7 @@ static void do_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
   future_connect *fc = arg;
   if (error != GRPC_ERROR_NONE) {
     *fc->ep = NULL;
-    grpc_exec_ctx_push(exec_ctx, fc->closure, grpc_error_ref(error), NULL);
+    grpc_exec_ctx_push(exec_ctx, fc->closure, GRPC_ERROR_REF(error), NULL);
   } else if (g_server != NULL) {
     grpc_endpoint *client;
     grpc_endpoint *server;
diff --git a/test/core/end2end/goaway_server_test.c b/test/core/end2end/goaway_server_test.c
index 5f8c2641e7..1da120c9b4 100644
--- a/test/core/end2end/goaway_server_test.c
+++ b/test/core/end2end/goaway_server_test.c
@@ -46,8 +46,9 @@ static void *tag(intptr_t i) { return (void *)i; }
 
 static gpr_mu g_mu;
 static int g_resolve_port = -1;
-static grpc_resolved_addresses *(*iomgr_resolve_address)(
-    const char *name, const char *default_port);
+static grpc_error *(*iomgr_resolve_address)(const char *name,
+                                            const char *default_port,
+                                            grpc_resolved_addresses **addrs);
 
 static void set_resolve_port(int port) {
   gpr_mu_lock(&g_mu);
@@ -55,28 +56,28 @@ static void set_resolve_port(int port) {
   gpr_mu_unlock(&g_mu);
 }
 
-static grpc_resolved_addresses *my_resolve_address(const char *name,
-                                                   const char *addr) {
+static grpc_error *my_resolve_address(const char *name, const char *addr,
+                                      grpc_resolved_addresses **addrs) {
   if (0 != strcmp(name, "test")) {
-    return iomgr_resolve_address(name, addr);
+    return iomgr_resolve_address(name, addr, addrs);
   }
 
   gpr_mu_lock(&g_mu);
   if (g_resolve_port < 0) {
     gpr_mu_unlock(&g_mu);
-    return NULL;
+    return GRPC_ERROR_CREATE("Forced Failure");
   } else {
-    grpc_resolved_addresses *addrs = gpr_malloc(sizeof(*addrs));
-    addrs->naddrs = 1;
-    addrs->addrs = gpr_malloc(sizeof(*addrs->addrs));
-    memset(addrs->addrs, 0, sizeof(*addrs->addrs));
-    struct sockaddr_in *sa = (struct sockaddr_in *)addrs->addrs[0].addr;
+    *addrs = gpr_malloc(sizeof(*addrs));
+    (*addrs)->naddrs = 1;
+    (*addrs)->addrs = gpr_malloc(sizeof(*(*addrs)->addrs));
+    memset((*addrs)->addrs, 0, sizeof(*(*addrs)->addrs));
+    struct sockaddr_in *sa = (struct sockaddr_in *)(*addrs)->addrs[0].addr;
     sa->sin_family = AF_INET;
     sa->sin_addr.s_addr = htonl(0x7f000001);
     sa->sin_port = htons((uint16_t)g_resolve_port);
-    addrs->addrs[0].len = sizeof(*sa);
+    (*addrs)->addrs[0].len = sizeof(*sa);
     gpr_mu_unlock(&g_mu);
-    return addrs;
+    return GRPC_ERROR_NONE;
   }
 }
 
diff --git a/test/core/end2end/tests/filter_causes_close.c b/test/core/end2end/tests/filter_causes_close.c
index 99049aa6bd..405e75294d 100644
--- a/test/core/end2end/tests/filter_causes_close.c
+++ b/test/core/end2end/tests/filter_causes_close.c
@@ -202,10 +202,11 @@ typedef struct { grpc_closure *recv_im_ready; } call_data;
 
 typedef struct { uint8_t unused; } channel_data;
 
-static void recv_im_ready(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+static void recv_im_ready(grpc_exec_ctx *exec_ctx, void *arg,
+                          grpc_error *error) {
   grpc_call_element *elem = arg;
   call_data *calld = elem->call_data;
-  if (success) {
+  if (error == GRPC_ERROR_NONE) {
     // close the stream with an error.
     gpr_slice message =
         gpr_slice_from_copied_string("Random failure that's not preventable.");
diff --git a/test/core/http/httpcli_test.c b/test/core/http/httpcli_test.c
index d3a68d0eb8..32bef2005a 100644
--- a/test/core/http/httpcli_test.c
+++ b/test/core/http/httpcli_test.c
@@ -54,12 +54,11 @@ static gpr_timespec n_seconds_time(int seconds) {
   return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(seconds);
 }
 
-static void on_finish(grpc_exec_ctx *exec_ctx, void *arg,
-                      const grpc_httpcli_response *response) {
+static void on_finish(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
   const char *expect =
       "<html><head><title>Hello world!</title></head>"
       "<body><p>This is a test</p></body></html>";
-  GPR_ASSERT(arg == (void *)42);
+  grpc_http_response *response = arg;
   GPR_ASSERT(response);
   GPR_ASSERT(response->status == 200);
   GPR_ASSERT(response->body_length == strlen(expect));
@@ -86,8 +85,10 @@ static void test_get(int port) {
   req.http.path = "/get";
   req.handshaker = &grpc_httpcli_plaintext;
 
+  grpc_http_response response;
+  memset(&response, 0, sizeof(response));
   grpc_httpcli_get(&exec_ctx, &g_context, g_pollset, &req, n_seconds_time(15),
-                   on_finish, (void *)42);
+                   grpc_closure_create(on_finish, &response), &response);
   gpr_mu_lock(g_mu);
   while (!g_done) {
     grpc_pollset_worker *worker = NULL;
@@ -117,8 +118,11 @@ static void test_post(int port) {
   req.http.path = "/post";
   req.handshaker = &grpc_httpcli_plaintext;
 
+  grpc_http_response response;
+  memset(&response, 0, sizeof(response));
   grpc_httpcli_post(&exec_ctx, &g_context, g_pollset, &req, "hello", 5,
-                    n_seconds_time(15), on_finish, (void *)42);
+                    n_seconds_time(15),
+                    grpc_closure_create(on_finish, &response), &response);
   gpr_mu_lock(g_mu);
   while (!g_done) {
     grpc_pollset_worker *worker = NULL;
@@ -132,7 +136,8 @@ static void test_post(int port) {
   gpr_free(host);
 }
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/http/httpscli_test.c b/test/core/http/httpscli_test.c
index d807336904..dce3eb6de0 100644
--- a/test/core/http/httpscli_test.c
+++ b/test/core/http/httpscli_test.c
@@ -54,12 +54,11 @@ static gpr_timespec n_seconds_time(int seconds) {
   return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(seconds);
 }
 
-static void on_finish(grpc_exec_ctx *exec_ctx, void *arg,
-                      const grpc_httpcli_response *response) {
+static void on_finish(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
   const char *expect =
       "<html><head><title>Hello world!</title></head>"
       "<body><p>This is a test</p></body></html>";
-  GPR_ASSERT(arg == (void *)42);
+  grpc_http_response *response = arg;
   GPR_ASSERT(response);
   GPR_ASSERT(response->status == 200);
   GPR_ASSERT(response->body_length == strlen(expect));
@@ -87,8 +86,10 @@ static void test_get(int port) {
   req.http.path = "/get";
   req.handshaker = &grpc_httpcli_ssl;
 
+  grpc_http_response response;
+  memset(&response, 0, sizeof(response));
   grpc_httpcli_get(&exec_ctx, &g_context, g_pollset, &req, n_seconds_time(15),
-                   on_finish, (void *)42);
+                   grpc_closure_create(on_finish, &response), &response);
   gpr_mu_lock(g_mu);
   while (!g_done) {
     grpc_pollset_worker *worker = NULL;
@@ -119,8 +120,11 @@ static void test_post(int port) {
   req.http.path = "/post";
   req.handshaker = &grpc_httpcli_ssl;
 
+  grpc_http_response response;
+  memset(&response, 0, sizeof(response));
   grpc_httpcli_post(&exec_ctx, &g_context, g_pollset, &req, "hello", 5,
-                    n_seconds_time(15), on_finish, (void *)42);
+                    n_seconds_time(15),
+                    grpc_closure_create(on_finish, &response), &response);
   gpr_mu_lock(g_mu);
   while (!g_done) {
     grpc_pollset_worker *worker = NULL;
@@ -134,7 +138,8 @@ static void test_post(int port) {
   gpr_free(host);
 }
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/http/parser_test.c b/test/core/http/parser_test.c
index 7fdf60cc2b..96313bfa22 100644
--- a/test/core/http/parser_test.c
+++ b/test/core/http/parser_test.c
@@ -44,38 +44,39 @@
 #include "test/core/util/test_config.h"
 
 static void test_request_succeeds(grpc_slice_split_mode split_mode,
-                                  char *request, char *expect_method,
+                                  char *request_text, char *expect_method,
                                   grpc_http_version expect_version,
                                   char *expect_path, char *expect_body, ...) {
   grpc_http_parser parser;
-  gpr_slice input_slice = gpr_slice_from_copied_string(request);
+  gpr_slice input_slice = gpr_slice_from_copied_string(request_text);
   size_t num_slices;
   size_t i;
   gpr_slice *slices;
   va_list args;
+  grpc_http_request request;
+  memset(&request, 0, sizeof(request));
 
   grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices);
   gpr_slice_unref(input_slice);
 
-  grpc_http_parser_init(&parser);
+  grpc_http_parser_init(&parser, GRPC_HTTP_REQUEST, &request);
 
   for (i = 0; i < num_slices; i++) {
-    GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i]));
+    GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i]) == GRPC_ERROR_NONE);
     gpr_slice_unref(slices[i]);
   }
   GPR_ASSERT(grpc_http_parser_eof(&parser));
 
   GPR_ASSERT(GRPC_HTTP_REQUEST == parser.type);
-  GPR_ASSERT(0 == strcmp(expect_method, parser.http.request.method));
-  GPR_ASSERT(0 == strcmp(expect_path, parser.http.request.path));
-  GPR_ASSERT(expect_version == parser.http.request.version);
+  GPR_ASSERT(0 == strcmp(expect_method, request.method));
+  GPR_ASSERT(0 == strcmp(expect_path, request.path));
+  GPR_ASSERT(expect_version == request.version);
 
   if (expect_body != NULL) {
-    GPR_ASSERT(strlen(expect_body) == parser.http.request.body_length);
-    GPR_ASSERT(0 == memcmp(expect_body, parser.http.request.body,
-                           parser.http.request.body_length));
+    GPR_ASSERT(strlen(expect_body) == request.body_length);
+    GPR_ASSERT(0 == memcmp(expect_body, request.body, request.body_length));
   } else {
-    GPR_ASSERT(parser.http.request.body_length == 0);
+    GPR_ASSERT(request.body_length == 0);
   }
 
   va_start(args, expect_body);
@@ -85,48 +86,48 @@ static void test_request_succeeds(grpc_slice_split_mode split_mode,
     char *expect_value;
     expect_key = va_arg(args, char *);
     if (!expect_key) break;
-    GPR_ASSERT(i < parser.http.request.hdr_count);
+    GPR_ASSERT(i < request.hdr_count);
     expect_value = va_arg(args, char *);
     GPR_ASSERT(expect_value);
-    GPR_ASSERT(0 == strcmp(expect_key, parser.http.request.hdrs[i].key));
-    GPR_ASSERT(0 == strcmp(expect_value, parser.http.request.hdrs[i].value));
+    GPR_ASSERT(0 == strcmp(expect_key, request.hdrs[i].key));
+    GPR_ASSERT(0 == strcmp(expect_value, request.hdrs[i].value));
     i++;
   }
   va_end(args);
-  GPR_ASSERT(i == parser.http.request.hdr_count);
+  GPR_ASSERT(i == request.hdr_count);
 
   grpc_http_parser_destroy(&parser);
   gpr_free(slices);
 }
 
-static void test_succeeds(grpc_slice_split_mode split_mode, char *response,
+static void test_succeeds(grpc_slice_split_mode split_mode, char *response_text,
                           int expect_status, char *expect_body, ...) {
   grpc_http_parser parser;
-  gpr_slice input_slice = gpr_slice_from_copied_string(response);
+  gpr_slice input_slice = gpr_slice_from_copied_string(response_text);
   size_t num_slices;
   size_t i;
   gpr_slice *slices;
   va_list args;
+  grpc_http_response response;
 
   grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices);
   gpr_slice_unref(input_slice);
 
-  grpc_http_parser_init(&parser);
+  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
 
   for (i = 0; i < num_slices; i++) {
-    GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i]));
+    GPR_ASSERT(grpc_http_parser_parse(&parser, slices[i]) == GRPC_ERROR_NONE);
     gpr_slice_unref(slices[i]);
   }
   GPR_ASSERT(grpc_http_parser_eof(&parser));
 
   GPR_ASSERT(GRPC_HTTP_RESPONSE == parser.type);
-  GPR_ASSERT(expect_status == parser.http.response.status);
+  GPR_ASSERT(expect_status == response.status);
   if (expect_body != NULL) {
-    GPR_ASSERT(strlen(expect_body) == parser.http.response.body_length);
-    GPR_ASSERT(0 == memcmp(expect_body, parser.http.response.body,
-                           parser.http.response.body_length));
+    GPR_ASSERT(strlen(expect_body) == response.body_length);
+    GPR_ASSERT(0 == memcmp(expect_body, response.body, response.body_length));
   } else {
-    GPR_ASSERT(parser.http.response.body_length == 0);
+    GPR_ASSERT(response.body_length == 0);
   }
 
   va_start(args, expect_body);
@@ -136,32 +137,67 @@ static void test_succeeds(grpc_slice_split_mode split_mode, char *response,
     char *expect_value;
     expect_key = va_arg(args, char *);
     if (!expect_key) break;
-    GPR_ASSERT(i < parser.http.response.hdr_count);
+    GPR_ASSERT(i < response.hdr_count);
     expect_value = va_arg(args, char *);
     GPR_ASSERT(expect_value);
-    GPR_ASSERT(0 == strcmp(expect_key, parser.http.response.hdrs[i].key));
-    GPR_ASSERT(0 == strcmp(expect_value, parser.http.response.hdrs[i].value));
+    GPR_ASSERT(0 == strcmp(expect_key, response.hdrs[i].key));
+    GPR_ASSERT(0 == strcmp(expect_value, response.hdrs[i].value));
     i++;
   }
   va_end(args);
-  GPR_ASSERT(i == parser.http.response.hdr_count);
+  GPR_ASSERT(i == response.hdr_count);
 
   grpc_http_parser_destroy(&parser);
   gpr_free(slices);
 }
 
-static void test_fails(grpc_slice_split_mode split_mode, char *response) {
+static void test_fails(grpc_slice_split_mode split_mode, char *response_text) {
   grpc_http_parser parser;
-  gpr_slice input_slice = gpr_slice_from_copied_string(response);
+  gpr_slice input_slice = gpr_slice_from_copied_string(response_text);
+  size_t num_slices;
+  size_t i;
+  gpr_slice *slices;
+  grpc_error *error = GRPC_ERROR_NONE;
+  grpc_http_response response;
+  memset(&response, 0, sizeof(response));
+
+  grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices);
+  gpr_slice_unref(input_slice);
+
+  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
+
+  for (i = 0; i < num_slices; i++) {
+    if (GRPC_ERROR_NONE == error) {
+      error = grpc_http_parser_parse(&parser, slices[i]);
+    }
+    gpr_slice_unref(slices[i]);
+  }
+  if (GRPC_ERROR_NONE == error) {
+    error = grpc_http_parser_eof(&parser);
+  }
+  GPR_ASSERT(error != GRPC_ERROR_NONE);
+  GRPC_ERROR_UNREF(error);
+
+  grpc_http_response_destroy(&response);
+  grpc_http_parser_destroy(&parser);
+  gpr_free(slices);
+}
+
+static void test_request_fails(grpc_slice_split_mode split_mode,
+                               char *request_text) {
+  grpc_http_parser parser;
+  gpr_slice input_slice = gpr_slice_from_copied_string(request_text);
   size_t num_slices;
   size_t i;
   gpr_slice *slices;
   int done = 0;
+  grpc_http_request request;
+  memset(&request, 0, sizeof(request));
 
   grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices);
   gpr_slice_unref(input_slice);
 
-  grpc_http_parser_init(&parser);
+  grpc_http_parser_init(&parser, GRPC_HTTP_REQUEST, &request);
 
   for (i = 0; i < num_slices; i++) {
     if (!done && !grpc_http_parser_parse(&parser, slices[i])) {
@@ -174,41 +210,11 @@ static void test_fails(grpc_slice_split_mode split_mode, char *response) {
   }
   GPR_ASSERT(done);
 
+  grpc_http_request_destroy(&request);
   grpc_http_parser_destroy(&parser);
   gpr_free(slices);
 }
 
-static const uint8_t failed_test1[] = {
-    0x9e, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x4a,
-    0x48, 0x54, 0x54, 0x30, 0x32, 0x16, 0xa,  0x2f, 0x48, 0x20,
-    0x31, 0x2e, 0x31, 0x20, 0x32, 0x30, 0x31, 0x54, 0x54, 0xb9,
-    0x32, 0x31, 0x2e, 0x20, 0x32, 0x30, 0x20,
-};
-
-typedef struct {
-  const char *name;
-  const uint8_t *data;
-  size_t length;
-} failed_test;
-
-#define FAILED_TEST(name) \
-  { #name, name, sizeof(name) }
-
-failed_test failed_tests[] = {
-    FAILED_TEST(failed_test1),
-};
-
-static void test_doesnt_crash(failed_test t) {
-  gpr_log(GPR_DEBUG, "Run previously failed test: %s", t.name);
-  grpc_http_parser p;
-  grpc_http_parser_init(&p);
-  gpr_slice slice =
-      gpr_slice_from_copied_buffer((const char *)t.data, t.length);
-  grpc_http_parser_parse(&p, slice);
-  gpr_slice_unref(slice);
-  grpc_http_parser_destroy(&p);
-}
-
 int main(int argc, char **argv) {
   size_t i;
   const grpc_slice_split_mode split_modes[] = {GRPC_SLICE_SPLIT_IDENTITY,
@@ -217,10 +223,6 @@ int main(int argc, char **argv) {
 
   grpc_test_init(argc, argv);
 
-  for (i = 0; i < GPR_ARRAY_SIZE(failed_tests); i++) {
-    test_doesnt_crash(failed_tests[i]);
-  }
-
   for (i = 0; i < GPR_ARRAY_SIZE(split_modes); i++) {
     test_succeeds(split_modes[i],
                   "HTTP/1.0 200 OK\r\n"
@@ -286,12 +288,12 @@ int main(int argc, char **argv) {
                "  def\r\n"
                "\r\n"
                "hello world!");
-    test_fails(split_modes[i], "GET\r\n");
-    test_fails(split_modes[i], "GET /\r\n");
-    test_fails(split_modes[i], "GET / HTTP/0.0\r\n");
-    test_fails(split_modes[i], "GET / ____/1.0\r\n");
-    test_fails(split_modes[i], "GET / HTTP/1.2\r\n");
-    test_fails(split_modes[i], "GET / HTTP/1.0\n");
+    test_request_fails(split_modes[i], "GET\r\n");
+    test_request_fails(split_modes[i], "GET /\r\n");
+    test_request_fails(split_modes[i], "GET / HTTP/0.0\r\n");
+    test_request_fails(split_modes[i], "GET / ____/1.0\r\n");
+    test_request_fails(split_modes[i], "GET / HTTP/1.2\r\n");
+    test_request_fails(split_modes[i], "GET / HTTP/1.0\n");
 
     tmp1 = gpr_malloc(2 * GRPC_HTTP_PARSER_MAX_HEADER_LENGTH);
     memset(tmp1, 'a', 2 * GRPC_HTTP_PARSER_MAX_HEADER_LENGTH - 1);
diff --git a/test/core/http/corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 b/test/core/http/request_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427
similarity index 100%
rename from test/core/http/corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427
rename to test/core/http/request_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427
diff --git a/test/core/http/corpus/05e613853d64a9669ea3cf41b0de777dc24931ba b/test/core/http/request_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba
similarity index 100%
rename from test/core/http/corpus/05e613853d64a9669ea3cf41b0de777dc24931ba
rename to test/core/http/request_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba
diff --git a/test/core/http/corpus/069352518a1d1baa05f317c677d275cefda2ac97 b/test/core/http/request_corpus/069352518a1d1baa05f317c677d275cefda2ac97
similarity index 100%
rename from test/core/http/corpus/069352518a1d1baa05f317c677d275cefda2ac97
rename to test/core/http/request_corpus/069352518a1d1baa05f317c677d275cefda2ac97
diff --git a/test/core/http/corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 b/test/core/http/request_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34
similarity index 100%
rename from test/core/http/corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34
rename to test/core/http/request_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34
diff --git a/test/core/http/corpus/0c5b7c2569410b526605e308309a7f36574e530d b/test/core/http/request_corpus/0c5b7c2569410b526605e308309a7f36574e530d
similarity index 100%
rename from test/core/http/corpus/0c5b7c2569410b526605e308309a7f36574e530d
rename to test/core/http/request_corpus/0c5b7c2569410b526605e308309a7f36574e530d
diff --git a/test/core/http/corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf b/test/core/http/request_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf
similarity index 100%
rename from test/core/http/corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf
rename to test/core/http/request_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf
diff --git a/test/core/http/corpus/1e1273f90187fdf5df3625764245610f86af6aa4 b/test/core/http/request_corpus/1e1273f90187fdf5df3625764245610f86af6aa4
similarity index 100%
rename from test/core/http/corpus/1e1273f90187fdf5df3625764245610f86af6aa4
rename to test/core/http/request_corpus/1e1273f90187fdf5df3625764245610f86af6aa4
diff --git a/test/core/http/corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 b/test/core/http/request_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55
similarity index 100%
rename from test/core/http/corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55
rename to test/core/http/request_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55
diff --git a/test/core/http/corpus/24756c396bc72894fd720092bb6f9c03e66b469f b/test/core/http/request_corpus/24756c396bc72894fd720092bb6f9c03e66b469f
similarity index 100%
rename from test/core/http/corpus/24756c396bc72894fd720092bb6f9c03e66b469f
rename to test/core/http/request_corpus/24756c396bc72894fd720092bb6f9c03e66b469f
diff --git a/test/core/http/corpus/276def41311933421ae7a9ee42e906c85b6a4d3f b/test/core/http/request_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f
similarity index 100%
rename from test/core/http/corpus/276def41311933421ae7a9ee42e906c85b6a4d3f
rename to test/core/http/request_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f
diff --git a/test/core/http/corpus/29daa75432381937fd005cb25e314e328de6e9f9 b/test/core/http/request_corpus/29daa75432381937fd005cb25e314e328de6e9f9
similarity index 100%
rename from test/core/http/corpus/29daa75432381937fd005cb25e314e328de6e9f9
rename to test/core/http/request_corpus/29daa75432381937fd005cb25e314e328de6e9f9
diff --git a/test/core/http/corpus/2a75204bc492084ad853682f8de3fb137d5907bc b/test/core/http/request_corpus/2a75204bc492084ad853682f8de3fb137d5907bc
similarity index 100%
rename from test/core/http/corpus/2a75204bc492084ad853682f8de3fb137d5907bc
rename to test/core/http/request_corpus/2a75204bc492084ad853682f8de3fb137d5907bc
diff --git a/test/core/http/corpus/2d34ba249b755a880525cf53c665633a5e359305 b/test/core/http/request_corpus/2d34ba249b755a880525cf53c665633a5e359305
similarity index 100%
rename from test/core/http/corpus/2d34ba249b755a880525cf53c665633a5e359305
rename to test/core/http/request_corpus/2d34ba249b755a880525cf53c665633a5e359305
diff --git a/test/core/http/corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 b/test/core/http/request_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2
similarity index 100%
rename from test/core/http/corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2
rename to test/core/http/request_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2
diff --git a/test/core/http/corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b b/test/core/http/request_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b
similarity index 100%
rename from test/core/http/corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b
rename to test/core/http/request_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b
diff --git a/test/core/http/corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece b/test/core/http/request_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece
similarity index 100%
rename from test/core/http/corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece
rename to test/core/http/request_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece
diff --git a/test/core/http/corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf b/test/core/http/request_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf
similarity index 100%
rename from test/core/http/corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf
rename to test/core/http/request_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf
diff --git a/test/core/http/corpus/3953688866ccb3b4f371f1a858570d6afdb6452d b/test/core/http/request_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d
similarity index 100%
rename from test/core/http/corpus/3953688866ccb3b4f371f1a858570d6afdb6452d
rename to test/core/http/request_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d
diff --git a/test/core/http/corpus/39b19c41ba537f37511eff7727733715db432e76 b/test/core/http/request_corpus/39b19c41ba537f37511eff7727733715db432e76
similarity index 100%
rename from test/core/http/corpus/39b19c41ba537f37511eff7727733715db432e76
rename to test/core/http/request_corpus/39b19c41ba537f37511eff7727733715db432e76
diff --git a/test/core/http/corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac b/test/core/http/request_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac
similarity index 100%
rename from test/core/http/corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac
rename to test/core/http/request_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac
diff --git a/test/core/http/corpus/3f03265921120c6ffa61b944e213e062a5538d4b b/test/core/http/request_corpus/3f03265921120c6ffa61b944e213e062a5538d4b
similarity index 100%
rename from test/core/http/corpus/3f03265921120c6ffa61b944e213e062a5538d4b
rename to test/core/http/request_corpus/3f03265921120c6ffa61b944e213e062a5538d4b
diff --git a/test/core/http/corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 b/test/core/http/request_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046
similarity index 100%
rename from test/core/http/corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046
rename to test/core/http/request_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046
diff --git a/test/core/http/corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 b/test/core/http/request_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9
similarity index 100%
rename from test/core/http/corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9
rename to test/core/http/request_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9
diff --git a/test/core/http/corpus/487725eb38511c79a9340bf4560a1411061fa6fa b/test/core/http/request_corpus/487725eb38511c79a9340bf4560a1411061fa6fa
similarity index 100%
rename from test/core/http/corpus/487725eb38511c79a9340bf4560a1411061fa6fa
rename to test/core/http/request_corpus/487725eb38511c79a9340bf4560a1411061fa6fa
diff --git a/test/core/http/corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 b/test/core/http/request_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5
similarity index 100%
rename from test/core/http/corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5
rename to test/core/http/request_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5
diff --git a/test/core/http/corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 b/test/core/http/request_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55
similarity index 100%
rename from test/core/http/corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55
rename to test/core/http/request_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55
diff --git a/test/core/http/corpus/5028c56a5116a186b7343ff59567b47347a0796d b/test/core/http/request_corpus/5028c56a5116a186b7343ff59567b47347a0796d
similarity index 100%
rename from test/core/http/corpus/5028c56a5116a186b7343ff59567b47347a0796d
rename to test/core/http/request_corpus/5028c56a5116a186b7343ff59567b47347a0796d
diff --git a/test/core/http/corpus/533f62b3f495ce704babf3ee8d840f196a714dff b/test/core/http/request_corpus/533f62b3f495ce704babf3ee8d840f196a714dff
similarity index 100%
rename from test/core/http/corpus/533f62b3f495ce704babf3ee8d840f196a714dff
rename to test/core/http/request_corpus/533f62b3f495ce704babf3ee8d840f196a714dff
diff --git a/test/core/http/corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 b/test/core/http/request_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104
similarity index 100%
rename from test/core/http/corpus/5892cbb284771fc9761caae37b19cd6e27dbc104
rename to test/core/http/request_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104
diff --git a/test/core/http/corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee b/test/core/http/request_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee
similarity index 100%
rename from test/core/http/corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee
rename to test/core/http/request_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee
diff --git a/test/core/http/corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 b/test/core/http/request_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5
similarity index 100%
rename from test/core/http/corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5
rename to test/core/http/request_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5
diff --git a/test/core/http/corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 b/test/core/http/request_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0
similarity index 100%
rename from test/core/http/corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0
rename to test/core/http/request_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0
diff --git a/test/core/http/corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e b/test/core/http/request_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e
similarity index 100%
rename from test/core/http/corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e
rename to test/core/http/request_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e
diff --git a/test/core/http/corpus/657368df512ca6294b9df16adf935a3f374a8be2 b/test/core/http/request_corpus/657368df512ca6294b9df16adf935a3f374a8be2
similarity index 100%
rename from test/core/http/corpus/657368df512ca6294b9df16adf935a3f374a8be2
rename to test/core/http/request_corpus/657368df512ca6294b9df16adf935a3f374a8be2
diff --git a/test/core/http/corpus/7fc4520094902ce2c760d70eaad5b674d2817337 b/test/core/http/request_corpus/7fc4520094902ce2c760d70eaad5b674d2817337
similarity index 100%
rename from test/core/http/corpus/7fc4520094902ce2c760d70eaad5b674d2817337
rename to test/core/http/request_corpus/7fc4520094902ce2c760d70eaad5b674d2817337
diff --git a/test/core/http/corpus/81f59a12b458ec3604035cb962165c604d1355e6 b/test/core/http/request_corpus/81f59a12b458ec3604035cb962165c604d1355e6
similarity index 100%
rename from test/core/http/corpus/81f59a12b458ec3604035cb962165c604d1355e6
rename to test/core/http/request_corpus/81f59a12b458ec3604035cb962165c604d1355e6
diff --git a/test/core/http/corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 b/test/core/http/request_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9
similarity index 100%
rename from test/core/http/corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9
rename to test/core/http/request_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9
diff --git a/test/core/http/corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c b/test/core/http/request_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c
similarity index 100%
rename from test/core/http/corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c
rename to test/core/http/request_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c
diff --git a/test/core/http/corpus/97e4499d450c95660de86747f527e670f2012548 b/test/core/http/request_corpus/97e4499d450c95660de86747f527e670f2012548
similarity index 100%
rename from test/core/http/corpus/97e4499d450c95660de86747f527e670f2012548
rename to test/core/http/request_corpus/97e4499d450c95660de86747f527e670f2012548
diff --git a/test/core/http/corpus/9a996857196e0998a1278994a9bab3d35526e7f1 b/test/core/http/request_corpus/9a996857196e0998a1278994a9bab3d35526e7f1
similarity index 100%
rename from test/core/http/corpus/9a996857196e0998a1278994a9bab3d35526e7f1
rename to test/core/http/request_corpus/9a996857196e0998a1278994a9bab3d35526e7f1
diff --git a/test/core/http/corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 b/test/core/http/request_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8
similarity index 100%
rename from test/core/http/corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8
rename to test/core/http/request_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8
diff --git a/test/core/http/corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 b/test/core/http/request_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1
similarity index 100%
rename from test/core/http/corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1
rename to test/core/http/request_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1
diff --git a/test/core/http/corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 b/test/core/http/request_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85
similarity index 100%
rename from test/core/http/corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85
rename to test/core/http/request_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85
diff --git a/test/core/http/corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 b/test/core/http/request_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441
similarity index 100%
rename from test/core/http/corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441
rename to test/core/http/request_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441
diff --git a/test/core/http/corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 b/test/core/http/request_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0
similarity index 100%
rename from test/core/http/corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0
rename to test/core/http/request_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0
diff --git a/test/core/http/corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 b/test/core/http/request_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47
similarity index 100%
rename from test/core/http/corpus/b04fea5c041c707db0ad9c09a81672557b52cc47
rename to test/core/http/request_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47
diff --git a/test/core/http/corpus/c4acff8aa2ff886f35439f72625d05002990c940 b/test/core/http/request_corpus/c4acff8aa2ff886f35439f72625d05002990c940
similarity index 100%
rename from test/core/http/corpus/c4acff8aa2ff886f35439f72625d05002990c940
rename to test/core/http/request_corpus/c4acff8aa2ff886f35439f72625d05002990c940
diff --git a/test/core/http/corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 b/test/core/http/request_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8
similarity index 100%
rename from test/core/http/corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8
rename to test/core/http/request_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8
diff --git a/test/core/http/corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 b/test/core/http/request_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2
similarity index 100%
rename from test/core/http/corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2
rename to test/core/http/request_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2
diff --git a/test/core/http/corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 b/test/core/http/request_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70
similarity index 100%
rename from test/core/http/corpus/cce734f1b263de6994f7950e0df7bf0c81449f70
rename to test/core/http/request_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70
diff --git a/test/core/http/corpus/d39c8ee11a697634a09b309460c0bbd967e7effa b/test/core/http/request_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa
similarity index 100%
rename from test/core/http/corpus/d39c8ee11a697634a09b309460c0bbd967e7effa
rename to test/core/http/request_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa
diff --git a/test/core/http/corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 b/test/core/http/request_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453
similarity index 100%
rename from test/core/http/corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453
rename to test/core/http/request_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453
diff --git a/test/core/http/corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 b/test/core/http/request_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629
similarity index 100%
rename from test/core/http/corpus/d51f7fcc089f269c7afecaaca51966bab5fde629
rename to test/core/http/request_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629
diff --git a/test/core/http/corpus/d936dad71c129cf659097dc3db64550c4dd467f4 b/test/core/http/request_corpus/d936dad71c129cf659097dc3db64550c4dd467f4
similarity index 100%
rename from test/core/http/corpus/d936dad71c129cf659097dc3db64550c4dd467f4
rename to test/core/http/request_corpus/d936dad71c129cf659097dc3db64550c4dd467f4
diff --git a/test/core/http/corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b b/test/core/http/request_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b
similarity index 100%
rename from test/core/http/corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b
rename to test/core/http/request_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b
diff --git a/test/core/http/corpus/e5c364b205855a2991ce07482aebb2a3a6147089 b/test/core/http/request_corpus/e5c364b205855a2991ce07482aebb2a3a6147089
similarity index 100%
rename from test/core/http/corpus/e5c364b205855a2991ce07482aebb2a3a6147089
rename to test/core/http/request_corpus/e5c364b205855a2991ce07482aebb2a3a6147089
diff --git a/test/core/http/corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb b/test/core/http/request_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb
similarity index 100%
rename from test/core/http/corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb
rename to test/core/http/request_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb
diff --git a/test/core/http/corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 b/test/core/http/request_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066
similarity index 100%
rename from test/core/http/corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066
rename to test/core/http/request_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066
diff --git a/test/core/http/corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b b/test/core/http/request_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b
similarity index 100%
rename from test/core/http/corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b
rename to test/core/http/request_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b
diff --git a/test/core/http/corpus/request1.txt b/test/core/http/request_corpus/request1.txt
similarity index 100%
rename from test/core/http/corpus/request1.txt
rename to test/core/http/request_corpus/request1.txt
diff --git a/test/core/http/corpus/request2.txt b/test/core/http/request_corpus/request2.txt
similarity index 100%
rename from test/core/http/corpus/request2.txt
rename to test/core/http/request_corpus/request2.txt
diff --git a/test/core/http/corpus/request3.txt b/test/core/http/request_corpus/request3.txt
similarity index 100%
rename from test/core/http/corpus/request3.txt
rename to test/core/http/request_corpus/request3.txt
diff --git a/test/core/http/corpus/request4.txt b/test/core/http/request_corpus/request4.txt
similarity index 100%
rename from test/core/http/corpus/request4.txt
rename to test/core/http/request_corpus/request4.txt
diff --git a/test/core/http/corpus/request5.txt b/test/core/http/request_corpus/request5.txt
similarity index 100%
rename from test/core/http/corpus/request5.txt
rename to test/core/http/request_corpus/request5.txt
diff --git a/test/core/http/corpus/response1.txt b/test/core/http/request_corpus/response1.txt
similarity index 100%
rename from test/core/http/corpus/response1.txt
rename to test/core/http/request_corpus/response1.txt
diff --git a/test/core/http/corpus/response2.txt b/test/core/http/request_corpus/response2.txt
similarity index 100%
rename from test/core/http/corpus/response2.txt
rename to test/core/http/request_corpus/response2.txt
diff --git a/test/core/http/corpus/response3.txt b/test/core/http/request_corpus/response3.txt
similarity index 100%
rename from test/core/http/corpus/response3.txt
rename to test/core/http/request_corpus/response3.txt
diff --git a/test/core/http/corpus/response4.txt b/test/core/http/request_corpus/response4.txt
similarity index 100%
rename from test/core/http/corpus/response4.txt
rename to test/core/http/request_corpus/response4.txt
diff --git a/test/core/http/corpus/response5.txt b/test/core/http/request_corpus/response5.txt
similarity index 100%
rename from test/core/http/corpus/response5.txt
rename to test/core/http/request_corpus/response5.txt
diff --git a/test/core/http/corpus/response6.txt b/test/core/http/request_corpus/response6.txt
similarity index 100%
rename from test/core/http/corpus/response6.txt
rename to test/core/http/request_corpus/response6.txt
diff --git a/test/core/http/corpus/toolong.txt b/test/core/http/request_corpus/toolong.txt
similarity index 100%
rename from test/core/http/corpus/toolong.txt
rename to test/core/http/request_corpus/toolong.txt
diff --git a/test/core/http/fuzzer.c b/test/core/http/request_fuzzer.c
similarity index 87%
rename from test/core/http/fuzzer.c
rename to test/core/http/request_fuzzer.c
index 7e4f4eb993..aac6cbb252 100644
--- a/test/core/http/fuzzer.c
+++ b/test/core/http/request_fuzzer.c
@@ -40,11 +40,14 @@
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   grpc_http_parser parser;
-  grpc_http_parser_init(&parser);
+  grpc_http_request request;
+  memset(&request, 0, sizeof(request));
+  grpc_http_parser_init(&parser, GRPC_HTTP_REQUEST, &request);
   gpr_slice slice = gpr_slice_from_copied_buffer((const char *)data, size);
-  grpc_http_parser_parse(&parser, slice);
-  grpc_http_parser_eof(&parser);
+  GRPC_ERROR_UNREF(grpc_http_parser_parse(&parser, slice));
+  GRPC_ERROR_UNREF(grpc_http_parser_eof(&parser));
   gpr_slice_unref(slice);
   grpc_http_parser_destroy(&parser);
+  grpc_http_request_destroy(&request);
   return 0;
 }
diff --git a/test/core/http/response_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427 b/test/core/http/response_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427
new file mode 100644
index 0000000000..3d6face56a
--- /dev/null
+++ b/test/core/http/response_corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427
@@ -0,0 +1,2 @@
+HTTP/1.1 �200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba b/test/core/http/response_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba
new file mode 100644
index 0000000000..5cbaf2e460
--- /dev/null
+++ b/test/core/http/response_corpus/05e613853d64a9669ea3cf41b0de777dc24931ba
@@ -0,0 +1,2 @@
+HTTP/1.1 8) pMKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/069352518a1d1baa05f317c677d275cefda2ac97 b/test/core/http/response_corpus/069352518a1d1baa05f317c677d275cefda2ac97
new file mode 100644
index 0000000000..8831f0786b
--- /dev/null
+++ b/test/core/http/response_corpus/069352518a1d1baa05f317c677d275cefda2ac97
@@ -0,0 +1,2 @@
+HTTP/1.1 80) OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34 b/test/core/http/response_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34
new file mode 100644
index 0000000000..10967d975c
--- /dev/null
+++ b/test/core/http/response_corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34
@@ -0,0 +1,2 @@
+�HTT/21. 200 HT!TP/1OKH.1HTTP 200 OKH
+tHT//1T0P.1y 2001.
\ No newline at end of file
diff --git a/test/core/http/response_corpus/0c5b7c2569410b526605e308309a7f36574e530d b/test/core/http/response_corpus/0c5b7c2569410b526605e308309a7f36574e530d
new file mode 100644
index 0000000000..c79e456904
--- /dev/null
+++ b/test/core/http/response_corpus/0c5b7c2569410b526605e308309a7f36574e530d
@@ -0,0 +1,4 @@
+H
TTP/16.1 200 OK
+test: h!ello
+
+abcd
diff --git a/test/core/http/response_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf b/test/core/http/response_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf
new file mode 100644
index 0000000000..7b979b5e10
--- /dev/null
+++ b/test/core/http/response_corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf
@@ -0,0 +1,3 @@
+HTTP/1.1 200 OKH
+tHTTP/01.021  Oes,H
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/1e1273f90187fdf5df3625764245610f86af6aa4 b/test/core/http/response_corpus/1e1273f90187fdf5df3625764245610f86af6aa4
new file mode 100644
index 0000000000..67382b4f3a
--- /dev/null
+++ b/test/core/http/response_corpus/1e1273f90187fdf5df3625764245610f86af6aa4
@@ -0,0 +1,3 @@
+HTTP/1.1 200 OKHHTTP�/1.200 OKH
+
+tHTHTTP/0 20T:tes/01.
\ No newline at end of file
diff --git a/test/core/http/response_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55 b/test/core/http/response_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55
new file mode 100644
index 0000000000..deb8265a30
--- /dev/null
+++ b/test/core/http/response_corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55
@@ -0,0 +1,3 @@
+JHTT/21. 2�0 HTTP/1.1 200 OKHHTTP�/1.200 OKH
+
+tHTHTHTJHTTPT
\ No newline at end of file
diff --git a/test/core/http/response_corpus/24756c396bc72894fd720092bb6f9c03e66b469f b/test/core/http/response_corpus/24756c396bc72894fd720092bb6f9c03e66b469f
new file mode 100644
index 0000000000..9f2e0e4a25
--- /dev/null
+++ b/test/core/http/response_corpus/24756c396bc72894fd720092bb6f9c03e66b469f
@@ -0,0 +1,2 @@
+JHTT/21. 200�HTT/0OKH.1 HTTP/200 OKH
+tH1.T
\ No newline at end of file
diff --git a/test/core/http/response_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f b/test/core/http/response_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f
new file mode 100644
index 0000000000..4db04b260a
--- /dev/null
+++ b/test/core/http/response_corpus/276def41311933421ae7a9ee42e906c85b6a4d3f
@@ -0,0 +1,2 @@
+ITTP/11 �20O HTTP/11 2*0 OKH
+	 HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/29daa75432381937fd005cb25e314e328de6e9f9 b/test/core/http/response_corpus/29daa75432381937fd005cb25e314e328de6e9f9
new file mode 100644
index 0000000000..cee70bfe71
--- /dev/null
+++ b/test/core/http/response_corpus/29daa75432381937fd005cb25e314e328de6e9f9
@@ -0,0 +1,2 @@
+JHTT�21. 200HTT/0OKH1 HTTP/100 OKH
+tH1.T
\ No newline at end of file
diff --git a/test/core/http/response_corpus/2a75204bc492084ad853682f8de3fb137d5907bc b/test/core/http/response_corpus/2a75204bc492084ad853682f8de3fb137d5907bc
new file mode 100644
index 0000000000..e76b00e34c
--- /dev/null
+++ b/test/core/http/response_corpus/2a75204bc492084ad853682f8de3fb137d5907bc
@@ -0,0 +1,2 @@
+GET / HTTHTTP/1.1 200 OKH
+t10H
\ No newline at end of file
diff --git a/test/core/http/response_corpus/2d34ba249b755a880525cf53c665633a5e359305 b/test/core/http/response_corpus/2d34ba249b755a880525cf53c665633a5e359305
new file mode 100644
index 0000000000..7435f52ea5
--- /dev/null
+++ b/test/core/http/response_corpus/2d34ba249b755a880525cf53c665633a5e359305
@@ -0,0 +1,2 @@
+ITTP/11 �20O HTTP/22 2*0 OKH
+	 HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2 b/test/core/http/response_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2
new file mode 100644
index 0000000000..cce8ded71a
--- /dev/null
+++ b/test/core/http/response_corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2
@@ -0,0 +1,2 @@
+HTTP/1*9y 200 OKm
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b b/test/core/http/response_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b
new file mode 100644
index 0000000000..57efa3cabc
--- /dev/null
+++ b/test/core/http/response_corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b
@@ -0,0 +1,4 @@
+JHTT/21. 200 HTTP/0OKH.1 200 OKH
+tHTTP/01.021  Oes,H
+t
+t
\ No newline at end of file
diff --git a/test/core/http/response_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece b/test/core/http/response_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece
new file mode 100644
index 0000000000..8df43e4dce
--- /dev/null
+++ b/test/core/http/response_corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece
@@ -0,0 +1,2 @@
+HTTP/1.9y 200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf b/test/core/http/response_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf
new file mode 100644
index 0000000000..4efa386f3b
--- /dev/null
+++ b/test/core/http/response_corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf
@@ -0,0 +1,9 @@
+HTTP/1.1 200 OKH
TTP/16.1 200 OK
+tesH
+tHTTP/00.021 :Oe�,H
+test: h!eHTTP/1.1 200 OKH
+llo
+
+abcdtH
+TTP/01.021 : Oes,H
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d b/test/core/http/response_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d
new file mode 100644
index 0000000000..f85f1df035
--- /dev/null
+++ b/test/core/http/response_corpus/3953688866ccb3b4f371f1a858570d6afdb6452d
@@ -0,0 +1,3 @@
+�HTTP/1.1 200 HH
+OK 	
TDP/01.021 : Oe:,H
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/39b19c41ba537f37511eff7727733715db432e76 b/test/core/http/response_corpus/39b19c41ba537f37511eff7727733715db432e76
new file mode 100644
index 0000000000..fefa4512a8
--- /dev/null
+++ b/test/core/http/response_corpus/39b19c41ba537f37511eff7727733715db432e76
@@ -0,0 +1,2 @@
+HTTP/1.1 000 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac b/test/core/http/response_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac
new file mode 100644
index 0000000000..b967b57614
--- /dev/null
+++ b/test/core/http/response_corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac
@@ -0,0 +1,3 @@
+HTTP/1.1 200 OKH
+tHTTP/01.021 : Oes,H
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/3f03265921120c6ffa61b944e213e062a5538d4b b/test/core/http/response_corpus/3f03265921120c6ffa61b944e213e062a5538d4b
new file mode 100644
index 0000000000..8af90071c3
--- /dev/null
+++ b/test/core/http/response_corpus/3f03265921120c6ffa61b944e213e062a5538d4b
@@ -0,0 +1,2 @@
+@TTP/1.1y 002�OKH
+ves
\ No newline at end of file
diff --git a/test/core/http/response_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046 b/test/core/http/response_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046
new file mode 100644
index 0000000000..7d20266703
--- /dev/null
+++ b/test/core/http/response_corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046
@@ -0,0 +1,2 @@
+HTTP/1.1y 200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9 b/test/core/http/response_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9
new file mode 100644
index 0000000000..5996b9a75c
--- /dev/null
+++ b/test/core/http/response_corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9
@@ -0,0 +1,4 @@
+JHTTP/1.1 +00 HTTP/1.1 200 OKHHTTPOKH
�/1.
+200 OKtH
+
+tHTH
\ No newline at end of file
diff --git a/test/core/http/response_corpus/487725eb38511c79a9340bf4560a1411061fa6fa b/test/core/http/response_corpus/487725eb38511c79a9340bf4560a1411061fa6fa
new file mode 100644
index 0000000000..c59c4d2246
--- /dev/null
+++ b/test/core/http/response_corpus/487725eb38511c79a9340bf4560a1411061fa6fa
@@ -0,0 +1,2 @@
+HTTP/01.021  O,H
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5 b/test/core/http/response_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5
new file mode 100644
index 0000000000..8ac7ceb2d5
--- /dev/null
+++ b/test/core/http/response_corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5
@@ -0,0 +1,2 @@
+ITTP/11 �20O HK
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55 b/test/core/http/response_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55
new file mode 100644
index 0000000000..49d1c8f1d2
--- /dev/null
+++ b/test/core/http/response_corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55
@@ -0,0 +1,2 @@
+HTTP/1.1 200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/5028c56a5116a186b7343ff59567b47347a0796d b/test/core/http/response_corpus/5028c56a5116a186b7343ff59567b47347a0796d
new file mode 100644
index 0000000000..5f2c4dfef0
--- /dev/null
+++ b/test/core/http/response_corpus/5028c56a5116a186b7343ff59567b47347a0796d
@@ -0,0 +1,3 @@
+HTTP/1.1 200 OKH
+	 HTDP/01.021 : Oes,H
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/533f62b3f495ce704babf3ee8d840f196a714dff b/test/core/http/response_corpus/533f62b3f495ce704babf3ee8d840f196a714dff
new file mode 100644
index 0000000000..6313cd967a
--- /dev/null
+++ b/test/core/http/response_corpus/533f62b3f495ce704babf3ee8d840f196a714dff
@@ -0,0 +1,4 @@
+JHTT/21. 200 HTTP/1OKH.1 200 OKH
+tHTTP/01.021  Oes,H
+t
+t
\ No newline at end of file
diff --git a/test/core/http/response_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104 b/test/core/http/response_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104
new file mode 100644
index 0000000000..fee5512152
--- /dev/null
+++ b/test/core/http/response_corpus/5892cbb284771fc9761caae37b19cd6e27dbc104
@@ -0,0 +1,2 @@
+J�HTTP�/1.200:OKHHT�/21. 2�0 HTTP/
+1.1 200 OKHHTtTP�
\ No newline at end of file
diff --git a/test/core/http/response_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee b/test/core/http/response_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee
new file mode 100644
index 0000000000..bd7e239537
--- /dev/null
+++ b/test/core/http/response_corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee
@@ -0,0 +1,2 @@
+ITTP/11 �20O HTTP/11 2*0 OKH
+	 HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5 b/test/core/http/response_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5
new file mode 100644
index 0000000000..9a15ab025f
--- /dev/null
+++ b/test/core/http/response_corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5
@@ -0,0 +1,2 @@
+HTTP/1. 200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0 b/test/core/http/response_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0
new file mode 100644
index 0000000000..480708e033
--- /dev/null
+++ b/test/core/http/response_corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0
@@ -0,0 +1,2 @@
+@TTP/1.1y�00'JHTTP/1.1 +00�O�H HTTP/
+ve1.1 200s
\ No newline at end of file
diff --git a/test/core/http/response_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e b/test/core/http/response_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e
new file mode 100644
index 0000000000..0ed0dfadec
--- /dev/null
+++ b/test/core/http/response_corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e
@@ -0,0 +1,2 @@
+ITTP/11 �20O HTTP/1.1 200 OKH
+	 HTDP/01.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/657368df512ca6294b9df16adf935a3f374a8be2 b/test/core/http/response_corpus/657368df512ca6294b9df16adf935a3f374a8be2
new file mode 100644
index 0000000000..1f14f69103
--- /dev/null
+++ b/test/core/http/response_corpus/657368df512ca6294b9df16adf935a3f374a8be2
@@ -0,0 +1,3 @@
+HTT
+/1.1 201 OKH
+des
\ No newline at end of file
diff --git a/test/core/http/response_corpus/7fc4520094902ce2c760d70eaad5b674d2817337 b/test/core/http/response_corpus/7fc4520094902ce2c760d70eaad5b674d2817337
new file mode 100644
index 0000000000..8fc481d92b
--- /dev/null
+++ b/test/core/http/response_corpus/7fc4520094902ce2c760d70eaad5b674d2817337
@@ -0,0 +1,5 @@
+JHTTP/1.GET / HTTP/1.0
+1 200 OKH
+
+
+t
\ No newline at end of file
diff --git a/test/core/http/response_corpus/81f59a12b458ec3604035cb962165c604d1355e6 b/test/core/http/response_corpus/81f59a12b458ec3604035cb962165c604d1355e6
new file mode 100644
index 0000000000..d4223ccf81
--- /dev/null
+++ b/test/core/http/response_corpus/81f59a12b458ec3604035cb962165c604d1355e6
@@ -0,0 +1,2 @@
+HTTP/1.1 8p) )MKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9 b/test/core/http/response_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9
new file mode 100644
index 0000000000..99e2c48bbd
--- /dev/null
+++ b/test/core/http/response_corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9
@@ -0,0 +1,4 @@
+HTTP/1.1 200 OKH
+tHTHTTP/1. 20TP/01.020(: Oes,H0 OKH
+
+tteses
\ No newline at end of file
diff --git a/test/core/http/response_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c b/test/core/http/response_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c
new file mode 100644
index 0000000000..776253d750
--- /dev/null
+++ b/test/core/http/response_corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c
@@ -0,0 +1,2 @@
+ITTp/11 �20O HTTP/*1.1 200 OKH
+	 HTDP/02.021 : OesHK
,H
diff --git a/test/core/http/response_corpus/97e4499d450c95660de86747f527e670f2012548 b/test/core/http/response_corpus/97e4499d450c95660de86747f527e670f2012548
new file mode 100644
index 0000000000..b1927fbf63
--- /dev/null
+++ b/test/core/http/response_corpus/97e4499d450c95660de86747f527e670f2012548
@@ -0,0 +1,3 @@
+HTHHTT`TT
+/1.1 201 P*/OKH
+des1.1 2T
\ No newline at end of file
diff --git a/test/core/http/response_corpus/9a996857196e0998a1278994a9bab3d35526e7f1 b/test/core/http/response_corpus/9a996857196e0998a1278994a9bab3d35526e7f1
new file mode 100644
index 0000000000..0eb2c0da3a
--- /dev/null
+++ b/test/core/http/response_corpus/9a996857196e0998a1278994a9bab3d35526e7f1
@@ -0,0 +1,2 @@
+@TTP/1.1y�002�OKH
+ves
\ No newline at end of file
diff --git a/test/core/http/response_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8 b/test/core/http/response_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8
new file mode 100644
index 0000000000..f93b9a08e3
--- /dev/null
+++ b/test/core/http/response_corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8
@@ -0,0 +1,3 @@
+�HTT/21. 200 HTTP/1.1 HT!TP/1OKH.1HTTP 200 OKH
+tHT/:/80 OKH
+1
\ No newline at end of file
diff --git a/test/core/http/response_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1 b/test/core/http/response_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1
new file mode 100644
index 0000000000..4ea07dc137
--- /dev/null
+++ b/test/core/http/response_corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1
@@ -0,0 +1,5 @@
+JHTTP/1>GET / HTTP/2.0
+1 200 OKH
+
+
+t
\ No newline at end of file
diff --git a/test/core/http/response_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85 b/test/core/http/response_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85
new file mode 100644
index 0000000000..2e95bac35c
--- /dev/null
+++ b/test/core/http/response_corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85
@@ -0,0 +1,3 @@
+�HTT/21. 200 HTTP/1.1 HT!TP/1OKH.1HTTP 200 OKH
+tHT//80) OKH
+1
\ No newline at end of file
diff --git a/test/core/http/response_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441 b/test/core/http/response_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441
new file mode 100644
index 0000000000..837449dda3
--- /dev/null
+++ b/test/core/http/response_corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441
@@ -0,0 +1,2 @@
+HTTP/1.1 80� OH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0 b/test/core/http/response_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0
new file mode 100644
index 0000000000..6075d0a5d7
--- /dev/null
+++ b/test/core/http/response_corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0
@@ -0,0 +1,17 @@
+HTTP/1.1 200 OKH
TTP/16.1 200 OK
+tesH
+tHHTTP/1.1 20TTP/00.021 :Oe�,H
+test: h!eHTTP/1.1 200 OKH
+llo
+
+abcdtH
+TTP/01.021 : Oes,0 OKH
TTP/16.1 200 OK
+tesH
+tHTTP/00.021 :Oe�,H
+test: h!eHTTP/1.1 200 OKH
+llo
+
+abcdtH
+TTP/01.021 : Oes,H
+Ht
+teses
\ No newline at end of file
diff --git a/test/core/http/response_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47 b/test/core/http/response_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47
new file mode 100644
index 0000000000..10905bed39
--- /dev/null
+++ b/test/core/http/response_corpus/b04fea5c041c707db0ad9c09a81672557b52cc47
@@ -0,0 +1,2 @@
+JHTTP/1.1 200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/c4acff8aa2ff886f35439f72625d05002990c940 b/test/core/http/response_corpus/c4acff8aa2ff886f35439f72625d05002990c940
new file mode 100644
index 0000000000..4539d9f012
--- /dev/null
+++ b/test/core/http/response_corpus/c4acff8aa2ff886f35439f72625d05002990c940
@@ -0,0 +1,4 @@
+JHTT/21. 200 HTTP/2OKH.1 200 OKH
+tHTTP/01.021  Oes,H
+t
+t
\ No newline at end of file
diff --git a/test/core/http/response_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8 b/test/core/http/response_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8
new file mode 100644
index 0000000000..2704e4fb39
--- /dev/null
+++ b/test/core/http/response_corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8
@@ -0,0 +1,2 @@
+HTTP/1.1 767) OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2 b/test/core/http/response_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2
new file mode 100644
index 0000000000..f5cbbc69e7
--- /dev/null
+++ b/test/core/http/response_corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2
@@ -0,0 +1,3 @@
+HJHTHHTT`TT
+/1.1 201 P*HHTT/T1/OKH
+des1.1 2.1T 20T1
\ No newline at end of file
diff --git a/test/core/http/response_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70 b/test/core/http/response_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70
new file mode 100644
index 0000000000..f6ea09c41b
--- /dev/null
+++ b/test/core/http/response_corpus/cce734f1b263de6994f7950e0df7bf0c81449f70
@@ -0,0 +1,3 @@
+JHTT/21. 200 HTTPHTTP/1.1 80� OH/1OKH.0 200 OKH
+tHTTP/0
+te
\ No newline at end of file
diff --git a/test/core/http/response_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa b/test/core/http/response_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa
new file mode 100644
index 0000000000..e241a0c01c
--- /dev/null
+++ b/test/core/http/response_corpus/d39c8ee11a697634a09b309460c0bbd967e7effa
@@ -0,0 +1,17 @@
+HTTP/1.1 200 OKH
TTP/16.1 200 OK
+tesHTTP/1.1 200 OKH
TTP/16.1 200 OK
+tesH
+tHTTP/00.021 :Oe�,H
+test: h!eHTTP/1.1 200H
+tHTTP/00.010 :Oe�,H
+test: h!eHTTP/1.� 200 OKH
+llo
+
+abcdtH
+TTP/01.02 : Oes,H OKH
+llo
+
+abcdtH
+TTP/01.021 : Oes
,
+H
+tteess
\ No newline at end of file
diff --git a/test/core/http/response_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453 b/test/core/http/response_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453
new file mode 100644
index 0000000000..be33d81102
--- /dev/null
+++ b/test/core/http/response_corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453
@@ -0,0 +1,3 @@
+HTTP/1.1 200 OKH
+ HTTP/01.021 : Oes,H
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629 b/test/core/http/response_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629
new file mode 100644
index 0000000000..e81a59f30b
--- /dev/null
+++ b/test/core/http/response_corpus/d51f7fcc089f269c7afecaaca51966bab5fde629
@@ -0,0 +1,2 @@
+�HTTP�/1.200:OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/d936dad71c129cf659097dc3db64550c4dd467f4 b/test/core/http/response_corpus/d936dad71c129cf659097dc3db64550c4dd467f4
new file mode 100644
index 0000000000..ccf918751d
--- /dev/null
+++ b/test/core/http/response_corpus/d936dad71c129cf659097dc3db64550c4dd467f4
@@ -0,0 +1,2 @@
+HTTP�/1.200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b b/test/core/http/response_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b
new file mode 100644
index 0000000000..b6fc095920
--- /dev/null
+++ b/test/core/http/response_corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b
@@ -0,0 +1,3 @@
+JHTT/21. 200 HTTRHTTP/1.1 0� OL/1OKH.0 200 OKH
+tHTTP/0
+te
\ No newline at end of file
diff --git a/test/core/http/response_corpus/e5c364b205855a2991ce07482aebb2a3a6147089 b/test/core/http/response_corpus/e5c364b205855a2991ce07482aebb2a3a6147089
new file mode 100644
index 0000000000..98b5f62b2a
--- /dev/null
+++ b/test/core/http/response_corpus/e5c364b205855a2991ce07482aebb2a3a6147089
@@ -0,0 +1,2 @@
+TTHP�/1.200 OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb b/test/core/http/response_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb
new file mode 100644
index 0000000000..78b36c913b
--- /dev/null
+++ b/test/core/http/response_corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb
@@ -0,0 +1,2 @@
+ITHTTTPHT/12 �2S HTKP/1.1 767) OKH
+tes
\ No newline at end of file
diff --git a/test/core/http/response_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066 b/test/core/http/response_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066
new file mode 100644
index 0000000000..06f1a3b800
--- /dev/null
+++ b/test/core/http/response_corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066
@@ -0,0 +1 @@
+HH
\ No newline at end of file
diff --git a/test/core/http/response_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b b/test/core/http/response_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b
new file mode 100644
index 0000000000..eb63d31fa5
--- /dev/null
+++ b/test/core/http/response_corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b
@@ -0,0 +1,2 @@
+ITTP/11 �20O HTTP/1.1 200 OKH
+HT 	DP/01021 : OesHK
,H
diff --git a/test/core/http/response_corpus/request1.txt b/test/core/http/response_corpus/request1.txt
new file mode 100644
index 0000000000..16a750fbf9
--- /dev/null
+++ b/test/core/http/response_corpus/request1.txt
@@ -0,0 +1,3 @@
+GET / HTTP/1.0
+
+
diff --git a/test/core/http/response_corpus/request2.txt b/test/core/http/response_corpus/request2.txt
new file mode 100644
index 0000000000..897a28406c
--- /dev/null
+++ b/test/core/http/response_corpus/request2.txt
@@ -0,0 +1,3 @@
+GET / HTTP/1.0
+Content-Length: 128
+
diff --git a/test/core/http/response_corpus/request3.txt b/test/core/http/response_corpus/request3.txt
new file mode 100644
index 0000000000..aaa75bbb52
--- /dev/null
+++ b/test/core/http/response_corpus/request3.txt
@@ -0,0 +1,3 @@
+GET / HTTP/1.1
+Content-Length: 128
+
diff --git a/test/core/http/response_corpus/request4.txt b/test/core/http/response_corpus/request4.txt
new file mode 100644
index 0000000000..593f6fa7b6
--- /dev/null
+++ b/test/core/http/response_corpus/request4.txt
@@ -0,0 +1,3 @@
+GET /foo.bar HTTP/1.1
+Content-Length: 128
+
diff --git a/test/core/http/response_corpus/request5.txt b/test/core/http/response_corpus/request5.txt
new file mode 100644
index 0000000000..19fb244355
--- /dev/null
+++ b/test/core/http/response_corpus/request5.txt
@@ -0,0 +1,3 @@
+POST / HTTP/1.0
+
+asdlfkjadsfl;akdjsfasdf
diff --git a/test/core/http/response_corpus/response1.txt b/test/core/http/response_corpus/response1.txt
new file mode 100644
index 0000000000..a17139982e
--- /dev/null
+++ b/test/core/http/response_corpus/response1.txt
@@ -0,0 +1,4 @@
+HTTP/1.1 200 OK
+test: hello
+
+abcd
diff --git a/test/core/http/response_corpus/response2.txt b/test/core/http/response_corpus/response2.txt
new file mode 100644
index 0000000000..1b86449bb6
--- /dev/null
+++ b/test/core/http/response_corpus/response2.txt
@@ -0,0 +1,4 @@
+HTTP/0.9 200 OK
+test: hello
+
+abcd
diff --git a/test/core/http/response_corpus/response3.txt b/test/core/http/response_corpus/response3.txt
new file mode 100644
index 0000000000..9e5b046c59
--- /dev/null
+++ b/test/core/http/response_corpus/response3.txt
@@ -0,0 +1,5 @@
+HTTP/0.9 200 OK
+test: hello
+content-length: 102384398
+
+abcd
diff --git a/test/core/http/response_corpus/response4.txt b/test/core/http/response_corpus/response4.txt
new file mode 100644
index 0000000000..b237b01fe0
--- /dev/null
+++ b/test/core/http/response_corpus/response4.txt
@@ -0,0 +1,2 @@
+HTTP/1.1 404 Not Found
+
diff --git a/test/core/http/response_corpus/response5.txt b/test/core/http/response_corpus/response5.txt
new file mode 100644
index 0000000000..2630595713
--- /dev/null
+++ b/test/core/http/response_corpus/response5.txt
@@ -0,0 +1,5 @@
+HTTP/0.9 200 OK
+test: hello
+content-length: 4
+
+abcd
diff --git a/test/core/http/response_corpus/response6.txt b/test/core/http/response_corpus/response6.txt
new file mode 100644
index 0000000000..797b6ee773
--- /dev/null
+++ b/test/core/http/response_corpus/response6.txt
@@ -0,0 +1,5 @@
+HTTP/0.9 200 OK
+test: hello
+content-length: 6
+
+abcd
diff --git a/test/core/http/response_corpus/toolong.txt b/test/core/http/response_corpus/toolong.txt
new file mode 100644
index 0000000000..9a9d5e2fc3
--- /dev/null
+++ b/test/core/http/response_corpus/toolong.txt
@@ -0,0 +1,2 @@
+GET / HTTP/1.1
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
diff --git a/test/core/http/response_fuzzer.c b/test/core/http/response_fuzzer.c
new file mode 100644
index 0000000000..c453e1d667
--- /dev/null
+++ b/test/core/http/response_fuzzer.c
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2015, 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 <stdint.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+
+#include "src/core/lib/http/parser.h"
+
+int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+  grpc_http_parser parser;
+  grpc_http_response response;
+  memset(&response, 0, sizeof(response));
+  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
+  gpr_slice slice = gpr_slice_from_copied_buffer((const char *)data, size);
+  GRPC_ERROR_UNREF(grpc_http_parser_parse(&parser, slice));
+  GRPC_ERROR_UNREF(grpc_http_parser_eof(&parser));
+  gpr_slice_unref(slice);
+  grpc_http_parser_destroy(&parser);
+  grpc_http_response_destroy(&response);
+  return 0;
+}
diff --git a/test/core/internal_api_canaries/iomgr.c b/test/core/internal_api_canaries/iomgr.c
index f87a80cd90..84ff8ff556 100644
--- a/test/core/internal_api_canaries/iomgr.c
+++ b/test/core/internal_api_canaries/iomgr.c
@@ -54,7 +54,7 @@ static void test_code(void) {
   grpc_closure closure;
   closure.cb = NULL;
   closure.cb_arg = NULL;
-  closure.final_data = 0;
+  closure.next_data.scratch = 0;
 
   grpc_closure_list closure_list = GRPC_CLOSURE_LIST_INIT;
   closure_list.head = NULL;
@@ -65,15 +65,14 @@ static void test_code(void) {
   grpc_closure_create(NULL, NULL);
 
   grpc_closure_list_move(NULL, NULL);
-  grpc_closure_list_add(NULL, NULL, true);
-  bool x = grpc_closure_list_empty(closure_list);
-  grpc_closure_next(&closure);
+  grpc_closure_list_append(NULL, NULL, GRPC_ERROR_CREATE("Foo"));
+  grpc_closure_list_empty(closure_list);
 
   /* exec_ctx.h */
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   grpc_exec_ctx_flush(&exec_ctx);
   grpc_exec_ctx_finish(&exec_ctx);
-  grpc_exec_ctx_enqueue(&exec_ctx, &closure, x, NULL);
+  grpc_exec_ctx_push(&exec_ctx, &closure, GRPC_ERROR_CREATE("Foo"), NULL);
   grpc_exec_ctx_enqueue_list(&exec_ctx, &closure_list, NULL);
 
   /* endpoint.h */
@@ -95,7 +94,7 @@ static void test_code(void) {
 
   /* executor.h */
   grpc_executor_init();
-  grpc_executor_enqueue(&closure, x);
+  grpc_executor_push(&closure, GRPC_ERROR_CREATE("Phi"));
   grpc_executor_shutdown();
 
   /* pollset.h */
diff --git a/test/core/iomgr/endpoint_pair_test.c b/test/core/iomgr/endpoint_pair_test.c
index 0df94a878f..99b86b6213 100644
--- a/test/core/iomgr/endpoint_pair_test.c
+++ b/test/core/iomgr/endpoint_pair_test.c
@@ -64,7 +64,8 @@ static grpc_endpoint_test_config configs[] = {
     {"tcp/tcp_socketpair", create_fixture_endpoint_pair, clean_up},
 };
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c
index f97f33712e..02a7b341de 100644
--- a/test/core/iomgr/fd_posix_test.c
+++ b/test/core/iomgr/fd_posix_test.c
@@ -133,14 +133,14 @@ static void session_shutdown_cb(grpc_exec_ctx *exec_ctx, void *arg, /*session */
 
 /* Called when data become readable in a session. */
 static void session_read_cb(grpc_exec_ctx *exec_ctx, void *arg, /*session */
-                            bool success) {
+                            grpc_error *error) {
   session *se = arg;
   int fd = grpc_fd_wrapped_fd(se->em_fd);
 
   ssize_t read_once = 0;
   ssize_t read_total = 0;
 
-  if (!success) {
+  if (error != GRPC_ERROR_NONE) {
     session_shutdown_cb(exec_ctx, arg, 1);
     return;
   }
@@ -191,7 +191,7 @@ static void listen_shutdown_cb(grpc_exec_ctx *exec_ctx, void *arg /*server */,
 
 /* Called when a new TCP connection request arrives in the listening port. */
 static void listen_cb(grpc_exec_ctx *exec_ctx, void *arg, /*=sv_arg*/
-                      bool success) {
+                      grpc_error *error) {
   server *sv = arg;
   int fd;
   int flags;
@@ -200,7 +200,7 @@ static void listen_cb(grpc_exec_ctx *exec_ctx, void *arg, /*=sv_arg*/
   socklen_t slen = sizeof(ss);
   grpc_fd *listen_em_fd = sv->em_fd;
 
-  if (!success) {
+  if (error != GRPC_ERROR_NONE) {
     listen_shutdown_cb(exec_ctx, arg, 1);
     return;
   }
@@ -305,12 +305,12 @@ static void client_session_shutdown_cb(grpc_exec_ctx *exec_ctx,
 
 /* Write as much as possible, then register notify_on_write. */
 static void client_session_write(grpc_exec_ctx *exec_ctx, void *arg, /*client */
-                                 bool success) {
+                                 grpc_error *error) {
   client *cl = arg;
   int fd = grpc_fd_wrapped_fd(cl->em_fd);
   ssize_t write_once = 0;
 
-  if (!success) {
+  if (error != GRPC_ERROR_NONE) {
     gpr_mu_lock(g_mu);
     client_session_shutdown_cb(exec_ctx, arg, 1);
     gpr_mu_unlock(g_mu);
@@ -363,7 +363,7 @@ static void client_start(grpc_exec_ctx *exec_ctx, client *cl, int port) {
   cl->em_fd = grpc_fd_create(fd, "client");
   grpc_pollset_add_fd(exec_ctx, g_pollset, cl->em_fd);
 
-  client_session_write(exec_ctx, cl, 1);
+  client_session_write(exec_ctx, cl, GRPC_ERROR_NONE);
 }
 
 /* Wait for the signal to shutdown a client. */
@@ -411,7 +411,8 @@ void init_change_data(fd_change_data *fdc) { fdc->cb_that_ran = NULL; }
 void destroy_change_data(fd_change_data *fdc) {}
 
 static void first_read_callback(grpc_exec_ctx *exec_ctx,
-                                void *arg /* fd_change_data */, bool success) {
+                                void *arg /* fd_change_data */,
+                                grpc_error *error) {
   fd_change_data *fdc = arg;
 
   gpr_mu_lock(g_mu);
@@ -421,7 +422,8 @@ static void first_read_callback(grpc_exec_ctx *exec_ctx,
 }
 
 static void second_read_callback(grpc_exec_ctx *exec_ctx,
-                                 void *arg /* fd_change_data */, bool success) {
+                                 void *arg /* fd_change_data */,
+                                 grpc_error *error) {
   fd_change_data *fdc = arg;
 
   gpr_mu_lock(g_mu);
@@ -514,7 +516,8 @@ static void test_grpc_fd_change(void) {
   close(sv[1]);
 }
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/iomgr/resolve_address_test.c b/test/core/iomgr/resolve_address_test.c
index c3ede1801d..023d7e6c68 100644
--- a/test/core/iomgr/resolve_address_test.c
+++ b/test/core/iomgr/resolve_address_test.c
@@ -42,54 +42,74 @@ static gpr_timespec test_deadline(void) {
   return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(100);
 }
 
-static void must_succeed(grpc_exec_ctx *exec_ctx, void *evp,
-                         grpc_resolved_addresses *p) {
-  GPR_ASSERT(p);
-  GPR_ASSERT(p->naddrs >= 1);
-  grpc_resolved_addresses_destroy(p);
-  gpr_event_set(evp, (void *)1);
+typedef struct args_struct {
+  gpr_event ev;
+  grpc_resolved_addresses *addrs;
+} args_struct;
+
+void args_init(args_struct *args) {
+  gpr_event_init(&args->ev);
+  args->addrs = NULL;
+}
+
+void args_finish(args_struct *args) {
+  GPR_ASSERT(gpr_event_wait(&args->ev, test_deadline()));
+  grpc_resolved_addresses_destroy(args->addrs);
+}
+
+static void must_succeed(grpc_exec_ctx *exec_ctx, void *argsp,
+                         grpc_error *err) {
+  args_struct *args = argsp;
+  GPR_ASSERT(err == GRPC_ERROR_NONE);
+  GPR_ASSERT(args->addrs != NULL);
+  GPR_ASSERT(args->addrs->naddrs > 1);
+  gpr_event_set(&args->ev, (void *)1);
 }
 
-static void must_fail(grpc_exec_ctx *exec_ctx, void *evp,
-                      grpc_resolved_addresses *p) {
-  GPR_ASSERT(!p);
-  gpr_event_set(evp, (void *)1);
+static void must_fail(grpc_exec_ctx *exec_ctx, void *argsp, grpc_error *err) {
+  args_struct *args = argsp;
+  GPR_ASSERT(err != GRPC_ERROR_NONE);
+  gpr_event_set(&args->ev, (void *)1);
 }
 
 static void test_localhost(void) {
-  gpr_event ev;
-  gpr_event_init(&ev);
+  args_struct args;
+  args_init(&args);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  grpc_resolve_address(&exec_ctx, "localhost:1", NULL, must_succeed, &ev);
+  grpc_resolve_address(&exec_ctx, "localhost:1", NULL,
+                       grpc_closure_create(must_succeed, &args), &args.addrs);
   grpc_exec_ctx_finish(&exec_ctx);
-  GPR_ASSERT(gpr_event_wait(&ev, test_deadline()));
+  args_finish(&args);
 }
 
 static void test_default_port(void) {
-  gpr_event ev;
-  gpr_event_init(&ev);
+  args_struct args;
+  args_init(&args);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  grpc_resolve_address(&exec_ctx, "localhost", "1", must_succeed, &ev);
+  grpc_resolve_address(&exec_ctx, "localhost", "1",
+                       grpc_closure_create(must_succeed, &args), &args.addrs);
   grpc_exec_ctx_finish(&exec_ctx);
-  GPR_ASSERT(gpr_event_wait(&ev, test_deadline()));
+  args_finish(&args);
 }
 
 static void test_missing_default_port(void) {
-  gpr_event ev;
-  gpr_event_init(&ev);
+  args_struct args;
+  args_init(&args);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  grpc_resolve_address(&exec_ctx, "localhost", NULL, must_fail, &ev);
+  grpc_resolve_address(&exec_ctx, "localhost", NULL,
+                       grpc_closure_create(must_fail, &args), &args.addrs);
   grpc_exec_ctx_finish(&exec_ctx);
-  GPR_ASSERT(gpr_event_wait(&ev, test_deadline()));
+  args_finish(&args);
 }
 
 static void test_ipv6_with_port(void) {
-  gpr_event ev;
-  gpr_event_init(&ev);
+  args_struct args;
+  args_init(&args);
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  grpc_resolve_address(&exec_ctx, "[2001:db8::1]:1", NULL, must_succeed, &ev);
+  grpc_resolve_address(&exec_ctx, "[2001:db8::1]:1", NULL,
+                       grpc_closure_create(must_succeed, &args), &args.addrs);
   grpc_exec_ctx_finish(&exec_ctx);
-  GPR_ASSERT(gpr_event_wait(&ev, test_deadline()));
+  args_finish(&args);
 }
 
 static void test_ipv6_without_port(void) {
@@ -98,12 +118,13 @@ static void test_ipv6_without_port(void) {
   };
   unsigned i;
   for (i = 0; i < sizeof(kCases) / sizeof(*kCases); i++) {
-    gpr_event ev;
-    gpr_event_init(&ev);
+    args_struct args;
+    args_init(&args);
     grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-    grpc_resolve_address(&exec_ctx, kCases[i], "80", must_succeed, &ev);
+    grpc_resolve_address(&exec_ctx, kCases[i], "80",
+                         grpc_closure_create(must_succeed, &args), &args.addrs);
     grpc_exec_ctx_finish(&exec_ctx);
-    GPR_ASSERT(gpr_event_wait(&ev, test_deadline()));
+    args_finish(&args);
   }
 }
 
@@ -113,12 +134,13 @@ static void test_invalid_ip_addresses(void) {
   };
   unsigned i;
   for (i = 0; i < sizeof(kCases) / sizeof(*kCases); i++) {
-    gpr_event ev;
-    gpr_event_init(&ev);
+    args_struct args;
+    args_init(&args);
     grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-    grpc_resolve_address(&exec_ctx, kCases[i], NULL, must_fail, &ev);
+    grpc_resolve_address(&exec_ctx, kCases[i], NULL,
+                         grpc_closure_create(must_fail, &args), &args.addrs);
     grpc_exec_ctx_finish(&exec_ctx);
-    GPR_ASSERT(gpr_event_wait(&ev, test_deadline()));
+    args_finish(&args);
   }
 }
 
@@ -128,12 +150,13 @@ static void test_unparseable_hostports(void) {
   };
   unsigned i;
   for (i = 0; i < sizeof(kCases) / sizeof(*kCases); i++) {
-    gpr_event ev;
-    gpr_event_init(&ev);
+    args_struct args;
+    args_init(&args);
     grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-    grpc_resolve_address(&exec_ctx, kCases[i], "1", must_fail, &ev);
+    grpc_resolve_address(&exec_ctx, kCases[i], "1",
+                         grpc_closure_create(must_fail, &args), &args.addrs);
     grpc_exec_ctx_finish(&exec_ctx);
-    GPR_ASSERT(gpr_event_wait(&ev, test_deadline()));
+    args_finish(&args);
   }
 }
 
diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c
index 22dc9366c3..d1c57ca769 100644
--- a/test/core/iomgr/tcp_client_posix_test.c
+++ b/test/core/iomgr/tcp_client_posix_test.c
@@ -67,18 +67,19 @@ static void finish_connection() {
   gpr_mu_unlock(g_mu);
 }
 
-static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg,
+                         grpc_error *error) {
   GPR_ASSERT(g_connecting != NULL);
-  GPR_ASSERT(success);
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
   grpc_endpoint_shutdown(exec_ctx, g_connecting);
   grpc_endpoint_destroy(exec_ctx, g_connecting);
   g_connecting = NULL;
   finish_connection();
 }
 
-static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
   GPR_ASSERT(g_connecting == NULL);
-  GPR_ASSERT(!success);
+  GPR_ASSERT(error != GRPC_ERROR_NONE);
   finish_connection();
 }
 
@@ -179,7 +180,8 @@ void test_fails(void) {
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c
index 7a98fa0e50..6b21f0dc27 100644
--- a/test/core/iomgr/tcp_posix_test.c
+++ b/test/core/iomgr/tcp_posix_test.c
@@ -139,12 +139,13 @@ static size_t count_slices(gpr_slice *slices, size_t nslices,
   return num_bytes;
 }
 
-static void read_cb(grpc_exec_ctx *exec_ctx, void *user_data, bool success) {
+static void read_cb(grpc_exec_ctx *exec_ctx, void *user_data,
+                    grpc_error *error) {
   struct read_socket_state *state = (struct read_socket_state *)user_data;
   size_t read_bytes;
   int current_data;
 
-  GPR_ASSERT(success);
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
 
   gpr_mu_lock(g_mu);
   current_data = state->read_bytes % 256;
@@ -281,7 +282,8 @@ static gpr_slice *allocate_blocks(size_t num_bytes, size_t slice_size,
 }
 
 static void write_done(grpc_exec_ctx *exec_ctx,
-                       void *user_data /* write_socket_state */, bool success) {
+                       void *user_data /* write_socket_state */,
+                       grpc_error *error) {
   struct write_socket_state *state = (struct write_socket_state *)user_data;
   gpr_log(GPR_INFO, "Write done callback called");
   gpr_mu_lock(g_mu);
@@ -384,7 +386,7 @@ static void write_test(size_t num_bytes, size_t slice_size) {
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
-void on_fd_released(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+void on_fd_released(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *errors) {
   int *done = arg;
   *done = 1;
   grpc_pollset_kick(g_pollset, NULL);
@@ -504,7 +506,8 @@ static grpc_endpoint_test_config configs[] = {
     {"tcp/tcp_socketpair", create_fixture_tcp_socketpair, clean_up},
 };
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c
index 266d2396af..00ec175c8f 100644
--- a/test/core/iomgr/tcp_server_posix_test.c
+++ b/test/core/iomgr/tcp_server_posix_test.c
@@ -90,7 +90,7 @@ static void on_connect_result_set(on_connect_result *result,
 }
 
 static void server_weak_ref_shutdown(grpc_exec_ctx *exec_ctx, void *arg,
-                                     bool success) {
+                                     grpc_error *error) {
   server_weak_ref *weak_ref = arg;
   weak_ref->server = NULL;
 }
@@ -126,14 +126,16 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp,
 
 static void test_no_op(void) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  grpc_tcp_server *s = grpc_tcp_server_create(NULL);
+  grpc_tcp_server *s;
+  GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s));
   grpc_tcp_server_unref(&exec_ctx, s);
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
 static void test_no_op_with_start(void) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-  grpc_tcp_server *s = grpc_tcp_server_create(NULL);
+  grpc_tcp_server *s;
+  GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s));
   LOG_TEST("test_no_op_with_start");
   grpc_tcp_server_start(&exec_ctx, s, NULL, 0, on_connect, NULL);
   grpc_tcp_server_unref(&exec_ctx, s);
@@ -143,13 +145,16 @@ static void test_no_op_with_start(void) {
 static void test_no_op_with_port(void) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   struct sockaddr_in addr;
-  grpc_tcp_server *s = grpc_tcp_server_create(NULL);
+  grpc_tcp_server *s;
+  GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s));
   LOG_TEST("test_no_op_with_port");
 
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
-  GPR_ASSERT(
-      grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr)) > 0);
+  int port;
+  GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
+                                      &port) == GRPC_ERROR_NONE &&
+             port > 0);
 
   grpc_tcp_server_unref(&exec_ctx, s);
   grpc_exec_ctx_finish(&exec_ctx);
@@ -158,13 +163,16 @@ static void test_no_op_with_port(void) {
 static void test_no_op_with_port_and_start(void) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
   struct sockaddr_in addr;
-  grpc_tcp_server *s = grpc_tcp_server_create(NULL);
+  grpc_tcp_server *s;
+  GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s));
   LOG_TEST("test_no_op_with_port_and_start");
+  int port;
 
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
-  GPR_ASSERT(
-      grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr)) > 0);
+  GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, sizeof(addr),
+                                      &port) == GRPC_ERROR_NONE &&
+             port > 0);
 
   grpc_tcp_server_start(&exec_ctx, s, NULL, 0, on_connect, NULL);
 
@@ -213,7 +221,8 @@ static void test_connect(unsigned n) {
   int svr_port;
   unsigned svr1_fd_count;
   int svr1_port;
-  grpc_tcp_server *s = grpc_tcp_server_create(NULL);
+  grpc_tcp_server *s;
+  GPR_ASSERT(GRPC_ERROR_NONE == grpc_tcp_server_create(NULL, &s));
   unsigned i;
   server_weak_ref weak_ref;
   server_weak_ref_init(&weak_ref);
@@ -222,14 +231,17 @@ static void test_connect(unsigned n) {
   memset(&addr, 0, sizeof(addr));
   memset(&addr1, 0, sizeof(addr1));
   addr.ss_family = addr1.ss_family = AF_INET;
-  svr_port = grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len);
+  GPR_ASSERT(GRPC_ERROR_NONE ==
+             grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len,
+                                      &svr_port));
   GPR_ASSERT(svr_port > 0);
   /* Cannot use wildcard (port==0), because add_port() will try to reuse the
      same port as a previous add_port(). */
   svr1_port = grpc_pick_unused_port_or_die();
   grpc_sockaddr_set_port((struct sockaddr *)&addr1, svr1_port);
-  GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr1, addr_len) ==
-             svr1_port);
+  GPR_ASSERT(grpc_tcp_server_add_port(s, (struct sockaddr *)&addr1, addr_len,
+                                      &svr_port) == GRPC_ERROR_NONE &&
+             svr_port == svr1_port);
 
   /* Bad port_index. */
   GPR_ASSERT(grpc_tcp_server_port_fd_count(s, 2) == 0);
@@ -305,7 +317,8 @@ static void test_connect(unsigned n) {
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/iomgr/timer_list_test.c b/test/core/iomgr/timer_list_test.c
index 2e0f5c8701..be8988ab75 100644
--- a/test/core/iomgr/timer_list_test.c
+++ b/test/core/iomgr/timer_list_test.c
@@ -42,8 +42,8 @@
 
 static int cb_called[MAX_CB][2];
 
-static void cb(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
-  cb_called[(intptr_t)arg][success]++;
+static void cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
+  cb_called[(intptr_t)arg][error == GRPC_ERROR_NONE]++;
 }
 
 static void add_test(void) {
diff --git a/test/core/iomgr/workqueue_test.c b/test/core/iomgr/workqueue_test.c
index 874e696fc2..2818e55b45 100644
--- a/test/core/iomgr/workqueue_test.c
+++ b/test/core/iomgr/workqueue_test.c
@@ -42,8 +42,8 @@
 static gpr_mu *g_mu;
 static grpc_pollset *g_pollset;
 
-static void must_succeed(grpc_exec_ctx *exec_ctx, void *p, bool success) {
-  GPR_ASSERT(success == 1);
+static void must_succeed(grpc_exec_ctx *exec_ctx, void *p, grpc_error *error) {
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
   gpr_mu_lock(g_mu);
   *(int *)p = 1;
   grpc_pollset_kick(g_pollset, NULL);
@@ -68,7 +68,7 @@ static void test_add_closure(void) {
   grpc_pollset_worker *worker = NULL;
   grpc_closure_init(&c, must_succeed, &done);
 
-  grpc_workqueue_push(wq, &c, 1);
+  grpc_workqueue_push(wq, &c, GRPC_ERROR_NONE);
   grpc_workqueue_add_to_pollset(&exec_ctx, wq, g_pollset);
 
   gpr_mu_lock(g_mu);
@@ -92,7 +92,7 @@ static void test_flush(void) {
   grpc_pollset_worker *worker = NULL;
   grpc_closure_init(&c, must_succeed, &done);
 
-  grpc_exec_ctx_enqueue(&exec_ctx, &c, true, NULL);
+  grpc_exec_ctx_push(&exec_ctx, &c, GRPC_ERROR_NONE, NULL);
   grpc_workqueue_flush(&exec_ctx, wq);
   grpc_workqueue_add_to_pollset(&exec_ctx, wq, g_pollset);
 
@@ -108,7 +108,8 @@ static void test_flush(void) {
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c
index 31e06372b9..eaa3563bec 100644
--- a/test/core/security/credentials_test.c
+++ b/test/core/security/credentials_test.c
@@ -549,37 +549,37 @@ static void validate_compute_engine_http_request(
 
 static int compute_engine_httpcli_get_success_override(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
-  grpc_httpcli_response response =
-      http_response(200, valid_oauth2_json_response);
+    gpr_timespec deadline, grpc_closure *on_done,
+    grpc_httpcli_response *response) {
   validate_compute_engine_http_request(request);
-  on_response(exec_ctx, user_data, &response);
+  *response = http_response(200, valid_oauth2_json_response);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
 static int compute_engine_httpcli_get_failure_override(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
-  grpc_httpcli_response response = http_response(403, "Not Authorized.");
+    gpr_timespec deadline, grpc_closure *on_done,
+    grpc_httpcli_response *response) {
   validate_compute_engine_http_request(request);
-  on_response(exec_ctx, user_data, &response);
+  *response = http_response(403, "Not Authorized.");
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
 static int httpcli_post_should_not_be_called(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
     const char *body_bytes, size_t body_size, gpr_timespec deadline,
-    grpc_httpcli_response_cb on_response, void *user_data) {
+    grpc_closure *on_done, grpc_httpcli_response *response) {
   GPR_ASSERT("HTTP POST should not be called" == NULL);
   return 1;
 }
 
-static int httpcli_get_should_not_be_called(
-    grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
+static int httpcli_get_should_not_be_called(grpc_exec_ctx *exec_ctx,
+                                            const grpc_httpcli_request *request,
+                                            gpr_timespec deadline,
+                                            grpc_closure *on_done,
+                                            grpc_httpcli_response *response) {
   GPR_ASSERT("HTTP GET should not be called" == NULL);
   return 1;
 }
@@ -653,21 +653,20 @@ static void validate_refresh_token_http_request(
 static int refresh_token_httpcli_post_success(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
     const char *body, size_t body_size, gpr_timespec deadline,
-    grpc_httpcli_response_cb on_response, void *user_data) {
-  grpc_httpcli_response response =
-      http_response(200, valid_oauth2_json_response);
+    grpc_closure *on_done, grpc_httpcli_response *response) {
   validate_refresh_token_http_request(request, body, body_size);
-  on_response(exec_ctx, user_data, &response);
+  *response = http_response(200, valid_oauth2_json_response);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
 static int refresh_token_httpcli_post_failure(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
     const char *body, size_t body_size, gpr_timespec deadline,
-    grpc_httpcli_response_cb on_response, void *user_data) {
-  grpc_httpcli_response response = http_response(403, "Not Authorized.");
+    grpc_closure *on_done, grpc_httpcli_response *response) {
   validate_refresh_token_http_request(request, body, body_size);
-  on_response(exec_ctx, user_data, &response);
+  *response = http_response(403, "Not Authorized.");
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
@@ -899,17 +898,17 @@ static void test_google_default_creds_refresh_token(void) {
 
 static int default_creds_gce_detection_httpcli_get_success_override(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
-  grpc_httpcli_response response = http_response(200, "");
+    gpr_timespec deadline, grpc_closure *on_done,
+    grpc_httpcli_response *response) {
+  *response = http_response(200, "");
   grpc_http_header header;
   header.key = "Metadata-Flavor";
   header.value = "Google";
-  response.hdr_count = 1;
-  response.hdrs = &header;
+  response->hdr_count = 1;
+  response->hdrs = &header;
   GPR_ASSERT(strcmp(request->http.path, "/") == 0);
   GPR_ASSERT(strcmp(request->host, "metadata.google.internal") == 0);
-  on_response(exec_ctx, user_data, &response);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
@@ -961,13 +960,13 @@ static void test_google_default_creds_gce(void) {
 
 static int default_creds_gce_detection_httpcli_get_failure_override(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
+    gpr_timespec deadline, grpc_closure *on_done,
+    grpc_httpcli_response *response) {
   /* No magic header. */
-  grpc_httpcli_response response = http_response(200, "");
   GPR_ASSERT(strcmp(request->http.path, "/") == 0);
   GPR_ASSERT(strcmp(request->host, "metadata.google.internal") == 0);
-  on_response(exec_ctx, user_data, &response);
+  *response = http_response(200, "");
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
diff --git a/test/core/security/jwt_verifier_test.c b/test/core/security/jwt_verifier_test.c
index 50bf25171c..79a69278be 100644
--- a/test/core/security/jwt_verifier_test.c
+++ b/test/core/security/jwt_verifier_test.c
@@ -43,8 +43,8 @@
 #include <grpc/support/string_util.h>
 
 #include "src/core/lib/http/httpcli.h"
-#include "src/core/lib/security/util/b64.h"
 #include "src/core/lib/security/credentials/jwt/json_token.h"
+#include "src/core/lib/security/util/b64.h"
 #include "test/core/util/test_config.h"
 
 /* This JSON key was generated with the GCE console and revoked immediately.
@@ -278,24 +278,23 @@ static grpc_httpcli_response http_response(int status, char *body) {
 static int httpcli_post_should_not_be_called(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
     const char *body_bytes, size_t body_size, gpr_timespec deadline,
-    grpc_httpcli_response_cb on_response, void *user_data) {
+    grpc_closure *on_done, grpc_httpcli_response *response) {
   GPR_ASSERT("HTTP POST should not be called" == NULL);
   return 1;
 }
 
 static int httpcli_get_google_keys_for_email(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
-  grpc_httpcli_response response = http_response(200, good_google_email_keys());
+    gpr_timespec deadline, grpc_closure *on_done,
+    grpc_httpcli_response *response) {
+  *response = http_response(200, good_google_email_keys());
   GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl);
   GPR_ASSERT(strcmp(request->host, "www.googleapis.com") == 0);
   GPR_ASSERT(strcmp(request->http.path,
                     "/robot/v1/metadata/x509/"
                     "777-abaslkan11hlb6nmim3bpspl31ud@developer."
                     "gserviceaccount.com") == 0);
-  on_response(exec_ctx, user_data, &response);
-  gpr_free(response.body);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
@@ -333,14 +332,13 @@ static void test_jwt_verifier_google_email_issuer_success(void) {
 
 static int httpcli_get_custom_keys_for_email(
     grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
-  grpc_httpcli_response response = http_response(200, gpr_strdup(good_jwk_set));
+    gpr_timespec deadline, grpc_closure *on_done,
+    grpc_httpcli_response *response) {
+  *response = http_response(200, gpr_strdup(good_jwk_set));
   GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl);
   GPR_ASSERT(strcmp(request->host, "keys.bar.com") == 0);
   GPR_ASSERT(strcmp(request->http.path, "/jwk/foo@bar.com") == 0);
-  on_response(exec_ctx, user_data, &response);
-  gpr_free(response.body);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
@@ -368,32 +366,28 @@ static void test_jwt_verifier_custom_email_issuer_success(void) {
 
 static int httpcli_get_jwk_set(grpc_exec_ctx *exec_ctx,
                                const grpc_httpcli_request *request,
-                               gpr_timespec deadline,
-                               grpc_httpcli_response_cb on_response,
-                               void *user_data) {
-  grpc_httpcli_response response = http_response(200, gpr_strdup(good_jwk_set));
+                               gpr_timespec deadline, grpc_closure *on_done,
+                               grpc_httpcli_response *response) {
+  *response = http_response(200, gpr_strdup(good_jwk_set));
   GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl);
   GPR_ASSERT(strcmp(request->host, "www.googleapis.com") == 0);
   GPR_ASSERT(strcmp(request->http.path, "/oauth2/v3/certs") == 0);
-  on_response(exec_ctx, user_data, &response);
-  gpr_free(response.body);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
 static int httpcli_get_openid_config(grpc_exec_ctx *exec_ctx,
                                      const grpc_httpcli_request *request,
                                      gpr_timespec deadline,
-                                     grpc_httpcli_response_cb on_response,
-                                     void *user_data) {
-  grpc_httpcli_response response =
-      http_response(200, gpr_strdup(good_openid_config));
+                                     grpc_closure *on_done,
+                                     grpc_httpcli_response *response) {
+  *response = http_response(200, gpr_strdup(good_openid_config));
   GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl);
   GPR_ASSERT(strcmp(request->host, "accounts.google.com") == 0);
   GPR_ASSERT(strcmp(request->http.path, GRPC_OPENID_CONFIG_URL_SUFFIX) == 0);
   grpc_httpcli_set_override(httpcli_get_jwk_set,
                             httpcli_post_should_not_be_called);
-  on_response(exec_ctx, user_data, &response);
-  gpr_free(response.body);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
@@ -429,14 +423,11 @@ static void on_verification_key_retrieval_error(void *user_data,
 
 static int httpcli_get_bad_json(grpc_exec_ctx *exec_ctx,
                                 const grpc_httpcli_request *request,
-                                gpr_timespec deadline,
-                                grpc_httpcli_response_cb on_response,
-                                void *user_data) {
-  grpc_httpcli_response response =
-      http_response(200, gpr_strdup("{\"bad\": \"stuff\"}"));
+                                gpr_timespec deadline, grpc_closure *on_done,
+                                grpc_httpcli_response *response) {
+  *response = http_response(200, gpr_strdup("{\"bad\": \"stuff\"}"));
   GPR_ASSERT(request->handshaker == &grpc_httpcli_ssl);
-  on_response(exec_ctx, user_data, &response);
-  gpr_free(response.body);
+  grpc_exec_ctx_push(exec_ctx, on_done, GRPC_ERROR_NONE, NULL);
   return 1;
 }
 
@@ -535,10 +526,11 @@ static void test_jwt_verifier_bad_signature(void) {
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
-static int httpcli_get_should_not_be_called(
-    grpc_exec_ctx *exec_ctx, const grpc_httpcli_request *request,
-    gpr_timespec deadline, grpc_httpcli_response_cb on_response,
-    void *user_data) {
+static int httpcli_get_should_not_be_called(grpc_exec_ctx *exec_ctx,
+                                            const grpc_httpcli_request *request,
+                                            gpr_timespec deadline,
+                                            grpc_closure *on_done,
+                                            grpc_httpcli_response *response) {
   GPR_ASSERT(0);
   return 1;
 }
diff --git a/test/core/security/print_google_default_creds_token.c b/test/core/security/print_google_default_creds_token.c
index 10a5e5224e..1b7036cf9e 100644
--- a/test/core/security/print_google_default_creds_token.c
+++ b/test/core/security/print_google_default_creds_token.c
@@ -42,8 +42,8 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/sync.h>
 
-#include "src/core/lib/security/credentials/credentials.h"
 #include "src/core/lib/security/credentials/composite/composite_credentials.h"
+#include "src/core/lib/security/credentials/credentials.h"
 #include "src/core/lib/support/string.h"
 
 typedef struct {
diff --git a/test/core/security/secure_endpoint_test.c b/test/core/security/secure_endpoint_test.c
index 6aba21a98c..1d2bf73bb1 100644
--- a/test/core/security/secure_endpoint_test.c
+++ b/test/core/security/secure_endpoint_test.c
@@ -139,7 +139,8 @@ static grpc_endpoint_test_config configs[] = {
      secure_endpoint_create_fixture_tcp_socketpair_leftover, clean_up},
 };
 
-static void inc_call_ctr(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+static void inc_call_ctr(grpc_exec_ctx *exec_ctx, void *arg,
+                         grpc_error *error) {
   ++*(int *)arg;
 }
 
@@ -172,7 +173,8 @@ static void test_leftover(grpc_endpoint_test_config config, size_t slice_size) {
   clean_up();
 }
 
-static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p, bool success) {
+static void destroy_pollset(grpc_exec_ctx *exec_ctx, void *p,
+                            grpc_error *error) {
   grpc_pollset_destroy(p);
 }
 
diff --git a/test/core/surface/completion_queue_test.c b/test/core/surface/completion_queue_test.c
index d62d5a93b1..10087780ef 100644
--- a/test/core/surface/completion_queue_test.c
+++ b/test/core/surface/completion_queue_test.c
@@ -90,8 +90,8 @@ static void test_cq_end_op(void) {
   cc = grpc_completion_queue_create(NULL);
 
   grpc_cq_begin_op(cc, tag);
-  grpc_cq_end_op(&exec_ctx, cc, tag, 1, do_nothing_end_completion, NULL,
-                 &completion);
+  grpc_cq_end_op(&exec_ctx, cc, tag, GRPC_ERROR_NONE, do_nothing_end_completion,
+                 NULL, &completion);
 
   ev = grpc_completion_queue_next(cc, gpr_inf_past(GPR_CLOCK_REALTIME), NULL);
   GPR_ASSERT(ev.type == GRPC_OP_COMPLETE);
@@ -149,8 +149,8 @@ static void test_pluck(void) {
 
   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
     grpc_cq_begin_op(cc, tags[i]);
-    grpc_cq_end_op(&exec_ctx, cc, tags[i], 1, do_nothing_end_completion, NULL,
-                   &completions[i]);
+    grpc_cq_end_op(&exec_ctx, cc, tags[i], GRPC_ERROR_NONE,
+                   do_nothing_end_completion, NULL, &completions[i]);
   }
 
   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
@@ -161,8 +161,8 @@ static void test_pluck(void) {
 
   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
     grpc_cq_begin_op(cc, tags[i]);
-    grpc_cq_end_op(&exec_ctx, cc, tags[i], 1, do_nothing_end_completion, NULL,
-                   &completions[i]);
+    grpc_cq_end_op(&exec_ctx, cc, tags[i], GRPC_ERROR_NONE,
+                   do_nothing_end_completion, NULL, &completions[i]);
   }
 
   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
@@ -234,8 +234,8 @@ static void test_too_many_plucks(void) {
 
   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
     grpc_cq_begin_op(cc, tags[i]);
-    grpc_cq_end_op(&exec_ctx, cc, tags[i], 1, do_nothing_end_completion, NULL,
-                   &completions[i]);
+    grpc_cq_end_op(&exec_ctx, cc, tags[i], GRPC_ERROR_NONE,
+                   do_nothing_end_completion, NULL, &completions[i]);
   }
 
   for (i = 0; i < GPR_ARRAY_SIZE(tags); i++) {
@@ -288,8 +288,9 @@ static void producer_thread(void *arg) {
 
   gpr_log(GPR_INFO, "producer %d phase 2", opt->id);
   for (i = 0; i < TEST_THREAD_EVENTS; i++) {
-    grpc_cq_end_op(&exec_ctx, opt->cc, (void *)(intptr_t)1, 1, free_completion,
-                   NULL, gpr_malloc(sizeof(grpc_cq_completion)));
+    grpc_cq_end_op(&exec_ctx, opt->cc, (void *)(intptr_t)1, GRPC_ERROR_NONE,
+                   free_completion, NULL,
+                   gpr_malloc(sizeof(grpc_cq_completion)));
     opt->events_triggered++;
     grpc_exec_ctx_finish(&exec_ctx);
   }
diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c
index 28ddf58cc8..4bafd35803 100644
--- a/test/core/surface/concurrent_connectivity_test.c
+++ b/test/core/surface/concurrent_connectivity_test.c
@@ -111,10 +111,13 @@ void bad_server_thread(void *vargs) {
   struct sockaddr_storage addr;
   socklen_t addr_len = sizeof(addr);
   int port;
-  grpc_tcp_server *s = grpc_tcp_server_create(NULL);
+  grpc_tcp_server *s;
+  grpc_error *error = grpc_tcp_server_create(NULL, &s);
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
   memset(&addr, 0, sizeof(addr));
   addr.ss_family = AF_INET;
-  port = grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len);
+  error =
+      grpc_tcp_server_add_port(s, (struct sockaddr *)&addr, addr_len, &port);
   GPR_ASSERT(port > 0);
   gpr_asprintf(&args->addr, "localhost:%d", port);
 
@@ -143,7 +146,7 @@ void bad_server_thread(void *vargs) {
 }
 
 static void done_pollset_shutdown(grpc_exec_ctx *exec_ctx, void *pollset,
-                                  bool success) {
+                                  grpc_error *error) {
   grpc_pollset_destroy(pollset);
   gpr_free(pollset);
 }
diff --git a/test/core/surface/lame_client_test.c b/test/core/surface/lame_client_test.c
index 12fa9de6cf..68f75bc2ab 100644
--- a/test/core/surface/lame_client_test.c
+++ b/test/core/surface/lame_client_test.c
@@ -47,13 +47,14 @@ grpc_closure transport_op_cb;
 
 static void *tag(intptr_t x) { return (void *)x; }
 
-void verify_connectivity(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
+void verify_connectivity(grpc_exec_ctx *exec_ctx, void *arg,
+                         grpc_error *error) {
   grpc_transport_op *op = arg;
   GPR_ASSERT(GRPC_CHANNEL_FATAL_FAILURE == *op->connectivity_state);
-  GPR_ASSERT(success);
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
 }
 
-void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, bool success) {}
+void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {}
 
 void test_transport_op(grpc_channel *channel) {
   grpc_transport_op op;
diff --git a/test/core/transport/connectivity_state_test.c b/test/core/transport/connectivity_state_test.c
index 6bb7c3b06b..0b7a7013b3 100644
--- a/test/core/transport/connectivity_state_test.c
+++ b/test/core/transport/connectivity_state_test.c
@@ -43,14 +43,15 @@
 
 int g_counter;
 
-static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
-  GPR_ASSERT(success);
+static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg,
+                         grpc_error *error) {
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
   GPR_ASSERT(arg == THE_ARG);
   g_counter++;
 }
 
-static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
-  GPR_ASSERT(!success);
+static void must_fail(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
+  GPR_ASSERT(error != GRPC_ERROR_NONE);
   GPR_ASSERT(arg == THE_ARG);
   g_counter++;
 }
@@ -74,9 +75,12 @@ static void test_connectivity_state_name(void) {
 static void test_check(void) {
   grpc_connectivity_state_tracker tracker;
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+  grpc_error *error;
   gpr_log(GPR_DEBUG, "test_check");
   grpc_connectivity_state_init(&tracker, GRPC_CHANNEL_IDLE, "xxx");
-  GPR_ASSERT(grpc_connectivity_state_check(&tracker) == GRPC_CHANNEL_IDLE);
+  GPR_ASSERT(grpc_connectivity_state_check(&tracker, &error) ==
+             GRPC_CHANNEL_IDLE);
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
   grpc_connectivity_state_destroy(&exec_ctx, &tracker);
   grpc_exec_ctx_finish(&exec_ctx);
 }
diff --git a/test/core/util/test_tcp_server.c b/test/core/util/test_tcp_server.c
index e39a95712c..fc89c41907 100644
--- a/test/core/util/test_tcp_server.c
+++ b/test/core/util/test_tcp_server.c
@@ -46,7 +46,7 @@
 #include "test/core/util/port.h"
 
 static void on_server_destroyed(grpc_exec_ctx *exec_ctx, void *data,
-                                bool success) {
+                                grpc_error *error) {
   test_tcp_server *server = data;
   server->shutdown = 1;
 }
@@ -72,9 +72,12 @@ void test_tcp_server_start(test_tcp_server *server, int port) {
   addr.sin_port = htons((uint16_t)port);
   memset(&addr.sin_addr, 0, sizeof(addr.sin_addr));
 
-  server->tcp_server = grpc_tcp_server_create(&server->shutdown_complete);
-  port_added =
-      grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr));
+  grpc_error *error =
+      grpc_tcp_server_create(&server->shutdown_complete, &server->tcp_server);
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
+  error = grpc_tcp_server_add_port(server->tcp_server, &addr, sizeof(addr),
+                                   &port_added);
+  GPR_ASSERT(error == GRPC_ERROR_NONE);
   GPR_ASSERT(port_added == port);
 
   grpc_tcp_server_start(&exec_ctx, server->tcp_server, &server->pollset, 1,
@@ -97,7 +100,7 @@ void test_tcp_server_poll(test_tcp_server *server, int seconds) {
   grpc_exec_ctx_finish(&exec_ctx);
 }
 
-static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, bool success) {}
+static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {}
 
 void test_tcp_server_destroy(test_tcp_server *server) {
   grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
diff --git a/tools/fuzzer/runners/http_fuzzer_test.sh b/tools/fuzzer/runners/http_request_fuzzer_test.sh
similarity index 95%
rename from tools/fuzzer/runners/http_fuzzer_test.sh
rename to tools/fuzzer/runners/http_request_fuzzer_test.sh
index d8dde1491e..250a761ac8 100644
--- a/tools/fuzzer/runners/http_fuzzer_test.sh
+++ b/tools/fuzzer/runners/http_request_fuzzer_test.sh
@@ -42,4 +42,4 @@ then
   flags="-use_traces=1 $flags"
 fi
 
-bins/$config/http_fuzzer_test $flags fuzzer_output test/core/http/corpus
+bins/$config/http_request_fuzzer_test $flags fuzzer_output test/core/http/corpus
diff --git a/tools/fuzzer/runners/http_response_fuzzer_test.sh b/tools/fuzzer/runners/http_response_fuzzer_test.sh
new file mode 100644
index 0000000000..f747739ae2
--- /dev/null
+++ b/tools/fuzzer/runners/http_response_fuzzer_test.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# 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.
+#
+
+flags="-max_total_time=$runtime -artifact_prefix=fuzzer_output/ -max_len=2048 -timeout=120"
+
+
+if [ "$jobs" != "1" ]
+then
+  flags="-jobs=$jobs -workers=$jobs $flags"
+fi
+
+if [ "$config" == "asan-trace-cmp" ]
+then
+  flags="-use_traces=1 $flags"
+fi
+
+bins/$config/http_response_fuzzer_test $flags fuzzer_output test/core/http/corpus
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 143f78f468..e57bb0be6c 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -987,9 +987,9 @@
     ], 
     "headers": [], 
     "language": "c", 
-    "name": "http_fuzzer_test", 
+    "name": "http_parser_test", 
     "src": [
-      "test/core/http/fuzzer.c"
+      "test/core/http/parser_test.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -1003,9 +1003,25 @@
     ], 
     "headers": [], 
     "language": "c", 
-    "name": "http_parser_test", 
+    "name": "http_request_fuzzer_test", 
     "src": [
-      "test/core/http/parser_test.c"
+      "test/core/http/request_fuzzer.c"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "gpr", 
+      "gpr_test_util", 
+      "grpc", 
+      "grpc_test_util"
+    ], 
+    "headers": [], 
+    "language": "c", 
+    "name": "http_response_fuzzer_test", 
+    "src": [
+      "test/core/http/response_fuzzer.c"
     ], 
     "third_party": false, 
     "type": "target"
@@ -4006,9 +4022,26 @@
     ], 
     "headers": [], 
     "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
+    "name": "http_request_fuzzer_test_one_entry", 
+    "src": [
+      "test/core/http/request_fuzzer.c", 
+      "test/core/util/one_corpus_entry_fuzzer.c"
+    ], 
+    "third_party": false, 
+    "type": "target"
+  }, 
+  {
+    "deps": [
+      "gpr", 
+      "gpr_test_util", 
+      "grpc", 
+      "grpc_test_util"
+    ], 
+    "headers": [], 
+    "language": "c", 
+    "name": "http_response_fuzzer_test_one_entry", 
     "src": [
-      "test/core/http/fuzzer.c", 
+      "test/core/http/response_fuzzer.c", 
       "test/core/util/one_corpus_entry_fuzzer.c"
     ], 
     "third_party": false, 
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index cf1154426f..20cd1d030c 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -45581,1142 +45581,6 @@
       "linux"
     ]
   }, 
-  {
-    "args": [
-      "test/core/http/corpus/0299ca2580e4398d170c4a336e0c33eb2cd9d427"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/05e613853d64a9669ea3cf41b0de777dc24931ba"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/069352518a1d1baa05f317c677d275cefda2ac97"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/0925527c9358b1e10ec0f0387cd99f35204d9a34"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/0c5b7c2569410b526605e308309a7f36574e530d"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/0ef3d0a84360bb5ad66274f1226f5cb273ecdbcf"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/1e1273f90187fdf5df3625764245610f86af6aa4"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/1fbc57d118f3733287e9a9d808bb8947b3260e55"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/24756c396bc72894fd720092bb6f9c03e66b469f"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/276def41311933421ae7a9ee42e906c85b6a4d3f"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/29daa75432381937fd005cb25e314e328de6e9f9"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/2a75204bc492084ad853682f8de3fb137d5907bc"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/2d34ba249b755a880525cf53c665633a5e359305"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/33f4ea0c7ea27c37d8f95cfa64d282370efdafd2"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/35554617ea6418bd43161fe9a2c337ed82d7ec5b"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/35f0c561297cfc840ddaeebb9fc61091f4eadece"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/3787bcc22ef645e665cc5f722b8a633af86de9cf"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/3953688866ccb3b4f371f1a858570d6afdb6452d"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/39b19c41ba537f37511eff7727733715db432e76"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/3e3c4756d5e40b5aa250954cbac86b826e70a7ac"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/3f03265921120c6ffa61b944e213e062a5538d4b"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/3fb034e66ee5494a67acae1b4e6ff64ba92a2046"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/466059ed07a0d55d6ad5e522c7d367cbf278eaf9"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/487725eb38511c79a9340bf4560a1411061fa6fa"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/48b9b205cae8ac21512a3f26f49fd53e21ee13c5"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/4b1f1f79a0bfa3f942479dd5f8edb59a7c257c55"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/5028c56a5116a186b7343ff59567b47347a0796d"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/533f62b3f495ce704babf3ee8d840f196a714dff"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/5892cbb284771fc9761caae37b19cd6e27dbc104"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/5aeab6e4f7c2a1c09d4ac0dbdb3beac4893607ee"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/5b6292bdf009b0daecbc90b85cca30a88c36eec5"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/5c1659b77678b41faa4fa13df7772dae3238d1c0"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/5c81f61621e29ec9c6a64ac3af9b3b216141618e"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/657368df512ca6294b9df16adf935a3f374a8be2"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/7fc4520094902ce2c760d70eaad5b674d2817337"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/81f59a12b458ec3604035cb962165c604d1355e6"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/8f41c50e88ee8c17ecad3d41d63d38fb12aca0b9"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/97c16de7fe3c390a2e6c09ff5c28f17d5c67542c"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/97e4499d450c95660de86747f527e670f2012548"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/9a996857196e0998a1278994a9bab3d35526e7f1"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/9b7e00049ec356ecd84b1747e4e1941140139ae8"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/9f0c38ec455cc363369b3674a2d32bc21c206de1"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/a1dc7bc235e46eb21d91084d7b52d5ff9f45df85"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/aa3bbb876eafa8ad8ca4ff2eabc6dd94341d2441"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/ae8ba95d7dbe99926a8f5bfd80347fd6a4b616a0"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/b04fea5c041c707db0ad9c09a81672557b52cc47"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/c4acff8aa2ff886f35439f72625d05002990c940"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/c55ce9995b002e88a102ae2891a71e8bacb346c8"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/ca5a0c00b8969310acb73d15ad0d0c602f1bd0c2"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/cce734f1b263de6994f7950e0df7bf0c81449f70"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/d39c8ee11a697634a09b309460c0bbd967e7effa"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/d4c3e4cf5d035596433c30eaabbd2b2925f4b453"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/d51f7fcc089f269c7afecaaca51966bab5fde629"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/d936dad71c129cf659097dc3db64550c4dd467f4"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/e275b0466a8fb8d9e0e15856e343ddc7112ae66b"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/e5c364b205855a2991ce07482aebb2a3a6147089"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/ee2077e08c3cfccd9bd82adb574ac4fc7d429afb"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/fc5d4b9117ba9e87388174aee4f4970bdfe8d066"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/fdeb2c7daa9e7704f67e141106384e6dd0042c0b"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/request1.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/request2.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/request3.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/request4.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/request5.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/response1.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/response2.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/response3.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/response4.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/response5.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/response6.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
-  {
-    "args": [
-      "test/core/http/corpus/toolong.txt"
-    ], 
-    "ci_platforms": [
-      "linux"
-    ], 
-    "cpu_cost": 0.1, 
-    "exclude_configs": [], 
-    "flaky": false, 
-    "language": "c", 
-    "name": "http_fuzzer_test_one_entry", 
-    "platforms": [
-      "linux"
-    ]
-  }, 
   {
     "args": [
       "test/core/json/corpus/006d552e952c42b5340baaeb85c2cb80c81e78dd"
-- 
GitLab