|
|
|
@ -33,21 +33,28 @@ TEST(ErrorTest, SetGetInt) { |
|
|
|
|
EXPECT_NE(error, absl::OkStatus()); |
|
|
|
|
intptr_t i = 0; |
|
|
|
|
#ifndef NDEBUG |
|
|
|
|
// GRPC_ERROR_INT_FILE_LINE is for debug only
|
|
|
|
|
EXPECT_TRUE(grpc_error_get_int(error, GRPC_ERROR_INT_FILE_LINE, &i)); |
|
|
|
|
// grpc_core::StatusIntProperty::kFileLine is for debug only
|
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
grpc_error_get_int(error, grpc_core::StatusIntProperty::kFileLine, &i)); |
|
|
|
|
EXPECT_TRUE(i); // line set will never be 0
|
|
|
|
|
#endif |
|
|
|
|
EXPECT_TRUE(!grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i)); |
|
|
|
|
EXPECT_TRUE(!grpc_error_get_int(error, GRPC_ERROR_INT_SIZE, &i)); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
!grpc_error_get_int(error, grpc_core::StatusIntProperty::kErrorNo, &i)); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
!grpc_error_get_int(error, grpc_core::StatusIntProperty::kSize, &i)); |
|
|
|
|
|
|
|
|
|
intptr_t errnumber = 314; |
|
|
|
|
error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, errnumber); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i)); |
|
|
|
|
error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kErrorNo, |
|
|
|
|
errnumber); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
grpc_error_get_int(error, grpc_core::StatusIntProperty::kErrorNo, &i)); |
|
|
|
|
EXPECT_EQ(i, errnumber); |
|
|
|
|
|
|
|
|
|
intptr_t http = 2; |
|
|
|
|
error = grpc_error_set_int(error, GRPC_ERROR_INT_HTTP2_ERROR, http); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_int(error, GRPC_ERROR_INT_HTTP2_ERROR, &i)); |
|
|
|
|
error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kHttp2Error, |
|
|
|
|
http); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
grpc_error_get_int(error, grpc_core::StatusIntProperty::kHttp2Error, &i)); |
|
|
|
|
EXPECT_EQ(i, http); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -55,22 +62,27 @@ TEST(ErrorTest, SetGetStr) { |
|
|
|
|
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test"); |
|
|
|
|
|
|
|
|
|
std::string str; |
|
|
|
|
EXPECT_TRUE(!grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL, &str)); |
|
|
|
|
EXPECT_TRUE(!grpc_error_get_str(error, GRPC_ERROR_STR_TSI_ERROR, &str)); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
!grpc_error_get_str(error, grpc_core::StatusStrProperty::kSyscall, &str)); |
|
|
|
|
EXPECT_TRUE(!grpc_error_get_str( |
|
|
|
|
error, grpc_core::StatusStrProperty::kTsiError, &str)); |
|
|
|
|
#ifndef NDEBUG |
|
|
|
|
// GRPC_ERROR_STR_FILE is for debug only
|
|
|
|
|
EXPECT_TRUE(grpc_error_get_str(error, GRPC_ERROR_STR_FILE, &str)); |
|
|
|
|
// grpc_core::StatusStrProperty::kFile is for debug only
|
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
grpc_error_get_str(error, grpc_core::StatusStrProperty::kFile, &str)); |
|
|
|
|
EXPECT_THAT(str, testing::HasSubstr("error_test.c")); |
|
|
|
|
// __FILE__ expands differently on
|
|
|
|
|
// Windows. All should at least
|
|
|
|
|
// contain error_test.c
|
|
|
|
|
#endif |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &str)); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str( |
|
|
|
|
error, grpc_core::StatusStrProperty::kDescription, &str)); |
|
|
|
|
EXPECT_EQ(str, "Test"); |
|
|
|
|
|
|
|
|
|
error = |
|
|
|
|
grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "longer message"); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, &str)); |
|
|
|
|
error = grpc_error_set_str(error, grpc_core::StatusStrProperty::kGrpcMessage, |
|
|
|
|
"longer message"); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str( |
|
|
|
|
error, grpc_core::StatusStrProperty::kGrpcMessage, &str)); |
|
|
|
|
EXPECT_EQ(str, "longer message"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -78,28 +90,32 @@ TEST(ErrorTest, CopyAndUnRef) { |
|
|
|
|
// error1 has one ref
|
|
|
|
|
grpc_error_handle error1 = |
|
|
|
|
grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test"), |
|
|
|
|
GRPC_ERROR_STR_GRPC_MESSAGE, "message"); |
|
|
|
|
grpc_core::StatusStrProperty::kGrpcMessage, "message"); |
|
|
|
|
std::string str; |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str(error1, GRPC_ERROR_STR_GRPC_MESSAGE, &str)); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str( |
|
|
|
|
error1, grpc_core::StatusStrProperty::kGrpcMessage, &str)); |
|
|
|
|
EXPECT_EQ(str, "message"); |
|
|
|
|
|
|
|
|
|
// this gives error3 a ref to the new error, and decrements error1 to one ref
|
|
|
|
|
grpc_error_handle error3 = |
|
|
|
|
grpc_error_set_str(error1, GRPC_ERROR_STR_SYSCALL, "syscall"); |
|
|
|
|
grpc_error_handle error3 = grpc_error_set_str( |
|
|
|
|
error1, grpc_core::StatusStrProperty::kSyscall, "syscall"); |
|
|
|
|
EXPECT_NE(error3, error1); // should not be the same because of extra ref
|
|
|
|
|
EXPECT_TRUE(grpc_error_get_str(error3, GRPC_ERROR_STR_GRPC_MESSAGE, &str)); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str( |
|
|
|
|
error3, grpc_core::StatusStrProperty::kGrpcMessage, &str)); |
|
|
|
|
EXPECT_EQ(str, "message"); |
|
|
|
|
|
|
|
|
|
// error 1 should not have a syscall but 3 should
|
|
|
|
|
EXPECT_TRUE(!grpc_error_get_str(error1, GRPC_ERROR_STR_SYSCALL, &str)); |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str(error3, GRPC_ERROR_STR_SYSCALL, &str)); |
|
|
|
|
EXPECT_TRUE(!grpc_error_get_str( |
|
|
|
|
error1, grpc_core::StatusStrProperty::kSyscall, &str)); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
grpc_error_get_str(error3, grpc_core::StatusStrProperty::kSyscall, &str)); |
|
|
|
|
EXPECT_EQ(str, "syscall"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(ErrorTest, CreateReferencing) { |
|
|
|
|
grpc_error_handle child = |
|
|
|
|
grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child"), |
|
|
|
|
GRPC_ERROR_STR_GRPC_MESSAGE, "message"); |
|
|
|
|
grpc_core::StatusStrProperty::kGrpcMessage, "message"); |
|
|
|
|
grpc_error_handle parent = |
|
|
|
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Parent", &child, 1); |
|
|
|
|
EXPECT_NE(parent, absl::OkStatus()); |
|
|
|
@ -109,13 +125,13 @@ TEST(ErrorTest, CreateReferencingMany) { |
|
|
|
|
grpc_error_handle children[3]; |
|
|
|
|
children[0] = |
|
|
|
|
grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child1"), |
|
|
|
|
GRPC_ERROR_STR_GRPC_MESSAGE, "message"); |
|
|
|
|
grpc_core::StatusStrProperty::kGrpcMessage, "message"); |
|
|
|
|
children[1] = |
|
|
|
|
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child2"), |
|
|
|
|
GRPC_ERROR_INT_HTTP2_ERROR, 5); |
|
|
|
|
children[2] = |
|
|
|
|
grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child3"), |
|
|
|
|
GRPC_ERROR_STR_GRPC_MESSAGE, "message 3"); |
|
|
|
|
grpc_core::StatusIntProperty::kHttp2Error, 5); |
|
|
|
|
children[2] = grpc_error_set_str( |
|
|
|
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child3"), |
|
|
|
|
grpc_core::StatusStrProperty::kGrpcMessage, "message 3"); |
|
|
|
|
|
|
|
|
|
grpc_error_handle parent = |
|
|
|
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Parent", children, 3); |
|
|
|
@ -126,11 +142,12 @@ TEST(ErrorTest, CreateReferencingMany) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(ErrorTest, PrintErrorString) { |
|
|
|
|
grpc_error_handle error = |
|
|
|
|
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), |
|
|
|
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNIMPLEMENTED); |
|
|
|
|
error = grpc_error_set_int(error, GRPC_ERROR_INT_SIZE, 666); |
|
|
|
|
error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "message"); |
|
|
|
|
grpc_error_handle error = grpc_error_set_int( |
|
|
|
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), |
|
|
|
|
grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNIMPLEMENTED); |
|
|
|
|
error = grpc_error_set_int(error, grpc_core::StatusIntProperty::kSize, 666); |
|
|
|
|
error = grpc_error_set_str(error, grpc_core::StatusStrProperty::kGrpcMessage, |
|
|
|
|
"message"); |
|
|
|
|
// gpr_log(GPR_DEBUG, "%s", grpc_error_std_string(error).c_str());
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -138,12 +155,14 @@ TEST(ErrorTest, PrintErrorStringReference) { |
|
|
|
|
grpc_error_handle children[2]; |
|
|
|
|
children[0] = grpc_error_set_str( |
|
|
|
|
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("1"), |
|
|
|
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNIMPLEMENTED), |
|
|
|
|
GRPC_ERROR_STR_GRPC_MESSAGE, "message for child 1"); |
|
|
|
|
grpc_core::StatusIntProperty::kRpcStatus, |
|
|
|
|
GRPC_STATUS_UNIMPLEMENTED), |
|
|
|
|
grpc_core::StatusStrProperty::kGrpcMessage, "message for child 1"); |
|
|
|
|
children[1] = grpc_error_set_str( |
|
|
|
|
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("2sd"), |
|
|
|
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL), |
|
|
|
|
GRPC_ERROR_STR_GRPC_MESSAGE, "message for child 2"); |
|
|
|
|
grpc_core::StatusIntProperty::kRpcStatus, |
|
|
|
|
GRPC_STATUS_INTERNAL), |
|
|
|
|
grpc_core::StatusStrProperty::kGrpcMessage, "message for child 2"); |
|
|
|
|
|
|
|
|
|
grpc_error_handle parent = |
|
|
|
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Parent", children, 2); |
|
|
|
@ -158,11 +177,13 @@ TEST(ErrorTest, TestOsError) { |
|
|
|
|
grpc_error_handle error = GRPC_OS_ERROR(fake_errno, syscall); |
|
|
|
|
|
|
|
|
|
intptr_t i = 0; |
|
|
|
|
EXPECT_TRUE(grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i)); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
grpc_error_get_int(error, grpc_core::StatusIntProperty::kErrorNo, &i)); |
|
|
|
|
EXPECT_EQ(i, fake_errno); |
|
|
|
|
|
|
|
|
|
std::string str; |
|
|
|
|
EXPECT_TRUE(grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL, &str)); |
|
|
|
|
EXPECT_TRUE( |
|
|
|
|
grpc_error_get_str(error, grpc_core::StatusStrProperty::kSyscall, &str)); |
|
|
|
|
EXPECT_EQ(str, syscall); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|