logcat: test: logrotate flags

- test -f -n and -r flags
- fix issue with parse error for sizes in bytes (no multiplier)

(cherry pick from d03caa23dd)

Bug: 16147190
Change-Id: Iadf2fd903d5e881d02f1d2b491441cc8090ee1c9
This commit is contained in:
Mark Salyzyn 2014-07-10 14:07:39 -07:00
parent e43b99a074
commit d5c417469b
1 changed files with 48 additions and 5 deletions

View File

@ -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;