aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar ncteisen <ncteisen@gmail.com>2017-03-01 12:12:24 -0800
committerGravatar ncteisen <ncteisen@gmail.com>2017-03-02 09:52:15 -0800
commitffe4f5e0840c1879e974b2463384b0a461bba468 (patch)
treefbbaeb6cdb4d3c4c69b389bccf4a4efcbcb7840c /test
parent2316b80875854f6584ec9436d74e8f4f7af8bea4 (diff)
Fix mem leak in error_test
Diffstat (limited to 'test')
-rw-r--r--test/core/iomgr/error_test.c82
1 files changed, 42 insertions, 40 deletions
diff --git a/test/core/iomgr/error_test.c b/test/core/iomgr/error_test.c
index 5137ef9758..0452e4576a 100644
--- a/test/core/iomgr/error_test.c
+++ b/test/core/iomgr/error_test.c
@@ -43,91 +43,93 @@
#include "test/core/util/test_config.h"
-static void test_set_get_int()
-{
+static void test_set_get_int() {
grpc_error* error = GRPC_ERROR_CREATE("Test");
+ GPR_ASSERT(error);
intptr_t i = 0;
GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_FILE_LINE, &i));
- GPR_ASSERT(i); // line set will never be 0
+ GPR_ASSERT(i); // line set will never be 0
GPR_ASSERT(!grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i));
GPR_ASSERT(!grpc_error_get_int(error, GRPC_ERROR_INT_SIZE, &i));
- intptr_t errno = 314;
- error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, errno);
+ intptr_t errnumber = 314;
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, errnumber);
GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i));
- GPR_ASSERT(i == errno);
+ GPR_ASSERT(i == errnumber);
- intptr_t line = 555;
- error = grpc_error_set_int(error, GRPC_ERROR_INT_FILE_LINE, line);
- GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_FILE_LINE, &i));
- GPR_ASSERT(i == line);
+ intptr_t http = 2;
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_HTTP2_ERROR, http);
+ GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_HTTP2_ERROR, &i));
+ GPR_ASSERT(i == http);
+
+ GRPC_ERROR_UNREF(error);
}
-static void test_set_get_str()
-{
+static void test_set_get_str() {
grpc_error* error = GRPC_ERROR_CREATE("Test");
+
GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL));
GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_TSI_ERROR));
const char* c = grpc_error_get_str(error, GRPC_ERROR_STR_FILE);
GPR_ASSERT(c);
- GPR_ASSERT(!strcmp(c, "test/core/iomgr/error_test.c"));
+ GPR_ASSERT(strstr(c, "error_test.c")); // __FILE__ expands differently on
+ // Windows. All should at least
+ // contain error_test.c
c = grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION);
GPR_ASSERT(c);
GPR_ASSERT(!strcmp(c, "Test"));
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "message");
+ error =
+ grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "longer message");
c = grpc_error_get_str(error, GRPC_ERROR_STR_GRPC_MESSAGE);
GPR_ASSERT(c);
- GPR_ASSERT(!strcmp(c, "message"));
+ GPR_ASSERT(!strcmp(c, "longer message"));
- error = grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION, "new desc");
- c = grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION);
- GPR_ASSERT(c);
- GPR_ASSERT(!strcmp(c, "new desc"));
+ GRPC_ERROR_UNREF(error);
}
-static void test_copy_and_unref()
-{
- grpc_error* error1 = GRPC_ERROR_CREATE("Test");
- grpc_error* error2 = grpc_error_set_str(error1, GRPC_ERROR_STR_GRPC_MESSAGE, "message");
+static void test_copy_and_unref() {
+ // error1 has one ref
+ grpc_error* error1 = grpc_error_set_str(
+ GRPC_ERROR_CREATE("Test"), GRPC_ERROR_STR_GRPC_MESSAGE, "message");
const char* c = grpc_error_get_str(error1, GRPC_ERROR_STR_GRPC_MESSAGE);
GPR_ASSERT(c);
GPR_ASSERT(!strcmp(c, "message"));
- c = grpc_error_get_str(error2, GRPC_ERROR_STR_GRPC_MESSAGE);
- GPR_ASSERT(c);
- GPR_ASSERT(!strcmp(c, "message"));
- GPR_ASSERT(error1 == error2);
+ // error 1 has two refs
GRPC_ERROR_REF(error1);
- grpc_error* error3 = grpc_error_set_str(error1, GRPC_ERROR_STR_DESCRIPTION, "reset");
- GPR_ASSERT(error3 != error1); // should not be the same because of extra ref
+ // this gives error3 a ref to the new error, and decrements error1 to one ref
+ grpc_error* error3 =
+ grpc_error_set_str(error1, GRPC_ERROR_STR_SYSCALL, "syscall");
+ GPR_ASSERT(error3 != error1); // should not be the same because of extra ref
c = grpc_error_get_str(error3, GRPC_ERROR_STR_GRPC_MESSAGE);
GPR_ASSERT(c);
GPR_ASSERT(!strcmp(c, "message"));
- c = grpc_error_get_str(error1, GRPC_ERROR_STR_DESCRIPTION);
+ // error 1 should not have a syscall but 3 should
+ GPR_ASSERT(!grpc_error_get_str(error1, GRPC_ERROR_STR_SYSCALL));
+ c = grpc_error_get_str(error3, GRPC_ERROR_STR_SYSCALL);
GPR_ASSERT(c);
- GPR_ASSERT(!strcmp(c, "Test"));
+ GPR_ASSERT(!strcmp(c, "syscall"));
- c = grpc_error_get_str(error3, GRPC_ERROR_STR_DESCRIPTION);
- GPR_ASSERT(c);
- GPR_ASSERT(!strcmp(c, "reset"));
+ GRPC_ERROR_UNREF(error1);
+ GRPC_ERROR_UNREF(error3);
}
-static void print_error_strings()
-{
- grpc_error* error = grpc_error_set_int(GRPC_ERROR_CREATE("Error"),
- GRPC_ERROR_INT_GRPC_STATUS,
- GRPC_STATUS_UNIMPLEMENTED);
+static void print_error_strings() {
+ grpc_error* error =
+ grpc_error_set_int(GRPC_ERROR_CREATE("Error"), GRPC_ERROR_INT_GRPC_STATUS,
+ GRPC_STATUS_UNIMPLEMENTED);
error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS, 0);
error = grpc_error_set_int(error, GRPC_ERROR_INT_SIZE, 666);
error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "message");
gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
+ GRPC_ERROR_UNREF(error);
}
-int main(int argc, char **argv) {
+int main(int argc, char** argv) {
grpc_test_init(argc, argv);
grpc_init();
test_set_get_int();