1 /* 2 * 3 * Copyright 2015 gRPC authors. 4 * 5 * 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 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * 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. 16 * 17 */ 18 19 #include "test/core/end2end/end2end_tests.h" 20 21 #include <stdlib.h> 22 #include <string.h> 23 #include <unistd.h> 24 25 #include <grpc/support/alloc.h> 26 #include <grpc/support/log.h> 27 #include <grpc/support/string_util.h> 28 #include <grpc/support/sync.h> 29 30 #include "src/core/ext/filters/client_channel/client_channel.h" 31 #include "src/core/ext/filters/http/server/http_server_filter.h" 32 #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" 33 #include "src/core/lib/channel/connected_channel.h" 34 #include "src/core/lib/gpr/host_port.h" 35 #include "src/core/lib/gpr/string.h" 36 #include "src/core/lib/surface/channel.h" 37 #include "src/core/lib/surface/server.h" 38 #include "test/core/util/port.h" 39 #include "test/core/util/test_config.h" 40 41 typedef struct fullstack_fixture_data { 42 char* localaddr; 43 } fullstack_fixture_data; 44 45 static int unique = 1; 46 47 static grpc_end2end_test_fixture chttp2_create_fixture_fullstack( 48 grpc_channel_args* client_args, grpc_channel_args* server_args) { 49 grpc_end2end_test_fixture f; 50 fullstack_fixture_data* ffd = static_cast<fullstack_fixture_data*>( 51 gpr_malloc(sizeof(fullstack_fixture_data))); 52 memset(&f, 0, sizeof(f)); 53 54 gpr_asprintf(&ffd->localaddr, "unix:/tmp/grpc_fullstack_test.%d.%d", getpid(), 55 unique++); 56 57 f.fixture_data = ffd; 58 f.cq = grpc_completion_queue_create_for_next(nullptr); 59 f.shutdown_cq = grpc_completion_queue_create_for_pluck(nullptr); 60 61 return f; 62 } 63 64 void chttp2_init_client_fullstack(grpc_end2end_test_fixture* f, 65 grpc_channel_args* client_args) { 66 fullstack_fixture_data* ffd = 67 static_cast<fullstack_fixture_data*>(f->fixture_data); 68 f->client = 69 grpc_insecure_channel_create(ffd->localaddr, client_args, nullptr); 70 } 71 72 void chttp2_init_server_fullstack(grpc_end2end_test_fixture* f, 73 grpc_channel_args* server_args) { 74 fullstack_fixture_data* ffd = 75 static_cast<fullstack_fixture_data*>(f->fixture_data); 76 if (f->server) { 77 grpc_server_destroy(f->server); 78 } 79 f->server = grpc_server_create(server_args, nullptr); 80 grpc_server_register_completion_queue(f->server, f->cq, nullptr); 81 GPR_ASSERT(grpc_server_add_insecure_http2_port(f->server, ffd->localaddr)); 82 grpc_server_start(f->server); 83 } 84 85 void chttp2_tear_down_fullstack(grpc_end2end_test_fixture* f) { 86 fullstack_fixture_data* ffd = 87 static_cast<fullstack_fixture_data*>(f->fixture_data); 88 gpr_free(ffd->localaddr); 89 gpr_free(ffd); 90 } 91 92 /* All test configurations */ 93 static grpc_end2end_test_config configs[] = { 94 {"chttp2/fullstack_uds", 95 FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION | 96 FEATURE_MASK_SUPPORTS_CLIENT_CHANNEL | 97 FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER, 98 nullptr, chttp2_create_fixture_fullstack, chttp2_init_client_fullstack, 99 chttp2_init_server_fullstack, chttp2_tear_down_fullstack}, 100 }; 101 102 int main(int argc, char** argv) { 103 size_t i; 104 105 grpc_test_init(argc, argv); 106 grpc_end2end_tests_pre_init(); 107 grpc_init(); 108 109 for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) { 110 grpc_end2end_tests(argc, argv, configs[i]); 111 } 112 113 grpc_shutdown(); 114 115 return 0; 116 } 117