diff options
Diffstat (limited to 'libc/malloc_debug/tests/malloc_debug_config_tests.cpp')
-rw-r--r-- | libc/malloc_debug/tests/malloc_debug_config_tests.cpp | 129 |
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()); +} |