Merge "Add a section flag to bypass failure if a specific path can't be found." into pi-dev
This commit is contained in:
@@ -151,7 +151,8 @@ DONE:
|
||||
}
|
||||
|
||||
// ================================================================================
|
||||
Section::Section(int i, const int64_t timeoutMs) : id(i), timeoutMs(timeoutMs) {}
|
||||
Section::Section(int i, int64_t timeoutMs, bool deviceSpecific)
|
||||
: id(i), timeoutMs(timeoutMs), deviceSpecific(deviceSpecific) {}
|
||||
|
||||
Section::~Section() {}
|
||||
|
||||
@@ -236,8 +237,9 @@ status_t MetadataSection::Execute(ReportRequestSet* requests) const {
|
||||
// ================================================================================
|
||||
static inline bool isSysfs(const char* filename) { return strncmp(filename, "/sys/", 5) == 0; }
|
||||
|
||||
FileSection::FileSection(int id, const char* filename, const int64_t timeoutMs)
|
||||
: Section(id, timeoutMs), mFilename(filename) {
|
||||
FileSection::FileSection(int id, const char* filename, const bool deviceSpecific,
|
||||
const int64_t timeoutMs)
|
||||
: Section(id, timeoutMs, deviceSpecific), mFilename(filename) {
|
||||
name = filename;
|
||||
mIsSysfs = isSysfs(filename);
|
||||
}
|
||||
@@ -250,7 +252,7 @@ status_t FileSection::Execute(ReportRequestSet* requests) const {
|
||||
unique_fd fd(open(mFilename, O_RDONLY | O_CLOEXEC));
|
||||
if (fd.get() == -1) {
|
||||
ALOGW("FileSection '%s' failed to open file", this->name.string());
|
||||
return -errno;
|
||||
return this->deviceSpecific ? NO_ERROR : -errno;
|
||||
}
|
||||
|
||||
FdBuffer buffer;
|
||||
|
||||
@@ -40,9 +40,10 @@ class Section {
|
||||
public:
|
||||
const int id;
|
||||
const int64_t timeoutMs; // each section must have a timeout
|
||||
const bool deviceSpecific;
|
||||
String8 name;
|
||||
|
||||
Section(int id, const int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS);
|
||||
Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool deviceSpecific = false);
|
||||
virtual ~Section();
|
||||
|
||||
virtual status_t Execute(ReportRequestSet* requests) const = 0;
|
||||
@@ -75,7 +76,8 @@ public:
|
||||
*/
|
||||
class FileSection : public Section {
|
||||
public:
|
||||
FileSection(int id, const char* filename, const int64_t timeoutMs = 5000 /* 5 seconds */);
|
||||
FileSection(int id, const char* filename, bool deviceSpecific = false,
|
||||
int64_t timeoutMs = 5000 /* 5 seconds */);
|
||||
virtual ~FileSection();
|
||||
|
||||
virtual status_t Execute(ReportRequestSet* requests) const;
|
||||
@@ -105,7 +107,7 @@ private:
|
||||
*/
|
||||
class WorkerThreadSection : public Section {
|
||||
public:
|
||||
WorkerThreadSection(int id, const int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS);
|
||||
WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS);
|
||||
virtual ~WorkerThreadSection();
|
||||
|
||||
virtual status_t Execute(ReportRequestSet* requests) const;
|
||||
@@ -118,7 +120,7 @@ public:
|
||||
*/
|
||||
class CommandSection : public Section {
|
||||
public:
|
||||
CommandSection(int id, const int64_t timeoutMs, const char* command, ...);
|
||||
CommandSection(int id, int64_t timeoutMs, const char* command, ...);
|
||||
|
||||
CommandSection(int id, const char* command, ...);
|
||||
|
||||
@@ -168,7 +170,7 @@ private:
|
||||
*/
|
||||
class TombstoneSection : public WorkerThreadSection {
|
||||
public:
|
||||
TombstoneSection(int id, const char* type, const int64_t timeoutMs = 30000 /* 30 seconds */);
|
||||
TombstoneSection(int id, const char* type, int64_t timeoutMs = 30000 /* 30 seconds */);
|
||||
virtual ~TombstoneSection();
|
||||
|
||||
virtual status_t BlockingCall(int pipeWriteFd) const;
|
||||
|
||||
@@ -143,8 +143,16 @@ TEST_F(SectionTest, FileSection) {
|
||||
EXPECT_THAT(GetCapturedStdout(), StrEq("\xa\vatadtsetmai"));
|
||||
}
|
||||
|
||||
TEST_F(SectionTest, FileSectionNotExist) {
|
||||
FileSection fs1(NOOP_PARSER, "notexist", false, QUICK_TIMEOUT_MS);
|
||||
ASSERT_EQ(NAME_NOT_FOUND, fs1.Execute(&requests));
|
||||
|
||||
FileSection fs2(NOOP_PARSER, "notexist", true, QUICK_TIMEOUT_MS);
|
||||
ASSERT_EQ(NO_ERROR, fs2.Execute(&requests));
|
||||
}
|
||||
|
||||
TEST_F(SectionTest, FileSectionTimeout) {
|
||||
FileSection fs(TIMEOUT_PARSER, tf.path, QUICK_TIMEOUT_MS);
|
||||
FileSection fs(TIMEOUT_PARSER, tf.path, false, QUICK_TIMEOUT_MS);
|
||||
ASSERT_EQ(NO_ERROR, fs.Execute(&requests));
|
||||
ASSERT_TRUE(requests.sectionStats(TIMEOUT_PARSER)->timed_out());
|
||||
}
|
||||
|
||||
@@ -161,6 +161,7 @@ message IncidentProto {
|
||||
|
||||
optional CpuFreqProto cpu_freq = 2004 [
|
||||
(section).type = SECTION_FILE,
|
||||
(section).device_specific = true,
|
||||
(section).args = "/sys/devices/system/cpu/cpufreq/all_time_in_state"
|
||||
];
|
||||
|
||||
@@ -170,7 +171,8 @@ message IncidentProto {
|
||||
];
|
||||
|
||||
optional BatteryTypeProto battery_type = 2006 [
|
||||
(section).type = SECTION_NONE, // disabled since the path is device specific!
|
||||
(section).type = SECTION_FILE,
|
||||
(section).device_specific = true,
|
||||
(section).args = "/sys/class/power_supply/bms/battery_type"
|
||||
];
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ enum SectionType {
|
||||
message SectionFlags {
|
||||
optional SectionType type = 1 [default = SECTION_NONE];
|
||||
optional string args = 2;
|
||||
optional bool device_specific = 3 [default = false];
|
||||
}
|
||||
|
||||
extend google.protobuf.FieldOptions {
|
||||
|
||||
@@ -413,7 +413,8 @@ static bool generateSectionListCpp(Descriptor const* descriptor) {
|
||||
case SECTION_NONE:
|
||||
continue;
|
||||
case SECTION_FILE:
|
||||
printf(" new FileSection(%d, \"%s\"),\n", field->number(), s.args().c_str());
|
||||
printf(" new FileSection(%d, \"%s\", %s),\n", field->number(), s.args().c_str(),
|
||||
s.device_specific() ? "true" : "false");
|
||||
break;
|
||||
case SECTION_COMMAND:
|
||||
printf(" new CommandSection(%d,", field->number());
|
||||
|
||||
Reference in New Issue
Block a user