blob: 9addfff2329061bc37d26a18dd2342977e41f221 [file] [log] [blame]
Deepak Lukosedba4c5f2016-03-25 12:54:25 -07001/*
2 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003 * Copyright 2015 gRPC authors.
Deepak Lukosedba4c5f2016-03-25 12:54:25 -07004 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
Deepak Lukosedba4c5f2016-03-25 12:54:25 -07008 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009 * http://www.apache.org/licenses/LICENSE-2.0
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070010 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070016 *
17 */
18
19#include "test/core/end2end/end2end_tests.h"
20
21#include <stdio.h>
22#include <string.h>
23
24#include <grpc/support/alloc.h>
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070025#include <grpc/support/log.h>
26
27#include "src/core/lib/channel/channel_args.h"
Mark D. Rothdbdf4952018-01-18 11:21:12 -080028#include "src/core/lib/gpr/env.h"
Vijay Paiae376bf2018-01-25 22:54:02 -080029#include "src/core/lib/gpr/host_port.h"
Mark D. Rothdbdf4952018-01-18 11:21:12 -080030#include "src/core/lib/gpr/string.h"
31#include "src/core/lib/gpr/tmpfile.h"
Julien Boeuf8ca294e2016-05-02 14:56:30 -070032#include "src/core/lib/security/credentials/credentials.h"
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070033#include "test/core/end2end/cq_verifier.h"
34#include "test/core/end2end/data/ssl_test_data.h"
35#include "test/core/util/port.h"
36#include "test/core/util/test_config.h"
37
Vijay Paifed13912017-10-11 00:07:00 -070038#include <gtest/gtest.h>
39
40namespace grpc {
41namespace testing {
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070042
43typedef struct fullstack_secure_fixture_data {
Craig Tillerbaa14a92017-11-03 09:09:36 -070044 char* localaddr;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070045} fullstack_secure_fixture_data;
46
47static grpc_end2end_test_fixture chttp2_create_fixture_secure_fullstack(
Craig Tillerbaa14a92017-11-03 09:09:36 -070048 grpc_channel_args* client_args, grpc_channel_args* server_args) {
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070049 grpc_end2end_test_fixture f;
50 int port = grpc_pick_unused_port_or_die();
Craig Tillerbaa14a92017-11-03 09:09:36 -070051 fullstack_secure_fixture_data* ffd =
52 static_cast<fullstack_secure_fixture_data*>(
Vijay Paifed13912017-10-11 00:07:00 -070053 gpr_malloc(sizeof(fullstack_secure_fixture_data)));
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070054 memset(&f, 0, sizeof(f));
55
56 gpr_join_host_port(&ffd->localaddr, "localhost", port);
57
58 f.fixture_data = ffd;
Craig Tiller4ac2b8e2017-11-10 14:14:17 -080059 f.cq = grpc_completion_queue_create_for_next(nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070060 return f;
61}
62
Craig Tillerbaa14a92017-11-03 09:09:36 -070063static void process_auth_failure(void* state, grpc_auth_context* ctx,
64 const grpc_metadata* md, size_t md_count,
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070065 grpc_process_auth_metadata_done_cb cb,
Craig Tillerbaa14a92017-11-03 09:09:36 -070066 void* user_data) {
Craig Tiller4ac2b8e2017-11-10 14:14:17 -080067 GPR_ASSERT(state == nullptr);
68 cb(user_data, nullptr, 0, nullptr, 0, GRPC_STATUS_UNAUTHENTICATED, nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070069}
70
71static void chttp2_init_client_secure_fullstack(
Craig Tillerbaa14a92017-11-03 09:09:36 -070072 grpc_end2end_test_fixture* f, grpc_channel_args* client_args,
73 grpc_channel_credentials* creds) {
74 fullstack_secure_fixture_data* ffd =
75 static_cast<fullstack_secure_fixture_data*>(f->fixture_data);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070076 f->client =
Craig Tiller4ac2b8e2017-11-10 14:14:17 -080077 grpc_secure_channel_create(creds, ffd->localaddr, client_args, nullptr);
78 GPR_ASSERT(f->client != nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070079 grpc_channel_credentials_release(creds);
80}
81
82static void chttp2_init_server_secure_fullstack(
Craig Tillerbaa14a92017-11-03 09:09:36 -070083 grpc_end2end_test_fixture* f, grpc_channel_args* server_args,
84 grpc_server_credentials* server_creds) {
85 fullstack_secure_fixture_data* ffd =
86 static_cast<fullstack_secure_fixture_data*>(f->fixture_data);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070087 if (f->server) {
88 grpc_server_destroy(f->server);
89 }
Craig Tiller4ac2b8e2017-11-10 14:14:17 -080090 f->server = grpc_server_create(server_args, nullptr);
91 grpc_server_register_completion_queue(f->server, f->cq, nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -070092 GPR_ASSERT(grpc_server_add_secure_http2_port(f->server, ffd->localaddr,
93 server_creds));
94 grpc_server_credentials_release(server_creds);
95 grpc_server_start(f->server);
96}
97
Craig Tillerbaa14a92017-11-03 09:09:36 -070098void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture* f) {
99 fullstack_secure_fixture_data* ffd =
100 static_cast<fullstack_secure_fixture_data*>(f->fixture_data);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700101 gpr_free(ffd->localaddr);
102 gpr_free(ffd);
103}
104
Craig Tillerbaa14a92017-11-03 09:09:36 -0700105static int fail_server_auth_check(grpc_channel_args* server_args) {
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700106 size_t i;
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800107 if (server_args == nullptr) return 0;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700108 for (i = 0; i < server_args->num_args; i++) {
109 if (strcmp(server_args->args[i].key, FAIL_AUTH_CHECK_SERVER_ARG_NAME) ==
110 0) {
111 return 1;
112 }
113 }
114 return 0;
115}
116
117#define SERVER_INIT_NAME(REQUEST_TYPE) \
118 chttp2_init_server_simple_ssl_secure_fullstack_##REQUEST_TYPE
119
120#define SERVER_INIT(REQUEST_TYPE) \
121 static void SERVER_INIT_NAME(REQUEST_TYPE)( \
122 grpc_end2end_test_fixture * f, grpc_channel_args * server_args) { \
123 grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key, \
124 test_server1_cert}; \
Craig Tillerbaa14a92017-11-03 09:09:36 -0700125 grpc_server_credentials* ssl_creds = \
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700126 grpc_ssl_server_credentials_create_ex( \
127 test_root_cert, &pem_cert_key_pair, 1, REQUEST_TYPE, NULL); \
128 if (fail_server_auth_check(server_args)) { \
129 grpc_auth_metadata_processor processor = {process_auth_failure, NULL, \
130 NULL}; \
131 grpc_server_credentials_set_auth_metadata_processor(ssl_creds, \
132 processor); \
133 } \
134 chttp2_init_server_secure_fullstack(f, server_args, ssl_creds); \
135 }
136
Craig Tiller78222f72016-05-10 09:55:38 -0700137SERVER_INIT(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE)
138SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY)
139SERVER_INIT(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY)
140SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY)
141SERVER_INIT(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY)
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700142
143#define CLIENT_INIT_NAME(cert_type) \
144 chttp2_init_client_simple_ssl_secure_fullstack_##cert_type
145
146typedef enum { NONE, SELF_SIGNED, SIGNED, BAD_CERT_PAIR } certtype;
147
Mark D. Rothd811b302016-10-31 14:45:43 -0700148#define CLIENT_INIT(cert_type) \
149 static void CLIENT_INIT_NAME(cert_type)(grpc_end2end_test_fixture * f, \
150 grpc_channel_args * client_args) { \
Craig Tillerbaa14a92017-11-03 09:09:36 -0700151 grpc_channel_credentials* ssl_creds = NULL; \
Mark D. Rothd811b302016-10-31 14:45:43 -0700152 grpc_ssl_pem_key_cert_pair self_signed_client_key_cert_pair = { \
153 test_self_signed_client_key, test_self_signed_client_cert}; \
154 grpc_ssl_pem_key_cert_pair signed_client_key_cert_pair = { \
155 test_signed_client_key, test_signed_client_cert}; \
156 grpc_ssl_pem_key_cert_pair bad_client_key_cert_pair = { \
157 test_self_signed_client_key, test_signed_client_cert}; \
Craig Tillerbaa14a92017-11-03 09:09:36 -0700158 grpc_ssl_pem_key_cert_pair* key_cert_pair = NULL; \
Mark D. Rothd811b302016-10-31 14:45:43 -0700159 switch (cert_type) { \
160 case SELF_SIGNED: \
161 key_cert_pair = &self_signed_client_key_cert_pair; \
162 break; \
163 case SIGNED: \
164 key_cert_pair = &signed_client_key_cert_pair; \
165 break; \
166 case BAD_CERT_PAIR: \
167 key_cert_pair = &bad_client_key_cert_pair; \
168 break; \
169 default: \
170 break; \
171 } \
172 ssl_creds = \
173 grpc_ssl_credentials_create(test_root_cert, key_cert_pair, NULL); \
Vijay Paifed13912017-10-11 00:07:00 -0700174 grpc_arg ssl_name_override = { \
175 GRPC_ARG_STRING, \
Craig Tillerbaa14a92017-11-03 09:09:36 -0700176 const_cast<char*>(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG), \
177 {const_cast<char*>("foo.test.google.fr")}}; \
178 grpc_channel_args* new_client_args = \
Mark D. Rothd811b302016-10-31 14:45:43 -0700179 grpc_channel_args_copy_and_add(client_args, &ssl_name_override, 1); \
180 chttp2_init_client_secure_fullstack(f, new_client_args, ssl_creds); \
Craig Tiller10cd3562016-11-09 15:20:59 -0800181 { \
Yash Tibrewal8cf14702017-12-06 09:47:54 -0800182 grpc_core::ExecCtx exec_ctx; \
183 grpc_channel_args_destroy(new_client_args); \
Craig Tiller10cd3562016-11-09 15:20:59 -0800184 } \
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700185 }
186
Craig Tiller78222f72016-05-10 09:55:38 -0700187CLIENT_INIT(NONE)
188CLIENT_INIT(SELF_SIGNED)
189CLIENT_INIT(SIGNED)
190CLIENT_INIT(BAD_CERT_PAIR)
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700191
192#define TEST_NAME(enum_name, cert_type, result) \
193 "chttp2/ssl_" #enum_name "_" #cert_type "_" #result "_"
194
195typedef enum { SUCCESS, FAIL } test_result;
196
Craig Tillerbaa14a92017-11-03 09:09:36 -0700197#define SSL_TEST(request_type, cert_type, result) \
198 { \
199 {TEST_NAME(request_type, cert_type, result), \
200 FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION | \
201 FEATURE_MASK_SUPPORTS_PER_CALL_CREDENTIALS | \
202 FEATURE_MASK_SUPPORTS_CLIENT_CHANNEL, \
203 chttp2_create_fixture_secure_fullstack, \
204 CLIENT_INIT_NAME(cert_type), \
205 SERVER_INIT_NAME(request_type), \
206 chttp2_tear_down_secure_fullstack}, \
207 result \
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700208 }
209
210/* All test configurations */
211typedef struct grpc_end2end_test_config_wrapper {
212 grpc_end2end_test_config config;
213 test_result result;
214} grpc_end2end_test_config_wrapper;
215
216static grpc_end2end_test_config_wrapper configs[] = {
217 SSL_TEST(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE, NONE, SUCCESS),
218 SSL_TEST(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE, SELF_SIGNED, SUCCESS),
219 SSL_TEST(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE, SIGNED, SUCCESS),
220 SSL_TEST(GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE, BAD_CERT_PAIR, FAIL),
221
222 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY, NONE,
223 SUCCESS),
224 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY, SELF_SIGNED,
225 SUCCESS),
226 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY, SIGNED,
227 SUCCESS),
228 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY, BAD_CERT_PAIR,
229 FAIL),
230
231 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY, NONE, SUCCESS),
232 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY, SELF_SIGNED, FAIL),
233 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY, SIGNED, SUCCESS),
234 SSL_TEST(GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY, BAD_CERT_PAIR,
235 FAIL),
236
237 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY,
238 NONE, FAIL),
239 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY,
240 SELF_SIGNED, SUCCESS),
241 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY,
242 SIGNED, SUCCESS),
243 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY,
244 BAD_CERT_PAIR, FAIL),
245
246 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY, NONE,
247 FAIL),
248 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY,
249 SELF_SIGNED, FAIL),
250 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY, SIGNED,
251 SUCCESS),
252 SSL_TEST(GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY,
253 BAD_CERT_PAIR, FAIL),
254};
255
Craig Tillerbaa14a92017-11-03 09:09:36 -0700256static void* tag(intptr_t t) { return (void*)t; }
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700257
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700258static gpr_timespec n_seconds_time(int n) {
Robbie Shadeca7effc2017-01-17 09:14:29 -0500259 return grpc_timeout_seconds_to_deadline(n);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700260}
261
262static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); }
263
Craig Tillerbaa14a92017-11-03 09:09:36 -0700264static void drain_cq(grpc_completion_queue* cq) {
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700265 grpc_event ev;
266 do {
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800267 ev = grpc_completion_queue_next(cq, five_seconds_time(), nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700268 } while (ev.type != GRPC_QUEUE_SHUTDOWN);
269}
270
Craig Tillerbaa14a92017-11-03 09:09:36 -0700271static void shutdown_server(grpc_end2end_test_fixture* f) {
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700272 if (!f->server) return;
Yash Tibrewal717fff32018-03-20 19:43:17 -0700273 grpc_server_shutdown_and_notify(f->server, f->cq, tag(1000));
274 grpc_event ev = grpc_completion_queue_next(
275 f->cq, grpc_timeout_seconds_to_deadline(5), nullptr);
276 ASSERT_EQ(ev.type, GRPC_OP_COMPLETE);
277 ASSERT_EQ(ev.tag, tag(1000));
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700278 grpc_server_destroy(f->server);
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800279 f->server = nullptr;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700280}
281
Craig Tillerbaa14a92017-11-03 09:09:36 -0700282static void shutdown_client(grpc_end2end_test_fixture* f) {
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700283 if (!f->client) return;
284 grpc_channel_destroy(f->client);
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800285 f->client = nullptr;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700286}
287
Craig Tillerbaa14a92017-11-03 09:09:36 -0700288static void end_test(grpc_end2end_test_fixture* f) {
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700289 shutdown_client(f);
Yash Tibrewaldbc52142018-01-26 14:55:32 -0800290 shutdown_server(f);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700291
292 grpc_completion_queue_shutdown(f->cq);
293 drain_cq(f->cq);
294 grpc_completion_queue_destroy(f->cq);
295}
296
297static void simple_request_body(grpc_end2end_test_fixture f,
298 test_result expected_result) {
Craig Tillerbaa14a92017-11-03 09:09:36 -0700299 grpc_call* c;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700300 gpr_timespec deadline = five_seconds_time();
Craig Tillerbaa14a92017-11-03 09:09:36 -0700301 cq_verifier* cqv = cq_verifier_create(f.cq);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700302 grpc_op ops[6];
Craig Tillerbaa14a92017-11-03 09:09:36 -0700303 grpc_op* op;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700304 grpc_call_error error;
305
Craig Tiller7c70b6c2017-01-23 07:48:42 -0800306 grpc_slice host = grpc_slice_from_static_string("foo.test.google.fr:1234");
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800307 c = grpc_channel_create_call(f.client, nullptr, GRPC_PROPAGATE_DEFAULTS, f.cq,
Craig Tiller7c70b6c2017-01-23 07:48:42 -0800308 grpc_slice_from_static_string("/foo"), &host,
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800309 deadline, nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700310 GPR_ASSERT(c);
311
David Garcia Quintasa301eaa2016-05-06 16:59:03 -0700312 memset(ops, 0, sizeof(ops));
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700313 op = ops;
314 op->op = GRPC_OP_SEND_INITIAL_METADATA;
315 op->data.send_initial_metadata.count = 0;
Craig Tiller1f710e52017-09-19 18:52:34 +0000316 op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY;
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800317 op->reserved = nullptr;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700318 op++;
Noah Eisen4d20a662018-02-09 09:34:04 -0800319 error = grpc_call_start_batch(c, ops, static_cast<size_t>(op - ops), tag(1),
320 nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700321 GPR_ASSERT(GRPC_CALL_OK == error);
322
Mark D. Roth7187ab92016-08-24 13:49:22 -0700323 CQ_EXPECT_COMPLETION(cqv, tag(1), expected_result == SUCCESS);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700324 cq_verify(cqv);
325
Craig Tillerdd36b152017-03-31 08:27:28 -0700326 grpc_call_unref(c);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700327 cq_verifier_destroy(cqv);
328}
329
Vijay Paifed13912017-10-11 00:07:00 -0700330class H2SslCertTest
331 : public ::testing::TestWithParam<grpc_end2end_test_config_wrapper> {
332 protected:
333 H2SslCertTest() {
334 gpr_log(GPR_INFO, "SSL_CERT_tests/%s", GetParam().config.name);
335 }
336 void SetUp() override {
337 fixture_ = GetParam().config.create_fixture(nullptr, nullptr);
338 GetParam().config.init_server(&fixture_, nullptr);
339 GetParam().config.init_client(&fixture_, nullptr);
340 }
341 void TearDown() override {
342 end_test(&fixture_);
343 GetParam().config.tear_down_data(&fixture_);
344 }
345
346 grpc_end2end_test_fixture fixture_;
347};
348
349TEST_P(H2SslCertTest, SimpleRequestBody) {
350 simple_request_body(fixture_, GetParam().result);
351}
352
353INSTANTIATE_TEST_CASE_P(H2SslCert, H2SslCertTest, ::testing::ValuesIn(configs));
354
355} // namespace testing
356} // namespace grpc
357
Craig Tillerbaa14a92017-11-03 09:09:36 -0700358int main(int argc, char** argv) {
359 FILE* roots_file;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700360 size_t roots_size = strlen(test_root_cert);
Craig Tillerbaa14a92017-11-03 09:09:36 -0700361 char* roots_filename;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700362
363 grpc_test_init(argc, argv);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700364 /* Set the SSL roots env var. */
365 roots_file =
366 gpr_tmpfile("chttp2_simple_ssl_cert_fullstack_test", &roots_filename);
Craig Tiller4ac2b8e2017-11-10 14:14:17 -0800367 GPR_ASSERT(roots_filename != nullptr);
368 GPR_ASSERT(roots_file != nullptr);
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700369 GPR_ASSERT(fwrite(test_root_cert, 1, roots_size, roots_file) == roots_size);
370 fclose(roots_file);
371 gpr_setenv(GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR, roots_filename);
372
373 grpc_init();
Vijay Paifed13912017-10-11 00:07:00 -0700374 ::testing::InitGoogleTest(&argc, argv);
375 int ret = RUN_ALL_TESTS();
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700376 grpc_shutdown();
377
378 /* Cleanup. */
379 remove(roots_filename);
380 gpr_free(roots_filename);
381
Vijay Paifed13912017-10-11 00:07:00 -0700382 return ret;
Deepak Lukosedba4c5f2016-03-25 12:54:25 -0700383}