1 #include <gtest/gtest.h>
8 #include <boost/filesystem.hpp>
10 #include "config/config.h"
12 #include "package_manager/packagemanagerfake.h"
13 #include "storage/invstorage.h"
14 #include "uptane/tuf.h"
16 #include "utilities/utils.h"
28 config.pacman.type = PACKAGE_MANAGER_NONE;
29 config.storage.path = temp_dir.Path();
30 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
34 uint8_t content[length];
35 memcpy(content,
"good", length);
37 hasher.update(content, length);
38 const std::string hash = hasher.getHexDigest();
39 Uptane::Target target(
"some-pkg", primary_ecu, {
Hash(Hash::Type::kSha256, hash)}, length,
"");
43 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kNotFound);
46 auto whandle = storage->allocateTargetFile(target);
47 uint8_t content_bad[length + 1];
48 memset(content_bad, 0, length + 1);
49 EXPECT_EQ(whandle->wfeed(content_bad, length), length);
51 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kHashMismatch);
54 whandle = storage->allocateTargetFile(target);
55 EXPECT_EQ(whandle->wfeed(content_bad, length + 1), length + 1);
57 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kOversized);
60 whandle = storage->allocateTargetFile(target);
61 EXPECT_EQ(whandle->wfeed(content, length - 1), length - 1);
63 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kIncomplete);
66 whandle = storage->allocateTargetFile(target);
67 EXPECT_EQ(whandle->wfeed(content, length), length);
69 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kGood);
75 config.pacman.type = PACKAGE_MANAGER_NONE;
76 config.pacman.fake_need_reboot =
true;
77 config.bootloader.reboot_sentinel_dir = temp_dir.Path();
78 config.storage.path = temp_dir.Path();
79 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
80 std::shared_ptr<Bootloader> bootloader = std::make_shared<Bootloader>(config.bootloader, *storage);
84 Uptane::EcuMap primary_ecu;
86 auto result = fakepm.install(target);
87 EXPECT_EQ(
result.result_code, data::ResultCode::Numeric::kNeedCompletion);
88 storage->savePrimaryInstalledVersion(target, InstalledVersionUpdateMode::kPending);
90 fakepm.completeInstall();
92 result = fakepm.finalizeInstall(target);
93 EXPECT_EQ(
result.result_code, data::ResultCode::Numeric::kOk);
98 #include "utilities/fault_injection.h"
103 config.pacman.type = PACKAGE_MANAGER_NONE;
104 config.storage.path = temp_dir.Path();
105 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
106 auto http = std::make_shared<HttpFake>(temp_dir.Path());
108 KeyManager keys(storage, config.keymanagerConfig());
112 fault_injection_init();
116 Uptane::Target target(
"pkg", primary_ecu, {
Hash(Hash::Type::kSha256,
"hash")}, 0,
"");
117 EXPECT_TRUE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
120 fault_injection_enable(
"fake_package_download", 1,
"", 0);
121 EXPECT_FALSE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
122 fault_injection_disable(
"fake_package_download");
126 fault_injection_enable(
"fake_package_download", 1,
"RANDOM_DOWNLOAD_CAUSE", 0);
127 EXPECT_FALSE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
128 fault_injection_disable(
"fake_package_download");
134 config.pacman.type = PACKAGE_MANAGER_NONE;
135 config.storage.path = temp_dir.Path();
136 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
140 fault_injection_init();
144 Uptane::Target target(
"pkg", primary_ecu, {
Hash(Hash::Type::kSha256,
"hash")}, 1,
"");
145 auto result = fakepm.install(target);
146 EXPECT_EQ(
result.result_code, data::ResultCode::Numeric::kOk);
149 fault_injection_enable(
"fake_package_install", 1,
"", 0);
150 result = fakepm.install(target);
152 fault_injection_disable(
"fake_package_install");
155 fault_injection_enable(
"fake_package_install", 1,
"RANDOM_INSTALL_CAUSE", 0);
156 result = fakepm.install(target);
158 fault_injection_disable(
"fake_package_install");
164 int main(
int argc,
char **argv) {
165 ::testing::InitGoogleTest(&argc, argv);
167 return RUN_ALL_TESTS();