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);
57 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
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);
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();
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);
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"});
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);
172 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
174 fault_injection_enable(
"fake_package_download", 1,
"", 0);
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"});
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);
219 EXPECT_EQ(update_result.status, result::UpdateStatus::kUpdatesAvailable);
222 EXPECT_EQ(download_result.status, result::DownloadStatus::kSuccess);
224 fault_injection_enable(
"fake_package_install", 1,
"", 0);
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"});
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();
Container for information about downloading an update.
Configuration object for an aktualizr instance running on a Primary ECU.
Package installation failed.
std::future< result::Download > Download(const std::vector< Uptane::Target > &updates)
Download targets.
std::future< result::UpdateCheck > CheckUpdates()
Fetch Uptane metadata and check for updates.
std::future< result::Install > Install(const std::vector< Uptane::Target > &updates)
Install targets.
Container for information about installing an update.
Container for information about available updates.
This class provides the main APIs necessary for launching and controlling libaktualizr.
void Initialize()
Initialize aktualizr.