1 #ifndef UPTANE_TEST_COMMON_H_ 2 #define UPTANE_TEST_COMMON_H_ 9 #include "libaktualizr/config.h" 10 #include "uptane/tuf.h" 11 #include "utilities/utils.h" 12 #include "virtualsecondary.h" 13 #include "primary/sotauptaneclient.h" 14 #include "primary/aktualizr.h" 16 static const char* sec_public_key =
"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyjUeAzozBEccaGFAJ2Q3\n9QBfItH5i5O7yLRjZlKcEnWnFsxAWHUn5W/msRgZN/pXUrlax0wvrvMvHHLwZA2J\nz+UQApzSqj53HPVAcCH6kB9x0r9PM/0vVTKtmcrdSHj7jJ2yAW2T4Vo/eKlpvz3w\n9kTPAj0j1f5LvUgX5VIjUnsQK1LGzMwnleHk2dkWeWnt3OqomnO7V5C0jkDi58tG\nJ6fnyCYWcMUbpMaldXVXqmQ+iBkWxBjZ99+XJSRjdsskC7x8u8t+sA146VDB977r\nN8D+i+P1tAe810crciUqpYNenDYx47aAm6gaDWr7oeDzp3HyCjx4dZi9Z85rVE36\n8wIDAQAB\n-----END PUBLIC KEY-----\n";
17 static const char* sec_private_key =
"-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAyjUeAzozBEccaGFAJ2Q39QBfItH5i5O7yLRjZlKcEnWnFsxA\nWHUn5W/msRgZN/pXUrlax0wvrvMvHHLwZA2Jz+UQApzSqj53HPVAcCH6kB9x0r9P\nM/0vVTKtmcrdSHj7jJ2yAW2T4Vo/eKlpvz3w9kTPAj0j1f5LvUgX5VIjUnsQK1LG\nzMwnleHk2dkWeWnt3OqomnO7V5C0jkDi58tGJ6fnyCYWcMUbpMaldXVXqmQ+iBkW\nxBjZ99+XJSRjdsskC7x8u8t+sA146VDB977rN8D+i+P1tAe810crciUqpYNenDYx\n47aAm6gaDWr7oeDzp3HyCjx4dZi9Z85rVE368wIDAQABAoIBAA0WlxS6Zab3O11+\nPfrOv9h5566HTNG+BD+ffXeYDUYcm24cVmXjX2u4bIQ1/RvkdlaCbN/NjKCUWQ5M\nWkb/oVX1i62/nNssI+WZ8kvPxzog7usnOucwkim/mAEGYoBYZF/brTPudc32W3lh\n7dhVGA24snWAo5ssVJax3eoYAPVLqFK5Pb8VUxpHtjERMDDUxM3w6WGXLxuBdA5s\n5vIdv+XrdiQhdPn1HMYEBBInkkYK8w4UytOCAS1/3xfVi2QwX5H9bHkduFpjLSQt\n2StWR9Kh4I80xXp7FwGpfkdUn+3qj5WwneuGY/JnD7AzjDlAThj0AE9iaYjkzXKJ\nVD4ULmECgYEA+UGQ1aglftFuTO427Xmi7tHhooo9U1pKMrg5CkCLkA+MudFzMEgj\npRtDdj8lTTWHEIYQXo5hhZfhk63j89RAKRz1MDFOvgknE8yJa9rSyCAEcwzRzXcY\n3WtWozEZ+5u4KYFHhGjJCSqVFdwyXmjP9ldb35Uxh06OuTbdNkSbiUsCgYEAz62t\nJ1EftTkd/YA/9Poq1deil5g0btPXnMJMj7C99dexNAXuVhS10Rz1Hi74wCFEbkcV\nGL/8U80pER9YYYeFUmqs1pYu7zwcYBT+iNrvFaPifid8FqlJEJ727swnWdpzXpwv\n/6q0h3JXU2odrEMNaGqiPycHQ/45EWMbCtpSs/kCgYEAwjMgWicA17bqvkuXRhzQ\nIkwqBU65ixi82JmJ73/sfNhwp1IV8hcylnAQdq+qK2a6Ddi2JkW+m6yDF2GTSiUj\nvCSQr/SqygsthBKHOx4pvbycWtsxF2lkWRdJUCpweQWRTd0o0HQntdmUgIyoPcBh\nzyevMBr4lNhTAOFLJv37RNMCgYAQq+ODjXqbJKuopvv7YX3Azt+phbln0C+10M8u\nlcSaEKeUAongdScnU0jGFIU5fzIsHB6wbvEFlSmfy0FgCu4D8LZRP5si71Njzyuj\ntteMiCxtbiQC+bH42JoAD3l1OBkc1jLwNjbpzJ7//jvFkVhpMm413Z8ysRzJrYgF\nNgN/mQKBgQDNT2nFoqanlQPkZekqNQNcVMHPyOWP40z4HC5JD1Z5F18Kg3El4EdS\nNfwaFGRT5qiFJBmmzl+6EFmUrrBNtV01zQ6rO+xgy2Y7qUQMNAUMjh1cCpWwUlN0\ng4aT/RawS5WpWN3+lEs4Ouxpgg4ZStXNZRJkSDHwZpkXtFfKzsEXaA==\n-----END RSA PRIVATE KEY-----\n";
26 std::shared_ptr<INvStorage> storage,
27 std::shared_ptr<HttpInterface> http)
30 if (boost::filesystem::exists(config.uptane.secondary_config_file)) {
31 for (
const auto& item : Primary::VirtualSecondaryConfig::create_from_file(config.uptane.secondary_config_file)) {
32 AddSecondary(std::make_shared<Primary::VirtualSecondary>(item));
37 std::shared_ptr<SotaUptaneClient>& uptane_client() {
return uptane_client_; }
44 std::shared_ptr<INvStorage> storage_in,
45 std::shared_ptr<HttpInterface> http_client,
46 std::shared_ptr<event::Channel> events_channel_in):
49 if (boost::filesystem::exists(config_in.uptane.secondary_config_file)) {
50 for (
const auto& item : Primary::VirtualSecondaryConfig::create_from_file(config_in.uptane.secondary_config_file)) {
51 addSecondary(std::make_shared<Primary::VirtualSecondary>(item));
57 std::shared_ptr<INvStorage> storage_in,
58 std::shared_ptr<HttpInterface> http_client) :
TestUptaneClient(config_in, storage_in, http_client,
nullptr) {}
61 std::shared_ptr<INvStorage> storage_in) :
TestUptaneClient(config_in, storage_in, std::make_shared<HttpClient>()) {}
65 const std::string& serial,
const std::string& hw_id,
66 bool hardcoded_keys =
true) {
67 const boost::filesystem::path sec_dir = temp_dir / boost::filesystem::unique_path();
68 Utils::createDirectories(sec_dir, S_IRWXU);
71 ecu_config.partial_verifying =
false;
72 ecu_config.full_client_dir = sec_dir;
73 ecu_config.ecu_serial = serial;
74 ecu_config.ecu_hardware_id = hw_id;
75 ecu_config.ecu_private_key =
"sec.priv";
76 ecu_config.ecu_public_key =
"sec.pub";
77 ecu_config.firmware_path = sec_dir /
"firmware.txt";
78 ecu_config.target_name_path = sec_dir /
"firmware_name.txt";
79 ecu_config.metadata_path = sec_dir /
"secondary_metadata";
82 config.uptane.secondary_config_file = temp_dir /
"virtual_secondary_conf.json";
83 ecu_config.dump(config.uptane.secondary_config_file);
87 Utils::writeFile((ecu_config.full_client_dir / ecu_config.ecu_private_key), std::string(sec_private_key));
88 Utils::writeFile((ecu_config.full_client_dir / ecu_config.ecu_public_key), std::string(sec_public_key));
94 const boost::filesystem::path sec_dir = client_dir / boost::filesystem::unique_path();
95 Utils::createDirectories(sec_dir, S_IRWXU);
98 ecu_config.partial_verifying =
false;
99 ecu_config.full_client_dir = sec_dir;
100 ecu_config.ecu_serial =
"ecuserial3";
101 ecu_config.ecu_hardware_id =
"hw_id3";
102 ecu_config.ecu_private_key =
"sec.priv";
103 ecu_config.ecu_public_key =
"sec.pub";
104 ecu_config.firmware_path = sec_dir /
"firmware.txt";
105 ecu_config.target_name_path = sec_dir /
"firmware_name.txt";
106 ecu_config.metadata_path = sec_dir /
"secondary_metadata";
109 Utils::writeFile((ecu_config.full_client_dir / ecu_config.ecu_private_key), std::string(sec_private_key));
110 Utils::writeFile((ecu_config.full_client_dir / ecu_config.ecu_public_key), std::string(sec_public_key));
116 Config conf(
"tests/config/basic.toml");
117 conf.uptane.director_server = url +
"/director";
118 conf.uptane.repo_server = url +
"/repo";
119 conf.provision.server = url;
120 conf.provision.primary_ecu_serial =
"CA:FE:A6:D2:84:9D";
121 conf.provision.primary_ecu_hardware_id =
"primary_hw";
122 conf.storage.path = temp_dir.Path();
123 conf.import.base_path = temp_dir.Path() /
"import";
124 conf.pacman.images_path = temp_dir.Path() /
"images";
125 conf.tls.server = url;
126 conf.bootloader.reboot_sentinel_dir = temp_dir.Path();
127 UptaneTestCommon::addDefaultSecondary(conf, temp_dir,
"secondary_ecu_serial",
"secondary_hw");
131 static std::vector<Uptane::Target> makePackage(
const std::string &serial,
const std::string &hw_id) {
132 std::vector<Uptane::Target> packages_to_install;
134 ot_json[
"custom"][
"ecuIdentifiers"][serial][
"hardwareId"] = hw_id;
135 ot_json[
"custom"][
"targetFormat"] =
"OSTREE";
136 ot_json[
"length"] = 0;
137 ot_json[
"hashes"][
"sha256"] = serial;
138 packages_to_install.emplace_back(serial, ot_json);
139 return packages_to_install;
142 static void verifyEcus(
TemporaryDirectory& temp_dir, std::vector<std::string> expected_ecus) {
143 const Json::Value ecu_data = Utils::parseJSONFile(temp_dir /
"post.json");
144 EXPECT_EQ(ecu_data[
"ecus"].size(), expected_ecus.size());
145 for (
const Json::Value& ecu : ecu_data[
"ecus"]) {
146 auto found = std::find(expected_ecus.begin(), expected_ecus.end(), ecu[
"ecu_serial"].asString());
147 if (found != expected_ecus.end()) {
148 expected_ecus.erase(found);
150 FAIL() <<
"Unknown ECU in registration data: " << ecu[
"ecu_serial"].asString();
153 EXPECT_EQ(expected_ecus.size(), 0);
158 #endif // UPTANE_TEST_COMMON_H_ void AddSecondary(const std::shared_ptr< SecondaryInterface > &secondary)
Add new Secondary to aktualizr.
Aktualizr(const Config &config)
Aktualizr requires a configuration object.
Configuration object for an aktualizr instance running on a Primary ECU.
This class provides the main APIs necessary for launching and controlling libaktualizr.