Loading cmds/incidentd/Android.bp +4 −2 Original line number Diff line number Diff line Loading @@ -94,8 +94,10 @@ cc_test { data: ["testdata/**/*"], static_libs: ["libgmock"], static_libs: [ "libgmock", "libplatformprotos", ], shared_libs: [ "libbase", "libbinder", Loading cmds/incidentd/tests/Reporter_test.cpp +20 −3 Original line number Diff line number Diff line Loading @@ -35,6 +35,16 @@ using namespace std; using ::testing::StrEq; using ::testing::Test; namespace { void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) { out->clear(); auto serialized = headerProto.SerializeAsString(); if (serialized.empty()) return; out->resize(serialized.length()); std::copy(serialized.begin(), serialized.end(), out->begin()); } } class TestListener : public IIncidentReportStatusListener { public: int startInvoked; Loading Loading @@ -143,7 +153,10 @@ TEST_F(ReporterTest, RunReportWithHeaders) { args2.addSection(2); IncidentHeaderProto header; header.set_alert_id(12); args2.addHeader(header); vector<uint8_t> out; getHeaderData(header, &out); args2.addHeader(out); sp<ReportRequest> r1 = new ReportRequest(args1, l, tf.fd); sp<ReportRequest> r2 = new ReportRequest(args2, l, tf.fd); Loading @@ -169,8 +182,12 @@ TEST_F(ReporterTest, RunReportToGivenDirectory) { IncidentHeaderProto header1, header2; header1.set_alert_id(12); header2.set_reason("abcd"); args.addHeader(header1); args.addHeader(header2); vector<uint8_t> out; getHeaderData(header1, &out); args.addHeader(out); getHeaderData(header2, &out); args.addHeader(out); sp<ReportRequest> r = new ReportRequest(args, l, -1); reporter->batch.add(r); Loading cmds/incidentd/tests/Section_test.cpp +19 −3 Original line number Diff line number Diff line Loading @@ -82,6 +82,16 @@ protected: virtual IBinder* onAsBinder() override { return nullptr; }; }; namespace { void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) { out->clear(); auto serialized = headerProto.SerializeAsString(); if (serialized.empty()) return; out->resize(serialized.length()); std::copy(serialized.begin(), serialized.end(), out->begin()); } } TEST_F(SectionTest, HeaderSection) { HeaderSection hs; Loading @@ -94,9 +104,15 @@ TEST_F(SectionTest, HeaderSection) { head1.set_reason("axe"); head2.set_reason("pup"); args1.addHeader(head1); args1.addHeader(head2); args2.addHeader(head2); vector<uint8_t> out; getHeaderData(head1, &out); args1.addHeader(out); getHeaderData(head2, &out); args1.addHeader(out); getHeaderData(head2, &out); args2.addHeader(out); requests.add(new ReportRequest(args1, new SimpleListener(), -1)); requests.add(new ReportRequest(args2, new SimpleListener(), tf.fd)); Loading cmds/statsd/src/subscriber/IncidentdReporter.cpp +42 −7 Original line number Diff line number Diff line Loading @@ -17,17 +17,54 @@ #include "Log.h" #include "IncidentdReporter.h" #include "frameworks/base/libs/incident/proto/android/os/header.pb.h" #include <android/os/IIncidentManager.h> #include <android/os/IncidentReportArgs.h> #include <android/util/ProtoOutputStream.h> #include <binder/IBinder.h> #include <binder/IServiceManager.h> #include <vector> namespace android { namespace os { namespace statsd { using android::util::ProtoOutputStream; using std::vector; using util::FIELD_TYPE_MESSAGE; using util::FIELD_TYPE_INT32; using util::FIELD_TYPE_INT64; // field ids in IncidentHeaderProto const int FIELD_ID_ALERT_ID = 1; const int FIELD_ID_CONFIG_KEY = 3; const int FIELD_ID_CONFIG_KEY_UID = 1; const int FIELD_ID_CONFIG_KEY_ID = 2; namespace { void getProtoData(const int64_t& rule_id, const ConfigKey& configKey, vector<uint8_t>* protoData) { ProtoOutputStream headerProto; headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_ALERT_ID, (long long)rule_id); uint64_t token = headerProto.start(FIELD_TYPE_MESSAGE | FIELD_ID_CONFIG_KEY); headerProto.write(FIELD_TYPE_INT32 | FIELD_ID_CONFIG_KEY_UID, configKey.GetUid()); headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_CONFIG_KEY_ID, (long long)configKey.GetId()); headerProto.end(token); protoData->resize(headerProto.size()); size_t pos = 0; auto iter = headerProto.data(); while (iter.readBuffer() != NULL) { size_t toRead = iter.currentToRead(); std::memcpy(&((*protoData)[pos]), iter.readBuffer(), toRead); pos += toRead; iter.rp()->move(toRead); } } } // namespace bool GenerateIncidentReport(const IncidentdDetails& config, const int64_t& rule_id, const ConfigKey& configKey) { if (config.section_size() == 0) { Loading @@ -38,11 +75,9 @@ bool GenerateIncidentReport(const IncidentdDetails& config, const int64_t& rule_ IncidentReportArgs incidentReport; android::os::IncidentHeaderProto header; header.set_alert_id(rule_id); header.mutable_config_key()->set_uid(configKey.GetUid()); header.mutable_config_key()->set_id(configKey.GetId()); incidentReport.addHeader(header); vector<uint8_t> protoData; getProtoData(rule_id, configKey, &protoData); incidentReport.addHeader(protoData); for (int i = 0; i < config.section_size(); i++) { incidentReport.addSection(config.section(i)); Loading libs/incident/Android.bp +1 −2 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ cc_library_shared { srcs: [ ":libincident_aidl", "proto/android/os/header.proto", "proto/android/os/metadata.proto", "src/IncidentReportArgs.cpp", ], Loading Loading
cmds/incidentd/Android.bp +4 −2 Original line number Diff line number Diff line Loading @@ -94,8 +94,10 @@ cc_test { data: ["testdata/**/*"], static_libs: ["libgmock"], static_libs: [ "libgmock", "libplatformprotos", ], shared_libs: [ "libbase", "libbinder", Loading
cmds/incidentd/tests/Reporter_test.cpp +20 −3 Original line number Diff line number Diff line Loading @@ -35,6 +35,16 @@ using namespace std; using ::testing::StrEq; using ::testing::Test; namespace { void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) { out->clear(); auto serialized = headerProto.SerializeAsString(); if (serialized.empty()) return; out->resize(serialized.length()); std::copy(serialized.begin(), serialized.end(), out->begin()); } } class TestListener : public IIncidentReportStatusListener { public: int startInvoked; Loading Loading @@ -143,7 +153,10 @@ TEST_F(ReporterTest, RunReportWithHeaders) { args2.addSection(2); IncidentHeaderProto header; header.set_alert_id(12); args2.addHeader(header); vector<uint8_t> out; getHeaderData(header, &out); args2.addHeader(out); sp<ReportRequest> r1 = new ReportRequest(args1, l, tf.fd); sp<ReportRequest> r2 = new ReportRequest(args2, l, tf.fd); Loading @@ -169,8 +182,12 @@ TEST_F(ReporterTest, RunReportToGivenDirectory) { IncidentHeaderProto header1, header2; header1.set_alert_id(12); header2.set_reason("abcd"); args.addHeader(header1); args.addHeader(header2); vector<uint8_t> out; getHeaderData(header1, &out); args.addHeader(out); getHeaderData(header2, &out); args.addHeader(out); sp<ReportRequest> r = new ReportRequest(args, l, -1); reporter->batch.add(r); Loading
cmds/incidentd/tests/Section_test.cpp +19 −3 Original line number Diff line number Diff line Loading @@ -82,6 +82,16 @@ protected: virtual IBinder* onAsBinder() override { return nullptr; }; }; namespace { void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) { out->clear(); auto serialized = headerProto.SerializeAsString(); if (serialized.empty()) return; out->resize(serialized.length()); std::copy(serialized.begin(), serialized.end(), out->begin()); } } TEST_F(SectionTest, HeaderSection) { HeaderSection hs; Loading @@ -94,9 +104,15 @@ TEST_F(SectionTest, HeaderSection) { head1.set_reason("axe"); head2.set_reason("pup"); args1.addHeader(head1); args1.addHeader(head2); args2.addHeader(head2); vector<uint8_t> out; getHeaderData(head1, &out); args1.addHeader(out); getHeaderData(head2, &out); args1.addHeader(out); getHeaderData(head2, &out); args2.addHeader(out); requests.add(new ReportRequest(args1, new SimpleListener(), -1)); requests.add(new ReportRequest(args2, new SimpleListener(), tf.fd)); Loading
cmds/statsd/src/subscriber/IncidentdReporter.cpp +42 −7 Original line number Diff line number Diff line Loading @@ -17,17 +17,54 @@ #include "Log.h" #include "IncidentdReporter.h" #include "frameworks/base/libs/incident/proto/android/os/header.pb.h" #include <android/os/IIncidentManager.h> #include <android/os/IncidentReportArgs.h> #include <android/util/ProtoOutputStream.h> #include <binder/IBinder.h> #include <binder/IServiceManager.h> #include <vector> namespace android { namespace os { namespace statsd { using android::util::ProtoOutputStream; using std::vector; using util::FIELD_TYPE_MESSAGE; using util::FIELD_TYPE_INT32; using util::FIELD_TYPE_INT64; // field ids in IncidentHeaderProto const int FIELD_ID_ALERT_ID = 1; const int FIELD_ID_CONFIG_KEY = 3; const int FIELD_ID_CONFIG_KEY_UID = 1; const int FIELD_ID_CONFIG_KEY_ID = 2; namespace { void getProtoData(const int64_t& rule_id, const ConfigKey& configKey, vector<uint8_t>* protoData) { ProtoOutputStream headerProto; headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_ALERT_ID, (long long)rule_id); uint64_t token = headerProto.start(FIELD_TYPE_MESSAGE | FIELD_ID_CONFIG_KEY); headerProto.write(FIELD_TYPE_INT32 | FIELD_ID_CONFIG_KEY_UID, configKey.GetUid()); headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_CONFIG_KEY_ID, (long long)configKey.GetId()); headerProto.end(token); protoData->resize(headerProto.size()); size_t pos = 0; auto iter = headerProto.data(); while (iter.readBuffer() != NULL) { size_t toRead = iter.currentToRead(); std::memcpy(&((*protoData)[pos]), iter.readBuffer(), toRead); pos += toRead; iter.rp()->move(toRead); } } } // namespace bool GenerateIncidentReport(const IncidentdDetails& config, const int64_t& rule_id, const ConfigKey& configKey) { if (config.section_size() == 0) { Loading @@ -38,11 +75,9 @@ bool GenerateIncidentReport(const IncidentdDetails& config, const int64_t& rule_ IncidentReportArgs incidentReport; android::os::IncidentHeaderProto header; header.set_alert_id(rule_id); header.mutable_config_key()->set_uid(configKey.GetUid()); header.mutable_config_key()->set_id(configKey.GetId()); incidentReport.addHeader(header); vector<uint8_t> protoData; getProtoData(rule_id, configKey, &protoData); incidentReport.addHeader(protoData); for (int i = 0; i < config.section_size(); i++) { incidentReport.addSection(config.section(i)); Loading
libs/incident/Android.bp +1 −2 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ cc_library_shared { srcs: [ ":libincident_aidl", "proto/android/os/header.proto", "proto/android/os/metadata.proto", "src/IncidentReportArgs.cpp", ], Loading