1 #include <gtest/gtest.h>
10 #include "config/config.h"
12 #include "reportqueue.h"
14 #include "utilities/utils.h"
18 HttpFakeRq(
const boost::filesystem::path &test_dir_in,
size_t expected_events)
19 :
HttpFake(test_dir_in,
""), expected_events_(expected_events) {}
21 HttpResponse handle_event(
const std::string &url,
const Json::Value &
data)
override {
23 if (url ==
"reportqueue/SingleEvent/events") {
24 EXPECT_EQ(
data[0][
"eventType"][
"id"],
"EcuDownloadCompleted");
25 EXPECT_EQ(
data[0][
"event"][
"ecu"],
"SingleEvent");
27 if (events_seen == expected_events_) {
28 expected_events_received.set_value(
true);
31 }
else if (url.find(
"reportqueue/MultipleEvents") == 0) {
32 for (
int i = 0; i < static_cast<int>(
data.size()); ++i) {
33 EXPECT_EQ(
data[i][
"eventType"][
"id"],
"EcuDownloadCompleted");
34 EXPECT_EQ(
data[i][
"event"][
"ecu"],
"MultipleEvents" + std::to_string(events_seen++));
36 if (events_seen == expected_events_) {
37 expected_events_received.set_value(
true);
40 }
else if (url.find(
"reportqueue/FailureRecovery") == 0) {
41 if (
data.size() < 10) {
44 for (
int i = 0; i < static_cast<int>(
data.size()); ++i) {
45 EXPECT_EQ(
data[i][
"eventType"][
"id"],
"EcuDownloadCompleted");
46 EXPECT_EQ(
data[i][
"event"][
"ecu"],
"FailureRecovery" + std::to_string(i));
48 events_seen =
data.size();
49 if (events_seen == expected_events_) {
50 expected_events_received.set_value(
true);
55 LOG_ERROR <<
"Unexpected event: " <<
data;
59 size_t events_seen{0};
60 size_t expected_events_;
61 std::promise<bool> expected_events_received{};
68 config.storage.path = temp_dir.Path();
69 config.tls.server =
"reportqueue/SingleEvent";
71 size_t num_events = 1;
72 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
75 report_queue.enqueue(std_::make_unique<EcuDownloadCompletedReport>(
Uptane::EcuSerial(
"SingleEvent"),
"",
true));
78 http->expected_events_received.get_future().wait_for(std::chrono::seconds(20));
79 EXPECT_EQ(http->events_seen, num_events);
86 config.storage.path = temp_dir.Path();
87 config.tls.server =
"reportqueue/MultipleEvents";
89 size_t num_events = 10;
90 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
93 for (
int i = 0; i < 10; ++i) {
94 report_queue.enqueue(std_::make_unique<EcuDownloadCompletedReport>(
99 http->expected_events_received.get_future().wait_for(std::chrono::seconds(20));
100 EXPECT_EQ(http->events_seen, num_events);
108 config.storage.path = temp_dir.Path();
109 config.tls.server =
"reportqueue/FailureRecovery";
111 size_t num_events = 10;
112 auto http = std::make_shared<HttpFakeRq>(temp_dir.Path(), num_events);
115 for (
int i = 0; i < 10; ++i) {
116 report_queue.enqueue(std_::make_unique<EcuDownloadCompletedReport>(
121 http->expected_events_received.get_future().wait_for(std::chrono::seconds(20));
122 EXPECT_EQ(http->events_seen, num_events);
126 int main(
int argc,
char **argv) {
127 ::testing::InitGoogleTest(&argc, argv);
128 logger_set_threshold(boost::log::trivial::trace);
129 return RUN_ALL_TESTS();