1 #include <gtest/gtest.h> 10 #include "config/config.h" 12 #include "reportqueue.h" 13 #include "storage/invstorage.h" 14 #include "storage/sqlstorage.h" 16 #include "utilities/utils.h" 20 HttpFakeRq(
const boost::filesystem::path &test_dir_in,
size_t expected_events)
21 :
HttpFake(test_dir_in,
""), expected_events_(expected_events) {}
23 HttpResponse handle_event(
const std::string &url,
const Json::Value &
data)
override {
25 if (url ==
"reportqueue/SingleEvent/events") {
26 EXPECT_EQ(data[0][
"eventType"][
"id"],
"EcuDownloadCompleted");
27 EXPECT_EQ(data[0][
"event"][
"ecu"],
"SingleEvent");
29 if (events_seen == expected_events_) {
30 expected_events_received.set_value(
true);
33 }
else if (url.find(
"reportqueue/MultipleEvents") == 0) {
34 for (
int i = 0; i < static_cast<int>(data.size()); ++i) {
35 EXPECT_EQ(data[i][
"eventType"][
"id"],
"EcuDownloadCompleted");
36 EXPECT_EQ(data[i][
"event"][
"ecu"],
"MultipleEvents" + std::to_string(events_seen++));
38 if (events_seen == expected_events_) {
39 expected_events_received.set_value(
true);
42 }
else if (url.find(
"reportqueue/FailureRecovery") == 0) {
43 if (data.size() < 10) {
46 for (
int i = 0; i < static_cast<int>(data.size()); ++i) {
47 EXPECT_EQ(data[i][
"eventType"][
"id"],
"EcuDownloadCompleted");
48 EXPECT_EQ(data[i][
"event"][
"ecu"],
"FailureRecovery" + std::to_string(i));
50 events_seen = data.size();
51 if (events_seen == expected_events_) {
52 expected_events_received.set_value(
true);
56 }
else if (url.find(
"reportqueue/StoreEvents") == 0) {
57 for (
int i = 0; i < static_cast<int>(data.size()); ++i) {
58 EXPECT_EQ(data[i][
"eventType"][
"id"],
"EcuDownloadCompleted");
59 EXPECT_EQ(data[i][
"event"][
"ecu"],
"StoreEvents" + std::to_string(events_seen++));
61 if (events_seen == expected_events_) {
62 expected_events_received.set_value(
true);
66 LOG_ERROR <<
"Unexpected event: " << data;
70 size_t events_seen{0};
71 size_t expected_events_;
72 std::promise<bool> expected_events_received{};
79 config.storage.path = temp_dir.Path();
80 config.tls.server =
"reportqueue/SingleEvent";
82 size_t num_events = 1;
83 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
84 auto sql_storage = std::make_shared<SQLStorage>(config.storage,
false);
85 ReportQueue report_queue(config, http, sql_storage);
87 report_queue.enqueue(std_::make_unique<EcuDownloadCompletedReport>(
Uptane::EcuSerial(
"SingleEvent"),
"",
true));
90 http->expected_events_received.get_future().wait_for(std::chrono::seconds(20));
91 EXPECT_EQ(http->events_seen, num_events);
98 config.storage.path = temp_dir.Path();
99 config.tls.server =
"reportqueue/MultipleEvents";
101 size_t num_events = 10;
102 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
103 auto sql_storage = std::make_shared<SQLStorage>(config.storage,
false);
104 ReportQueue report_queue(config, http, sql_storage);
106 for (
int i = 0; i < 10; ++i) {
107 report_queue.enqueue(std_::make_unique<EcuDownloadCompletedReport>(
112 http->expected_events_received.get_future().wait_for(std::chrono::seconds(20));
113 EXPECT_EQ(http->events_seen, num_events);
121 config.storage.path = temp_dir.Path();
122 config.tls.server =
"reportqueue/FailureRecovery";
124 size_t num_events = 10;
125 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
126 auto sql_storage = std::make_shared<SQLStorage>(config.storage,
false);
127 ReportQueue report_queue(config, http, sql_storage);
129 for (
size_t i = 0; i < num_events; ++i) {
130 report_queue.enqueue(std_::make_unique<EcuDownloadCompletedReport>(
135 http->expected_events_received.get_future().wait_for(std::chrono::seconds(20));
136 EXPECT_EQ(http->events_seen, num_events);
144 config.storage.path = temp_dir.Path();
145 config.tls.server =
"";
147 auto sql_storage = std::make_shared<SQLStorage>(config.storage,
false);
148 size_t num_events = 10;
149 auto check_sql = [sql_storage](
size_t count) {
151 Json::Value report_array{Json::arrayValue};
152 sql_storage->loadReportEvents(&report_array, &max_id);
153 EXPECT_EQ(max_id, count);
157 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
158 ReportQueue report_queue(config, http, sql_storage);
159 for (
size_t i = 0; i < num_events; ++i) {
160 report_queue.enqueue(std_::make_unique<EcuDownloadCompletedReport>(
163 check_sql(num_events);
166 config.tls.server =
"reportqueue/StoreEvents";
167 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
168 ReportQueue report_queue(config, http, sql_storage);
170 http->expected_events_received.get_future().wait_for(std::chrono::seconds(20));
171 EXPECT_EQ(http->events_seen, num_events);
177 int main(
int argc,
char **argv) {
178 ::testing::InitGoogleTest(&argc, argv);
179 logger_set_threshold(boost::log::trivial::trace);
180 return RUN_ALL_TESTS();
Configuration object for an aktualizr instance running on a Primary ECU.