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 = PackageManager::kNone;
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();
43 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kNotFound);
46 auto whandle = storage->allocateTargetFile(
false, 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(
false, target);
55 EXPECT_EQ(whandle->wfeed(content_bad, length + 1), length + 1);
57 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kOversized);
60 whandle = storage->allocateTargetFile(
false, target);
61 EXPECT_EQ(whandle->wfeed(content, length - 1), length - 1);
63 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kIncomplete);
66 whandle = storage->allocateTargetFile(
false, target);
67 EXPECT_EQ(whandle->wfeed(content, length), length);
69 EXPECT_EQ(fakepm.verifyTarget(target), TargetStatus::kGood);
75 config.pacman.type = PackageManager::kNone;
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 result = fakepm.finalizeInstall(target);
91 EXPECT_EQ(
result.result_code, data::ResultCode::Numeric::kOk);
96 #include "utilities/fault_injection.h"
101 config.pacman.type = PackageManager::kNone;
102 config.storage.path = temp_dir.Path();
103 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
104 auto http = std::make_shared<HttpFake>(temp_dir.Path());
106 KeyManager keys(storage, config.keymanagerConfig());
110 fault_injection_init();
115 EXPECT_TRUE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
118 fault_injection_enable(
"fake_package_download", 1,
"", 0);
119 EXPECT_FALSE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
120 fault_injection_disable(
"fake_package_download");
124 fault_injection_enable(
"fake_package_download", 1,
"RANDOM_DOWNLOAD_CAUSE", 0);
125 EXPECT_FALSE(fakepm.fetchTarget(target, uptane_fetcher, keys,
nullptr,
nullptr));
126 fault_injection_disable(
"fake_package_download");
132 config.pacman.type = PackageManager::kNone;
133 config.storage.path = temp_dir.Path();
134 std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
138 fault_injection_init();
143 auto result = fakepm.install(target);
144 EXPECT_EQ(
result.result_code, data::ResultCode::Numeric::kOk);
147 fault_injection_enable(
"fake_package_install", 1,
"", 0);
148 result = fakepm.install(target);
150 fault_injection_disable(
"fake_package_install");
153 fault_injection_enable(
"fake_package_install", 1,
"RANDOM_INSTALL_CAUSE", 0);
154 result = fakepm.install(target);
156 fault_injection_disable(
"fake_package_install");
162 int main(
int argc,
char **argv) {
163 ::testing::InitGoogleTest(&argc, argv);
165 return RUN_ALL_TESTS();