1 #include <gtest/gtest.h>
5 #include <boost/filesystem.hpp>
8 #include "libaktualizr/aktualizr.h"
9 #include "libaktualizr/config.h"
13 #include "uptane_test_common.h"
15 boost::filesystem::path uptane_generator_path;
17 void delegation_basic(
const boost::filesystem::path& delegation_path,
bool revoke) {
19 std::string cmd =
"tests/uptane_repo_generation/delegation_basic.sh " + uptane_generator_path.string() +
" " +
20 delegation_path.string();
24 int retval = Utils::shell(cmd, &output,
true);
25 EXPECT_EQ(retval, EXIT_SUCCESS) << output;
28 void delegation_nested(
const boost::filesystem::path& delegation_path,
bool revoke) {
30 std::string cmd =
"tests/uptane_repo_generation/delegation_nested.sh " + uptane_generator_path.string() +
" " +
31 delegation_path.string();
35 int retval = Utils::shell(cmd, &output,
true);
36 EXPECT_EQ(retval, EXIT_SUCCESS) << output;
42 :
HttpFake(test_dir_in,
"", test_dir_in /
"delegation_test/repo") {}
44 HttpResponse handle_event(
const std::string& url,
const Json::Value&
data)
override {
48 EXPECT_EQ(
event[
"event"][
"correlationId"].asString(),
"");
53 unsigned int events_seen{0};
60 for (
auto generate_fun : {delegation_basic, delegation_nested}) {
62 auto delegation_path = temp_dir.Path() /
"delegation_test";
63 generate_fun(delegation_path,
false);
64 auto http = std::make_shared<HttpFakeDelegation>(temp_dir.Path());
69 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
71 auto storage = INvStorage::newStorage(conf.storage);
74 aktualizr.Initialize();
76 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
78 result::Download download_result = aktualizr.Download(update_result.updates).get();
79 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
81 result::Install install_result = aktualizr.Install(download_result.updates).get();
82 for (
const auto& r : install_result.ecu_reports) {
83 EXPECT_EQ(r.install_res.result_code.num_code, data::ResultCode::Numeric::kOk);
87 EXPECT_EQ(http->events_seen, 8);
92 for (
auto generate_fun : {delegation_basic, delegation_nested}) {
94 auto http = std::make_shared<HttpFakeDelegation>(temp_dir.Path());
95 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
96 auto storage = INvStorage::newStorage(conf.storage);
98 auto delegation_path = temp_dir.Path() /
"delegation_test";
100 generate_fun(delegation_path,
false);
102 aktualizr.Initialize();
105 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
106 EXPECT_EQ(update_result.updates.size(), 2);
110 generate_fun(delegation_path,
true);
112 aktualizr.Initialize();
114 auto update_result = aktualizr.CheckUpdates().get();
115 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
116 EXPECT_EQ(update_result.updates.size(), 1);
118 result::Download download_result = aktualizr.Download(update_result.updates).get();
119 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
121 result::Install install_result = aktualizr.Install(download_result.updates).get();
122 for (
const auto& r : install_result.ecu_reports) {
123 EXPECT_EQ(r.install_res.result_code.num_code, data::ResultCode::Numeric::kOk);
130 for (
auto generate_fun : {delegation_basic, delegation_nested}) {
132 auto http = std::make_shared<HttpFakeDelegation>(temp_dir.Path());
133 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
134 auto storage = INvStorage::newStorage(conf.storage);
136 auto delegation_path = temp_dir.Path() /
"delegation_test";
138 generate_fun(delegation_path,
false);
140 aktualizr.Initialize();
143 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
145 result::Download download_result = aktualizr.Download(update_result.updates).get();
146 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
150 generate_fun(delegation_path,
true);
152 aktualizr.Initialize();
154 auto update_result = aktualizr.CheckUpdates().get();
155 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
156 EXPECT_EQ(update_result.updates.size(), 1);
158 result::Download download_result = aktualizr.Download(update_result.updates).get();
159 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
161 result::Install install_result = aktualizr.Install(download_result.updates).get();
162 for (
const auto& r : install_result.ecu_reports) {
163 EXPECT_EQ(r.install_res.result_code.num_code, data::ResultCode::Numeric::kOk);
170 for (
auto generate_fun : {delegation_basic, delegation_nested}) {
172 auto http = std::make_shared<HttpFakeDelegation>(temp_dir.Path());
173 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
174 auto storage = INvStorage::newStorage(conf.storage);
176 auto delegation_path = temp_dir.Path() /
"delegation_test";
178 generate_fun(delegation_path,
false);
180 aktualizr.Initialize();
183 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
185 result::Download download_result = aktualizr.Download(update_result.updates).get();
186 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
188 result::Install install_result = aktualizr.Install(download_result.updates).get();
189 for (
const auto& r : install_result.ecu_reports) {
190 EXPECT_EQ(r.install_res.result_code.num_code, data::ResultCode::Numeric::kOk);
195 generate_fun(delegation_path,
true);
197 aktualizr.Initialize();
199 auto update_result = aktualizr.CheckUpdates().get();
200 EXPECT_EQ(update_result.status, result::UpdateStatus::kNoUpdatesAvailable);
208 auto delegation_path = temp_dir.Path() /
"delegation_test";
209 delegation_nested(delegation_path,
false);
210 auto http = std::make_shared<HttpFakeDelegation>(temp_dir.Path());
212 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
214 auto storage = INvStorage::newStorage(conf.storage);
217 aktualizr.Initialize();
219 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
221 std::vector<std::string> expected_target_names = {
"primary.txt",
"abracadabra",
"abc/secondary.txt",
"abc/target0",
222 "abc/target1",
"abc/target2",
"bcd/target0",
"cde/target0",
223 "cde/target1",
"def/target0"};
224 for (
auto& target : aktualizr.uptane_client()->allTargets()) {
225 EXPECT_EQ(target.filename(), expected_target_names[0]);
226 expected_target_names.erase(expected_target_names.begin());
229 EXPECT_TRUE(expected_target_names.empty());
233 int main(
int argc,
char** argv) {
234 ::testing::InitGoogleTest(&argc, argv);
236 std::cerr <<
"Error: " << argv[0] <<
" requires the path to the uptane-generator utility\n";
239 uptane_generator_path = argv[1];
242 logger_set_threshold(boost::log::trivial::trace);
244 return RUN_ALL_TESTS();