|
|
|
@ -36,6 +36,10 @@ |
|
|
|
|
#include "src/core/tsi/transport_security.h" |
|
|
|
|
#include "test/core/util/test_config.h" |
|
|
|
|
|
|
|
|
|
#ifndef TSI_OPENSSL_ALPN_SUPPORT |
|
|
|
|
#define TSI_OPENSSL_ALPN_SUPPORT 1 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static int check_transport_security_type(const grpc_auth_context* ctx) { |
|
|
|
|
grpc_auth_property_iterator it = grpc_auth_context_find_properties_by_name( |
|
|
|
|
ctx, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME); |
|
|
|
@ -432,6 +436,43 @@ static void test_default_ssl_roots(void) { |
|
|
|
|
gpr_free(roots_env_var_file_path); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_peer_alpn_check(void) { |
|
|
|
|
#if TSI_OPENSSL_ALPN_SUPPORT |
|
|
|
|
tsi_peer peer; |
|
|
|
|
const char* alpn = "grpc"; |
|
|
|
|
const char* wrong_alpn = "wrong"; |
|
|
|
|
// peer does not have a TSI_SSL_ALPN_SELECTED_PROTOCOL property.
|
|
|
|
|
GPR_ASSERT(tsi_construct_peer(1, &peer) == TSI_OK); |
|
|
|
|
GPR_ASSERT(tsi_construct_string_peer_property("wrong peer property name", |
|
|
|
|
alpn, strlen(alpn), |
|
|
|
|
&peer.properties[0]) == TSI_OK); |
|
|
|
|
grpc_error* error = grpc_ssl_check_alpn(&peer); |
|
|
|
|
GPR_ASSERT(error != GRPC_ERROR_NONE); |
|
|
|
|
tsi_peer_destruct(&peer); |
|
|
|
|
GRPC_ERROR_UNREF(error); |
|
|
|
|
// peer has a TSI_SSL_ALPN_SELECTED_PROTOCOL property but with an incorrect
|
|
|
|
|
// property value.
|
|
|
|
|
GPR_ASSERT(tsi_construct_peer(1, &peer) == TSI_OK); |
|
|
|
|
GPR_ASSERT(tsi_construct_string_peer_property(TSI_SSL_ALPN_SELECTED_PROTOCOL, |
|
|
|
|
wrong_alpn, strlen(wrong_alpn), |
|
|
|
|
&peer.properties[0]) == TSI_OK); |
|
|
|
|
error = grpc_ssl_check_alpn(&peer); |
|
|
|
|
GPR_ASSERT(error != GRPC_ERROR_NONE); |
|
|
|
|
tsi_peer_destruct(&peer); |
|
|
|
|
GRPC_ERROR_UNREF(error); |
|
|
|
|
// peer has a TSI_SSL_ALPN_SELECTED_PROTOCOL property with a correct property
|
|
|
|
|
// value.
|
|
|
|
|
GPR_ASSERT(tsi_construct_peer(1, &peer) == TSI_OK); |
|
|
|
|
GPR_ASSERT(tsi_construct_string_peer_property(TSI_SSL_ALPN_SELECTED_PROTOCOL, |
|
|
|
|
alpn, strlen(alpn), |
|
|
|
|
&peer.properties[0]) == TSI_OK); |
|
|
|
|
GPR_ASSERT(grpc_ssl_check_alpn(&peer) == GRPC_ERROR_NONE); |
|
|
|
|
tsi_peer_destruct(&peer); |
|
|
|
|
#else |
|
|
|
|
GPR_ASSERT(grpc_ssl_check_alpn(nullptr) == GRPC_ERROR_NONE); |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main(int argc, char** argv) { |
|
|
|
|
grpc::testing::TestEnvironment env(argc, argv); |
|
|
|
|
grpc_init(); |
|
|
|
@ -443,7 +484,7 @@ int main(int argc, char** argv) { |
|
|
|
|
test_cn_and_multiple_sans_and_others_ssl_peer_to_auth_context(); |
|
|
|
|
test_ipv6_address_san(); |
|
|
|
|
test_default_ssl_roots(); |
|
|
|
|
|
|
|
|
|
test_peer_alpn_check(); |
|
|
|
|
grpc_shutdown(); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|