summaryrefslogtreecommitdiffstats
path: root/logcat
diff options
context:
space:
mode:
Diffstat (limited to 'logcat')
-rw-r--r--logcat/tests/logcat_test.cpp53
1 files changed, 48 insertions, 5 deletions
diff --git a/logcat/tests/logcat_test.cpp b/logcat/tests/logcat_test.cpp
index 9b316d1..85756d5 100644
--- a/logcat/tests/logcat_test.cpp
+++ b/logcat/tests/logcat_test.cpp
@@ -284,21 +284,21 @@ TEST(logcat, get_size) {
while (fgets(buffer, sizeof(buffer), fp)) {
int size, consumed, max, payload;
- char size_mult, consumed_mult;
+ char size_mult[2], consumed_mult[2];
long full_size, full_consumed;
size = consumed = max = payload = 0;
// NB: crash log can be very small, not hit a Kb of consumed space
// doubly lucky we are not including it.
- if (6 != sscanf(buffer, "%*s ring buffer is %d%cb (%d%cb consumed),"
+ if (6 != sscanf(buffer, "%*s ring buffer is %d%2s (%d%2s consumed),"
" max entry is %db, max payload is %db",
- &size, &size_mult, &consumed, &consumed_mult,
+ &size, size_mult, &consumed, consumed_mult,
&max, &payload)) {
fprintf(stderr, "WARNING: Parse error: %s", buffer);
continue;
}
full_size = size;
- switch(size_mult) {
+ switch(size_mult[0]) {
case 'G':
full_size *= 1024;
/* FALLTHRU */
@@ -307,10 +307,12 @@ TEST(logcat, get_size) {
/* FALLTHRU */
case 'K':
full_size *= 1024;
+ /* FALLTHRU */
+ case 'b':
break;
}
full_consumed = consumed;
- switch(consumed_mult) {
+ switch(consumed_mult[0]) {
case 'G':
full_consumed *= 1024;
/* FALLTHRU */
@@ -319,6 +321,8 @@ TEST(logcat, get_size) {
/* FALLTHRU */
case 'K':
full_consumed *= 1024;
+ /* FALLTHRU */
+ case 'b':
break;
}
EXPECT_GT((full_size * 9) / 4, full_consumed);
@@ -477,6 +481,45 @@ TEST(logcat, blocking_tail) {
EXPECT_EQ(1, signals);
}
+TEST(logcat, logrotate) {
+ static const char form[] = "/data/local/tmp/logcat.logrotate.XXXXXX";
+ char buf[sizeof(form)];
+ ASSERT_TRUE(NULL != mkdtemp(strcpy(buf, form)));
+
+ static const char comm[] = "logcat -b radio -b events -b system -b main"
+ " -d -f %s/log.txt -n 7 -r 1";
+ char command[sizeof(buf) + sizeof(comm)];
+ sprintf(command, comm, buf);
+
+ int ret;
+ EXPECT_FALSE((ret = system(command)));
+ if (!ret) {
+ sprintf(command, "ls -s %s 2>/dev/null", buf);
+
+ FILE *fp;
+ EXPECT_TRUE(NULL != (fp = popen(command, "r")));
+ if (fp) {
+ char buffer[5120];
+ int count = 0;
+
+ while (fgets(buffer, sizeof(buffer), fp)) {
+ static const char match[] = "4 log.txt";
+ static const char total[] = "total ";
+
+ if (!strncmp(buffer, match, sizeof(match) - 1)) {
+ ++count;
+ } else if (strncmp(buffer, total, sizeof(total) - 1)) {
+ fprintf(stderr, "WARNING: Parse error: %s", buffer);
+ }
+ }
+ pclose(fp);
+ EXPECT_TRUE(count == 7 || count == 8);
+ }
+ }
+ sprintf(command, "rm -rf %s", buf);
+ EXPECT_FALSE(system(command));
+}
+
static void caught_blocking_clear(int /*signum*/)
{
unsigned long long v = 0xDEADBEEFA55C0000ULL;