Merge "logcat: test: inject messages if necessary for tail test requirements" am: d965fbfc9a am: 2256a8d13e am: 568ae3226e

am: ee4baa9f01

Change-Id: I1959e75f38d271c50bc5efdc6aa62e52db9a0b9f
This commit is contained in:
Mark Salyzyn 2017-01-23 23:39:52 +00:00 committed by android-build-merger
commit 933d02818b
1 changed files with 59 additions and 20 deletions

View File

@ -23,6 +23,7 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <memory>
#include <string>
@ -54,6 +55,11 @@ static const char begin[] = "--------- beginning of ";
TEST(logcat, buckets) {
FILE *fp;
#undef LOG_TAG
#define LOG_TAG "inject"
RLOGE("logcat.buckets");
sleep(1);
ASSERT_TRUE(NULL != (fp = popen(
"logcat -b radio -b events -b system -b main -d 2>/dev/null",
"r")));
@ -165,13 +171,39 @@ char *fgetLongTime(char *buffer, size_t buflen, FILE *fp) {
if (!ep) {
continue;
}
ep -= 7;
static const size_t tag_field_width = 7;
ep -= tag_field_width;
*ep = '\0';
return cp;
}
return NULL;
}
// If there is not enough background noise in the logs, then spam the logs to
// permit tail checking so that the tests can progress.
static size_t inject(ssize_t count) {
if (count <= 0) return 0;
static const size_t retry = 3;
size_t errors = retry;
size_t num = 0;
for(;;) {
log_time ts(CLOCK_MONOTONIC);
if (__android_log_btwrite(0, EVENT_TYPE_LONG, &ts, sizeof(ts)) >= 0) {
if (++num >= (size_t)count) {
sleep(1); // let data settle end-to-end
return num;
}
errors = retry;
usleep(50);
} else if (--errors <= 0) {
return num;
}
}
// NOTREACH
return num;
}
TEST(logcat, tz) {
if (android_log_clockid() == CLOCK_MONOTONIC) {
@ -201,7 +233,7 @@ TEST(logcat, tz) {
pclose(fp);
} while ((count < 3) && --tries && (sleep(1), true));
} while ((count < 3) && --tries && inject(3 - count));
ASSERT_EQ(3, count);
}
@ -236,8 +268,7 @@ void do_tail(int num) {
char buffer[BIG_BUFFER];
snprintf(buffer, sizeof(buffer),
"logcat -v long -b radio -b events -b system -b main -t %d 2>/dev/null",
num);
"logcat -v long -b all -t %d 2>/dev/null", num);
FILE *fp;
ASSERT_TRUE(NULL != (fp = popen(buffer, "r")));
@ -250,7 +281,7 @@ void do_tail(int num) {
pclose(fp);
} while ((count < num) && --tries && (sleep(1), true));
} while ((count < num) && --tries && inject(num - count));
ASSERT_EQ(num, count);
}
@ -273,26 +304,34 @@ TEST(logcat, tail_1000) {
TEST(logcat, tail_time) {
FILE *fp;
ASSERT_TRUE(NULL != (fp = popen("logcat -v long -b all -t 10 2>&1", "r")));
int count;
char buffer[BIG_BUFFER];
char *last_timestamp = NULL;
char *first_timestamp = NULL;
int count = 0;
char *cp;
while ((cp = fgetLongTime(buffer, sizeof(buffer), fp))) {
++count;
if (!first_timestamp) {
first_timestamp = strdup(cp);
}
free(last_timestamp);
last_timestamp = strdup(cp);
}
pclose(fp);
EXPECT_EQ(10, count);
int tries = 3; // in case run too soon after system start or buffer clear
// Do not be tempted to use -v usec because that increases the
// chances of an occasional test failure by 1000 (see below).
do {
ASSERT_TRUE(NULL != (fp = popen("logcat -v long -b all -t 10 2>&1", "r")));
count = 0;
while ((cp = fgetLongTime(buffer, sizeof(buffer), fp))) {
++count;
if (!first_timestamp) {
first_timestamp = strdup(cp);
}
free(last_timestamp);
last_timestamp = strdup(cp);
}
pclose(fp);
} while ((count < 10) && --tries && inject(10 - count));
EXPECT_EQ(10, count); // We want _some_ history, too small, falses below
EXPECT_TRUE(last_timestamp != NULL);
EXPECT_TRUE(first_timestamp != NULL);