1 #include <gtest/gtest.h> 8 #include <boost/filesystem.hpp> 11 #include "libaktualizr/config.h" 13 #include "package_manager/packagemanagerfake.h" 14 #include "storage/invstorage.h" 15 #include "uptane/tuf.h" 16 #include "utilities/utils.h" 22 config.pacman.type = PACKAGE_MANAGER_NONE;
23 config.pacman.images_path = temp_dir.Path() /
"images";
24 config.storage.path = temp_dir.Path();
26 auto storage = INvStorage::newStorage(config.storage);
29 Json::Value target_json;
30 target_json[
"hashes"][
"sha256"] =
"D9CD8155764C3543F10FAD8A480D743137466F8D55213C8EAEFCD12F06D43A80";
34 auto out = pacman.createTargetFile(target);
38 auto in = pacman.openTargetFile(target);
41 ASSERT_EQ(ss.str(),
"a");
44 auto out = pacman.appendTargetFile(target);
48 auto in = pacman.openTargetFile(target);
51 ASSERT_EQ(ss.str(),
"aa");
55 auto out = pacman.createTargetFile(target);
59 auto in = pacman.openTargetFile(target);
62 ASSERT_EQ(ss.str(),
"a");
65 pacman.removeTargetFile(target);
66 EXPECT_THROW(pacman.appendTargetFile(target), std::runtime_error);
67 EXPECT_THROW(pacman.openTargetFile(target), std::runtime_error);
74 config.pacman.type = PACKAGE_MANAGER_NONE;
75 config.pacman.images_path = temp_dir.Path() /
"images";
76 config.storage.path = temp_dir.Path();
78 auto storage = INvStorage::newStorage(config.storage);
81 Json::Value target_json;
82 target_json[
"hashes"][
"sha256"] =
"D9CD8155764C3543F10FAD8A480D743137466F8D55213C8EAEFCD12F06D43A80";
84 target_json[
"hashes"][
"sha256"] =
"A81C31AC62620B9215A14FF00544CB07A55B765594F3AB3BE77E70923AE27CF1";
87 pacman.createTargetFile(t1);
88 pacman.createTargetFile(t2);
90 auto targets = pacman.getTargetFiles();
91 ASSERT_EQ(targets.size(), 2);
92 ASSERT_EQ(targets.at(0).filename(),
"aa.bin");
93 ASSERT_EQ(targets.at(1).filename(),
"bb.bin");
95 pacman.removeTargetFile(t1);
96 targets = pacman.getTargetFiles();
97 ASSERT_EQ(targets.size(), 1);
98 ASSERT_EQ(targets.at(0).filename(),
"bb.bin");
99 EXPECT_FALSE(boost::filesystem::exists(temp_dir.Path() /
"images" /
100 "D9CD8155764C3543F10FAD8A480D743137466F8D55213C8EAEFCD12F06D43A80"));
101 EXPECT_TRUE(boost::filesystem::exists(temp_dir.Path() /
"images" /
102 "A81C31AC62620B9215A14FF00544CB07A55B765594F3AB3BE77E70923AE27CF1"));
115 config.pacman.type = PACKAGE_MANAGER_NONE;
116 config.pacman.images_path = temp_dir.Path() /
"images";
117 config.storage.path = temp_dir.Path();
118 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
121 const int length = 4;
122 char content[length];
123 memcpy(content,
"good", length);
125 hasher.update(reinterpret_cast<uint8_t *>(content), length);
126 const std::string hash = hasher.getHexDigest();
127 Uptane::Target target(
"some-pkg", primary_ecu, {
Hash(Hash::Type::kSha256, hash)}, length,
"");
131 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kNotFound);
134 auto whandle = fakepm.createTargetFile(target);
135 char content_bad[length + 1];
136 memset(content_bad, 0, length + 1);
137 whandle.write(content_bad, length);
139 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kHashMismatch);
142 whandle = fakepm.createTargetFile(target);
143 whandle.write(content_bad, length + 1);
145 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kOversized);
148 whandle = fakepm.createTargetFile(target);
149 whandle.write(content, length - 1);
151 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kIncomplete);
154 whandle = fakepm.createTargetFile(target);
155 whandle.write(content, length);
157 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kGood);
163 config.pacman.type = PACKAGE_MANAGER_NONE;
164 config.pacman.images_path = temp_dir.Path() /
"images";
165 config.pacman.fake_need_reboot =
true;
166 config.bootloader.reboot_sentinel_dir = temp_dir.Path();
167 config.storage.path = temp_dir.Path();
168 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
169 std::shared_ptr<Bootloader> bootloader = std::make_shared<Bootloader>(config.bootloader, *storage);
173 Uptane::EcuMap primary_ecu;
174 Uptane::Target target(
"pkg", primary_ecu, {
Hash(Hash::Type::kSha256,
"hash")}, 1,
"");
175 auto result = fakepm.install(target);
176 EXPECT_EQ(result.result_code, data::ResultCode::Numeric::kNeedCompletion);
177 storage->savePrimaryInstalledVersion(target, InstalledVersionUpdateMode::kPending);
179 fakepm.completeInstall();
181 result = fakepm.finalizeInstall(target);
182 EXPECT_EQ(result.result_code, data::ResultCode::Numeric::kOk);
187 #include "utilities/fault_injection.h" 192 config.pacman.type = PACKAGE_MANAGER_NONE;
193 config.pacman.images_path = temp_dir.Path() /
"images";
194 config.storage.path = temp_dir.Path();
195 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
196 auto http = std::make_shared<HttpFake>(temp_dir.Path());
198 KeyManager keys(storage, config.keymanagerConfig());
202 fault_injection_init();
206 Uptane::Target target(
"pkg", primary_ecu, {
Hash(Hash::Type::kSha256,
"hash")}, 0,
"");
207 EXPECT_TRUE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
210 fault_injection_enable(
"fake_package_download", 1,
"", 0);
211 EXPECT_FALSE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
212 fault_injection_disable(
"fake_package_download");
216 fault_injection_enable(
"fake_package_download", 1,
"RANDOM_DOWNLOAD_CAUSE", 0);
217 EXPECT_FALSE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
218 fault_injection_disable(
"fake_package_download");
224 config.pacman.type = PACKAGE_MANAGER_NONE;
225 config.pacman.images_path = temp_dir.Path() /
"images";
226 config.storage.path = temp_dir.Path();
227 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
231 fault_injection_init();
235 Uptane::Target target(
"pkg", primary_ecu, {
Hash(Hash::Type::kSha256,
"hash")}, 1,
"");
236 auto result = fakepm.install(target);
237 EXPECT_EQ(result.result_code, data::ResultCode::Numeric::kOk);
240 fault_injection_enable(
"fake_package_install", 1,
"", 0);
241 result = fakepm.install(target);
243 fault_injection_disable(
"fake_package_install");
246 fault_injection_enable(
"fake_package_install", 1,
"RANDOM_INSTALL_CAUSE", 0);
247 result = fakepm.install(target);
249 fault_injection_disable(
"fake_package_install");
255 int main(
int argc,
char **argv) {
256 ::testing::InitGoogleTest(&argc, argv);
258 return RUN_ALL_TESTS();
Configuration object for an aktualizr instance running on a Primary ECU.
Package installation failed.
The Hash class The hash of a file or Uptane metadata.
Results of libaktualizr API calls.