Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5c41746 authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

logcat: test: logrotate flags

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

(cherry pick from d03caa23)

Bug: 16147190
Change-Id: Iadf2fd903d5e881d02f1d2b491441cc8090ee1c9
parent e43b99a0
Loading
Loading
Loading
Loading
+48 −5
Original line number Diff line number Diff line
@@ -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;