summaryrefslogtreecommitdiff
path: root/libc/malloc_debug/tests/malloc_debug_config_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libc/malloc_debug/tests/malloc_debug_config_tests.cpp')
-rw-r--r--libc/malloc_debug/tests/malloc_debug_config_tests.cpp129
1 files changed, 94 insertions, 35 deletions
diff --git a/libc/malloc_debug/tests/malloc_debug_config_tests.cpp b/libc/malloc_debug/tests/malloc_debug_config_tests.cpp
index 85d5cb582..b8cf7cf23 100644
--- a/libc/malloc_debug/tests/malloc_debug_config_tests.cpp
+++ b/libc/malloc_debug/tests/malloc_debug_config_tests.cpp
@@ -113,6 +113,19 @@ std::string usage_string(
"6 malloc_debug \n"
"6 malloc_debug leak_track\n"
"6 malloc_debug Enable the leak tracking of memory allocations.\n"
+ "6 malloc_debug \n"
+ "6 malloc_debug record_allocs[=XX]\n"
+ "6 malloc_debug Record every single allocation/free call. When a specific signal\n"
+ "6 malloc_debug is sent to the process, the contents of recording are written to\n"
+ "6 malloc_debug a file (/data/local/tmp/record_allocs.txt) and the recording is cleared.\n"
+ "6 malloc_debug If XX is set, that is the total number of allocations/frees that can\n"
+ "6 malloc_debug recorded. of frames to capture. The default value is 8000000.\n"
+ "6 malloc_debug If the allocation list fills up, all further allocations are not recorded.\n"
+ "6 malloc_debug \n"
+ "6 malloc_debug record_alloc_file[=FILE]\n"
+ "6 malloc_debug This option only has meaning if the record_allocs options has been specified.\n"
+ "6 malloc_debug This is the name of the file to which recording information will be dumped.\n"
+ "6 malloc_debug The default is /data/local/tmp/record_allocs.txt.\n"
);
TEST_F(MallocDebugConfigTest, unknown_option) {
@@ -190,7 +203,7 @@ TEST_F(MallocDebugConfigTest, set_value_error) {
}
TEST_F(MallocDebugConfigTest, space_before_equal) {
- ASSERT_TRUE(InitConfig("backtrace =10"));
+ ASSERT_TRUE(InitConfig("backtrace =10")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS, config->options);
ASSERT_EQ(10U, config->backtrace_frames);
@@ -199,7 +212,7 @@ TEST_F(MallocDebugConfigTest, space_before_equal) {
}
TEST_F(MallocDebugConfigTest, space_after_equal) {
- ASSERT_TRUE(InitConfig("backtrace= 10"));
+ ASSERT_TRUE(InitConfig("backtrace= 10")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS, config->options);
ASSERT_EQ(10U, config->backtrace_frames);
@@ -208,7 +221,7 @@ TEST_F(MallocDebugConfigTest, space_after_equal) {
}
TEST_F(MallocDebugConfigTest, extra_space) {
- ASSERT_TRUE(InitConfig(" backtrace=64 "));
+ ASSERT_TRUE(InitConfig(" backtrace=64 ")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS, config->options);
ASSERT_EQ(64U, config->backtrace_frames);
@@ -217,7 +230,7 @@ TEST_F(MallocDebugConfigTest, extra_space) {
}
TEST_F(MallocDebugConfigTest, multiple_options) {
- ASSERT_TRUE(InitConfig(" backtrace=64 front_guard=48"));
+ ASSERT_TRUE(InitConfig(" backtrace=64 front_guard=48")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS | FRONT_GUARD, config->options);
ASSERT_EQ(64U, config->backtrace_frames);
ASSERT_EQ(48U, config->front_guard_bytes);
@@ -227,15 +240,15 @@ TEST_F(MallocDebugConfigTest, multiple_options) {
}
TEST_F(MallocDebugConfigTest, front_guard) {
- ASSERT_TRUE(InitConfig("front_guard=48"));
+ ASSERT_TRUE(InitConfig("front_guard=48")) << getFakeLogPrint();
ASSERT_EQ(FRONT_GUARD, config->options);
ASSERT_EQ(48U, config->front_guard_bytes);
- ASSERT_TRUE(InitConfig("front_guard"));
+ ASSERT_TRUE(InitConfig("front_guard")) << getFakeLogPrint();
ASSERT_EQ(FRONT_GUARD, config->options);
ASSERT_EQ(32U, config->front_guard_bytes);
- ASSERT_TRUE(InitConfig("front_guard=39"));
+ ASSERT_TRUE(InitConfig("front_guard=39")) << getFakeLogPrint();
ASSERT_EQ(FRONT_GUARD, config->options);
#if defined(__LP64__)
ASSERT_EQ(48U, config->front_guard_bytes);
@@ -243,7 +256,7 @@ TEST_F(MallocDebugConfigTest, front_guard) {
ASSERT_EQ(40U, config->front_guard_bytes);
#endif
- ASSERT_TRUE(InitConfig("front_guard=41"));
+ ASSERT_TRUE(InitConfig("front_guard=41")) << getFakeLogPrint();
ASSERT_EQ(FRONT_GUARD, config->options);
ASSERT_EQ(48U, config->front_guard_bytes);
@@ -252,11 +265,11 @@ TEST_F(MallocDebugConfigTest, front_guard) {
}
TEST_F(MallocDebugConfigTest, rear_guard) {
- ASSERT_TRUE(InitConfig("rear_guard=50"));
+ ASSERT_TRUE(InitConfig("rear_guard=50")) << getFakeLogPrint();
ASSERT_EQ(REAR_GUARD, config->options);
ASSERT_EQ(50U, config->rear_guard_bytes);
- ASSERT_TRUE(InitConfig("rear_guard"));
+ ASSERT_TRUE(InitConfig("rear_guard")) << getFakeLogPrint();
ASSERT_EQ(REAR_GUARD, config->options);
ASSERT_EQ(32U, config->rear_guard_bytes);
@@ -265,12 +278,12 @@ TEST_F(MallocDebugConfigTest, rear_guard) {
}
TEST_F(MallocDebugConfigTest, guard) {
- ASSERT_TRUE(InitConfig("guard=32"));
+ ASSERT_TRUE(InitConfig("guard=32")) << getFakeLogPrint();
ASSERT_EQ(FRONT_GUARD | REAR_GUARD, config->options);
ASSERT_EQ(32U, config->front_guard_bytes);
ASSERT_EQ(32U, config->rear_guard_bytes);
- ASSERT_TRUE(InitConfig("guard"));
+ ASSERT_TRUE(InitConfig("guard")) << getFakeLogPrint();
ASSERT_EQ(FRONT_GUARD | REAR_GUARD, config->options);
ASSERT_EQ(32U, config->front_guard_bytes);
ASSERT_EQ(32U, config->rear_guard_bytes);
@@ -280,11 +293,11 @@ TEST_F(MallocDebugConfigTest, guard) {
}
TEST_F(MallocDebugConfigTest, backtrace) {
- ASSERT_TRUE(InitConfig("backtrace=64"));
+ ASSERT_TRUE(InitConfig("backtrace=64")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS, config->options);
ASSERT_EQ(64U, config->backtrace_frames);
- ASSERT_TRUE(InitConfig("backtrace"));
+ ASSERT_TRUE(InitConfig("backtrace")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS, config->options);
ASSERT_EQ(16U, config->backtrace_frames);
@@ -293,11 +306,11 @@ TEST_F(MallocDebugConfigTest, backtrace) {
}
TEST_F(MallocDebugConfigTest, backtrace_enable_on_signal) {
- ASSERT_TRUE(InitConfig("backtrace_enable_on_signal=64"));
+ ASSERT_TRUE(InitConfig("backtrace_enable_on_signal=64")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS, config->options);
ASSERT_EQ(64U, config->backtrace_frames);
- ASSERT_TRUE(InitConfig("backtrace_enable_on_signal"));
+ ASSERT_TRUE(InitConfig("backtrace_enable_on_signal")) << getFakeLogPrint();
ASSERT_EQ(BACKTRACE | TRACK_ALLOCS, config->options);
ASSERT_EQ(16U, config->backtrace_frames);
@@ -306,11 +319,11 @@ TEST_F(MallocDebugConfigTest, backtrace_enable_on_signal) {
}
TEST_F(MallocDebugConfigTest, fill_on_alloc) {
- ASSERT_TRUE(InitConfig("fill_on_alloc=64"));
+ ASSERT_TRUE(InitConfig("fill_on_alloc=64")) << getFakeLogPrint();
ASSERT_EQ(FILL_ON_ALLOC, config->options);
ASSERT_EQ(64U, config->fill_on_alloc_bytes);
- ASSERT_TRUE(InitConfig("fill_on_alloc"));
+ ASSERT_TRUE(InitConfig("fill_on_alloc")) << getFakeLogPrint();
ASSERT_EQ(FILL_ON_ALLOC, config->options);
ASSERT_EQ(SIZE_MAX, config->fill_on_alloc_bytes);
@@ -319,11 +332,11 @@ TEST_F(MallocDebugConfigTest, fill_on_alloc) {
}
TEST_F(MallocDebugConfigTest, fill_on_free) {
- ASSERT_TRUE(InitConfig("fill_on_free=64"));
+ ASSERT_TRUE(InitConfig("fill_on_free=64")) << getFakeLogPrint();
ASSERT_EQ(FILL_ON_FREE, config->options);
ASSERT_EQ(64U, config->fill_on_free_bytes);
- ASSERT_TRUE(InitConfig("fill_on_free"));
+ ASSERT_TRUE(InitConfig("fill_on_free")) << getFakeLogPrint();
ASSERT_EQ(FILL_ON_FREE, config->options);
ASSERT_EQ(SIZE_MAX, config->fill_on_free_bytes);
@@ -332,12 +345,12 @@ TEST_F(MallocDebugConfigTest, fill_on_free) {
}
TEST_F(MallocDebugConfigTest, fill) {
- ASSERT_TRUE(InitConfig("fill=64"));
+ ASSERT_TRUE(InitConfig("fill=64")) << getFakeLogPrint();
ASSERT_EQ(FILL_ON_ALLOC | FILL_ON_FREE, config->options);
ASSERT_EQ(64U, config->fill_on_alloc_bytes);
ASSERT_EQ(64U, config->fill_on_free_bytes);
- ASSERT_TRUE(InitConfig("fill"));
+ ASSERT_TRUE(InitConfig("fill")) << getFakeLogPrint();
ASSERT_EQ(FILL_ON_ALLOC | FILL_ON_FREE, config->options);
ASSERT_EQ(SIZE_MAX, config->fill_on_alloc_bytes);
ASSERT_EQ(SIZE_MAX, config->fill_on_free_bytes);
@@ -347,11 +360,11 @@ TEST_F(MallocDebugConfigTest, fill) {
}
TEST_F(MallocDebugConfigTest, expand_alloc) {
- ASSERT_TRUE(InitConfig("expand_alloc=1234"));
+ ASSERT_TRUE(InitConfig("expand_alloc=1234")) << getFakeLogPrint();
ASSERT_EQ(EXPAND_ALLOC, config->options);
ASSERT_EQ(1234U, config->expand_alloc_bytes);
- ASSERT_TRUE(InitConfig("expand_alloc"));
+ ASSERT_TRUE(InitConfig("expand_alloc")) << getFakeLogPrint();
ASSERT_EQ(EXPAND_ALLOC, config->options);
ASSERT_EQ(16U, config->expand_alloc_bytes);
@@ -360,13 +373,13 @@ TEST_F(MallocDebugConfigTest, expand_alloc) {
}
TEST_F(MallocDebugConfigTest, free_track) {
- ASSERT_TRUE(InitConfig("free_track=1234"));
+ ASSERT_TRUE(InitConfig("free_track=1234")) << getFakeLogPrint();
ASSERT_EQ(FREE_TRACK | FILL_ON_FREE, config->options);
ASSERT_EQ(1234U, config->free_track_allocations);
ASSERT_EQ(SIZE_MAX, config->fill_on_free_bytes);
ASSERT_EQ(16U, config->free_track_backtrace_num_frames);
- ASSERT_TRUE(InitConfig("free_track"));
+ ASSERT_TRUE(InitConfig("free_track")) << getFakeLogPrint();
ASSERT_EQ(FREE_TRACK | FILL_ON_FREE, config->options);
ASSERT_EQ(100U, config->free_track_allocations);
ASSERT_EQ(SIZE_MAX, config->fill_on_free_bytes);
@@ -377,13 +390,13 @@ TEST_F(MallocDebugConfigTest, free_track) {
}
TEST_F(MallocDebugConfigTest, free_track_and_fill_on_free) {
- ASSERT_TRUE(InitConfig("free_track=1234 fill_on_free=32"));
+ ASSERT_TRUE(InitConfig("free_track=1234 fill_on_free=32")) << getFakeLogPrint();
ASSERT_EQ(FREE_TRACK | FILL_ON_FREE, config->options);
ASSERT_EQ(1234U, config->free_track_allocations);
ASSERT_EQ(32U, config->fill_on_free_bytes);
ASSERT_EQ(16U, config->free_track_backtrace_num_frames);
- ASSERT_TRUE(InitConfig("free_track fill_on_free=60"));
+ ASSERT_TRUE(InitConfig("free_track fill_on_free=60")) << getFakeLogPrint();
ASSERT_EQ(FREE_TRACK | FILL_ON_FREE, config->options);
ASSERT_EQ(100U, config->free_track_allocations);
ASSERT_EQ(60U, config->fill_on_free_bytes);
@@ -394,12 +407,12 @@ TEST_F(MallocDebugConfigTest, free_track_and_fill_on_free) {
}
TEST_F(MallocDebugConfigTest, free_track_backtrace_num_frames) {
- ASSERT_TRUE(InitConfig("free_track_backtrace_num_frames=123"));
+ ASSERT_TRUE(InitConfig("free_track_backtrace_num_frames=123")) << getFakeLogPrint();
ASSERT_EQ(0U, config->options);
ASSERT_EQ(123U, config->free_track_backtrace_num_frames);
- ASSERT_TRUE(InitConfig("free_track_backtrace_num_frames"));
+ ASSERT_TRUE(InitConfig("free_track_backtrace_num_frames")) << getFakeLogPrint();
ASSERT_EQ(0U, config->options);
ASSERT_EQ(16U, config->free_track_backtrace_num_frames);
@@ -408,7 +421,7 @@ TEST_F(MallocDebugConfigTest, free_track_backtrace_num_frames) {
}
TEST_F(MallocDebugConfigTest, free_track_backtrace_num_frames_zero) {
- ASSERT_TRUE(InitConfig("free_track_backtrace_num_frames=0"));
+ ASSERT_TRUE(InitConfig("free_track_backtrace_num_frames=0")) << getFakeLogPrint();
ASSERT_EQ(0U, config->options);
ASSERT_EQ(0U, config->free_track_backtrace_num_frames);
@@ -418,11 +431,11 @@ TEST_F(MallocDebugConfigTest, free_track_backtrace_num_frames_zero) {
}
TEST_F(MallocDebugConfigTest, free_track_backtrace_num_frames_and_free_track) {
- ASSERT_TRUE(InitConfig("free_track free_track_backtrace_num_frames=123"));
+ ASSERT_TRUE(InitConfig("free_track free_track_backtrace_num_frames=123")) << getFakeLogPrint();
ASSERT_EQ(FREE_TRACK | FILL_ON_FREE, config->options);
ASSERT_EQ(123U, config->free_track_backtrace_num_frames);
- ASSERT_TRUE(InitConfig("free_track free_track_backtrace_num_frames"));
+ ASSERT_TRUE(InitConfig("free_track free_track_backtrace_num_frames")) << getFakeLogPrint();
ASSERT_EQ(FREE_TRACK | FILL_ON_FREE, config->options);
ASSERT_EQ(16U, config->free_track_backtrace_num_frames);
@@ -431,7 +444,7 @@ TEST_F(MallocDebugConfigTest, free_track_backtrace_num_frames_and_free_track) {
}
TEST_F(MallocDebugConfigTest, leak_track) {
- ASSERT_TRUE(InitConfig("leak_track"));
+ ASSERT_TRUE(InitConfig("leak_track")) << getFakeLogPrint();
ASSERT_EQ(LEAK_TRACK | TRACK_ALLOCS, config->options);
ASSERT_STREQ("", getFakeLogBuf().c_str());
@@ -439,7 +452,7 @@ TEST_F(MallocDebugConfigTest, leak_track) {
}
TEST_F(MallocDebugConfigTest, leak_track_fail) {
- ASSERT_FALSE(InitConfig("leak_track=100"));
+ ASSERT_FALSE(InitConfig("leak_track=100")) << getFakeLogPrint();
ASSERT_STREQ("", getFakeLogBuf().c_str());
std::string log_msg(
@@ -448,6 +461,32 @@ TEST_F(MallocDebugConfigTest, leak_track_fail) {
ASSERT_STREQ((log_msg + usage_string).c_str(), getFakeLogPrint().c_str());
}
+TEST_F(MallocDebugConfigTest, record_allocs) {
+ ASSERT_TRUE(InitConfig("record_allocs=1234")) << getFakeLogPrint();
+ ASSERT_EQ(RECORD_ALLOCS, config->options);
+ ASSERT_EQ(1234U, config->record_allocs_num_entries);
+ ASSERT_STREQ("/data/local/tmp/record_allocs.txt", config->record_allocs_file.c_str());
+
+ ASSERT_TRUE(InitConfig("record_allocs")) << getFakeLogPrint();
+ ASSERT_EQ(RECORD_ALLOCS, config->options);
+ ASSERT_EQ(8000000U, config->record_allocs_num_entries);
+ ASSERT_STREQ("/data/local/tmp/record_allocs.txt", config->record_allocs_file.c_str());
+
+ ASSERT_STREQ("", getFakeLogBuf().c_str());
+ ASSERT_STREQ("", getFakeLogPrint().c_str());
+}
+
+TEST_F(MallocDebugConfigTest, record_allocs_file) {
+ ASSERT_TRUE(InitConfig("record_allocs=1234 record_allocs_file=/fake/file")) << getFakeLogPrint();
+ ASSERT_STREQ("/fake/file", config->record_allocs_file.c_str());
+
+ ASSERT_TRUE(InitConfig("record_allocs_file")) << getFakeLogPrint();
+ ASSERT_STREQ("/data/local/tmp/record_allocs.txt", config->record_allocs_file.c_str());
+
+ ASSERT_STREQ("", getFakeLogBuf().c_str());
+ ASSERT_STREQ("", getFakeLogPrint().c_str());
+}
+
TEST_F(MallocDebugConfigTest, guard_min_error) {
ASSERT_FALSE(InitConfig("guard=0"));
@@ -626,3 +665,23 @@ TEST_F(MallocDebugConfigTest, free_track_backtrace_num_frames_max_error) {
"value must be <= 256: 400\n");
ASSERT_STREQ((log_msg + usage_string).c_str(), getFakeLogPrint().c_str());
}
+
+TEST_F(MallocDebugConfigTest, record_alloc_min_error) {
+ ASSERT_FALSE(InitConfig("record_allocs=0"));
+
+ ASSERT_STREQ("", getFakeLogBuf().c_str());
+ std::string log_msg(
+ "6 malloc_debug malloc_testing: bad value for option 'record_allocs', "
+ "value must be >= 1: 0\n");
+ ASSERT_STREQ((log_msg + usage_string).c_str(), getFakeLogPrint().c_str());
+}
+
+TEST_F(MallocDebugConfigTest, record_allocs_max_error) {
+ ASSERT_FALSE(InitConfig("record_allocs=100000000"));
+
+ ASSERT_STREQ("", getFakeLogBuf().c_str());
+ std::string log_msg(
+ "6 malloc_debug malloc_testing: bad value for option 'record_allocs', "
+ "value must be <= 50000000: 100000000\n");
+ ASSERT_STREQ((log_msg + usage_string).c_str(), getFakeLogPrint().c_str());
+}