1 #include <gtest/gtest.h>
6 #include "primary/aktualizr.h"
7 #include "test_utils.h"
8 #include "uptane_test_common.h"
9 #include "utilities/fault_injection.h"
11 boost::filesystem::path uptane_generator_path;
15 HttpRejectEmptyCorrId(
const boost::filesystem::path &test_dir_in,
const boost::filesystem::path &meta_dir_in)
16 :
HttpFake(test_dir_in,
"", meta_dir_in) {}
20 if (url.find(
"/manifest") != std::string::npos) {
21 if (
data[
"signed"].isMember(
"installation_report") &&
22 data[
"signed"][
"installation_report"][
"report"][
"correlation_id"].asString().empty()) {
23 EXPECT_FALSE(
data[
"signed"][
"installation_report"][
"report"][
"correlation_id"].asString().empty());
38 auto http = std::make_shared<HttpRejectEmptyCorrId>(temp_dir.Path(), meta_dir.Path() /
"repo");
39 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
40 conf.pacman.fake_need_reboot =
true;
41 logger_set_threshold(boost::log::trivial::trace);
43 Process uptane_gen(uptane_generator_path.string());
44 uptane_gen.run({
"generate",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
45 uptane_gen.run({
"image",
"--path", meta_dir.PathString(),
"--filename",
"tests/test_data/firmware.txt",
46 "--targetname",
"firmware.txt",
"--hwid",
"primary_hw"});
47 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware.txt",
"--hwid",
"primary_hw",
48 "--serial",
"CA:FE:A6:D2:84:9D"});
49 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
51 auto storage = INvStorage::newStorage(conf.storage);
54 aktualizr.Initialize();
57 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
59 result::Download download_result = aktualizr.Download(update_result.updates).get();
60 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
62 uptane_gen.run({
"emptytargets",
"--path", meta_dir.PathString()});
63 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
66 EXPECT_EQ(update_result2.status, result::UpdateStatus::kUpdatesAvailable);
68 result::Install install_result = aktualizr.Install(update_result2.updates).get();
69 ASSERT_EQ(install_result.ecu_reports.size(), 1);
70 EXPECT_EQ(install_result.ecu_reports[0].install_res.result_code.num_code,
71 data::ResultCode::Numeric::kNeedCompletion);
73 aktualizr.uptane_client()->package_manager_->completeInstall();
77 aktualizr.Initialize();
79 const Json::Value manifest = http->last_manifest[
"signed"];
80 const Json::Value manifest_versions = manifest[
"ecu_version_manifests"];
82 EXPECT_EQ(manifest[
"installation_report"][
"report"][
"items"].size(), 1);
83 EXPECT_EQ(manifest[
"installation_report"][
"report"][
"items"][0][
"ecu"].asString(),
"CA:FE:A6:D2:84:9D");
84 EXPECT_TRUE(manifest[
"installation_report"][
"report"][
"items"][0][
"result"][
"success"].asBool());
86 EXPECT_EQ(manifest_versions[
"CA:FE:A6:D2:84:9D"][
"signed"][
"installed_image"][
"filepath"].asString(),
88 EXPECT_EQ(manifest_versions[
"CA:FE:A6:D2:84:9D"][
"signed"][
"installed_image"][
"fileinfo"][
"length"].asUInt(), 17);
91 EXPECT_EQ(update_result3.status, result::UpdateStatus::kNoUpdatesAvailable);
98 TEST(
Aktualizr, EmptyTargetsAfterVerification) {
101 auto http = std::make_shared<HttpRejectEmptyCorrId>(temp_dir.Path(), meta_dir.Path() /
"repo");
102 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
103 logger_set_threshold(boost::log::trivial::trace);
107 Process uptane_gen(uptane_generator_path.string());
108 uptane_gen.run({
"generate",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
109 uptane_gen.run({
"image",
"--path", meta_dir.PathString(),
"--filename",
"tests/test_data/firmware.txt",
110 "--targetname",
"firmware.txt",
"--hwid",
"primary_hw"});
111 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware.txt",
"--hwid",
"primary_hw",
112 "--serial",
"CA:FE:A6:D2:84:9D"});
113 uptane_gen.run({
"image",
"--path", meta_dir.PathString(),
"--filename",
"tests/test_data/firmware_name.txt",
114 "--targetname",
"firmware_name.txt",
"--hwid",
"bad"});
115 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware_name.txt",
"--hwid",
116 "secondary_hw",
"--serial",
"secondary_ecu_serial"});
117 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
120 auto storage = INvStorage::newStorage(conf.storage);
123 aktualizr.Initialize();
126 EXPECT_EQ(update_result.status, result::UpdateStatus::kError);
127 EXPECT_EQ(update_result.ecus_count, 0);
128 EXPECT_TRUE(update_result.updates.empty());
132 uptane_gen.run({
"emptytargets",
"--path", meta_dir.PathString()});
133 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
138 aktualizr.Initialize();
141 EXPECT_EQ(update_result.status, result::UpdateStatus::kNoUpdatesAvailable);
149 TEST(
Aktualizr, EmptyTargetsAfterDownload) {
152 auto http = std::make_shared<HttpRejectEmptyCorrId>(temp_dir.Path(), meta_dir.Path() /
"repo");
153 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
154 logger_set_threshold(boost::log::trivial::trace);
156 Process uptane_gen(uptane_generator_path.string());
157 uptane_gen.run({
"generate",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
158 uptane_gen.run({
"image",
"--path", meta_dir.PathString(),
"--filename",
"tests/test_data/firmware.txt",
159 "--targetname",
"firmware.txt",
"--hwid",
"primary_hw"});
160 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware.txt",
"--hwid",
"primary_hw",
161 "--serial",
"CA:FE:A6:D2:84:9D"});
162 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
165 fault_injection_init();
166 auto storage = INvStorage::newStorage(conf.storage);
169 aktualizr.Initialize();
172 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
174 fault_injection_enable(
"fake_package_download", 1,
"", 0);
175 result::Download download_result = aktualizr.Download(update_result.updates).get();
176 EXPECT_EQ(download_result.status, result::DownloadStatus::kError);
177 fault_injection_disable(
"fake_package_download");
181 uptane_gen.run({
"emptytargets",
"--path", meta_dir.PathString()});
182 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
187 aktualizr.Initialize();
190 EXPECT_EQ(update_result.status, result::UpdateStatus::kNoUpdatesAvailable);
196 TEST(
Aktualizr, EmptyTargetsAfterInstall) {
199 auto http = std::make_shared<HttpRejectEmptyCorrId>(temp_dir.Path(), meta_dir.Path() /
"repo");
200 Config conf = UptaneTestCommon::makeTestConfig(temp_dir, http->tls_server);
201 logger_set_threshold(boost::log::trivial::trace);
203 Process uptane_gen(uptane_generator_path.string());
204 uptane_gen.run({
"generate",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
205 uptane_gen.run({
"image",
"--path", meta_dir.PathString(),
"--filename",
"tests/test_data/firmware.txt",
206 "--targetname",
"firmware.txt",
"--hwid",
"primary_hw"});
207 uptane_gen.run({
"addtarget",
"--path", meta_dir.PathString(),
"--targetname",
"firmware.txt",
"--hwid",
"primary_hw",
208 "--serial",
"CA:FE:A6:D2:84:9D"});
209 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
212 fault_injection_init();
213 auto storage = INvStorage::newStorage(conf.storage);
216 aktualizr.Initialize();
219 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
221 result::Download download_result = aktualizr.Download(update_result.updates).get();
222 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
224 fault_injection_enable(
"fake_package_install", 1,
"", 0);
225 result::Install install_result = aktualizr.Install(download_result.updates).get();
226 EXPECT_EQ(install_result.ecu_reports.size(), 1);
227 EXPECT_EQ(install_result.ecu_reports[0].install_res.result_code.num_code,
229 fault_injection_disable(
"fake_package_install");
233 uptane_gen.run({
"emptytargets",
"--path", meta_dir.PathString()});
234 uptane_gen.run({
"signtargets",
"--path", meta_dir.PathString(),
"--correlationid",
"abc123"});
239 aktualizr.Initialize();
242 EXPECT_EQ(update_result.status, result::UpdateStatus::kNoUpdatesAvailable);
249 int main(
int argc,
char **argv) {
250 ::testing::InitGoogleTest(&argc, argv);
252 std::cerr <<
"Error: " << argv[0] <<
" requires the path to the uptane-generator utility\n";
255 uptane_generator_path = argv[1];
258 logger_set_threshold(boost::log::trivial::trace);
260 return RUN_ALL_TESTS();