Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
uptane_test_common.h
1 #ifndef UPTANE_TEST_COMMON_H_
2 #define UPTANE_TEST_COMMON_H_
3 
4 #include <string>
5 #include <vector>
6 
7 #include "json/json.h"
8 
9 #include "config/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"
15 
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";
18 
20 
21  class TestAktualizr: public Aktualizr {
22  public:
23  TestAktualizr(Config& config): Aktualizr(config) {}
24 
25  TestAktualizr(Config& config,
26  std::shared_ptr<INvStorage> storage,
27  std::shared_ptr<HttpInterface> http)
28  : Aktualizr(config, storage, http) {
29 
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));
33  }
34  }
35  }
36 
37  std::shared_ptr<SotaUptaneClient>& uptane_client() { return uptane_client_; }
38  };
39 
41  {
42  public:
43  TestUptaneClient(Config &config_in,
44  std::shared_ptr<INvStorage> storage_in,
45  std::shared_ptr<HttpInterface> http_client,
46  std::shared_ptr<event::Channel> events_channel_in):
47  SotaUptaneClient(config_in, storage_in, http_client, events_channel_in) {
48 
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));
52  }
53  }
54  }
55 
56  TestUptaneClient(Config &config_in,
57  std::shared_ptr<INvStorage> storage_in,
58  std::shared_ptr<HttpInterface> http_client) : TestUptaneClient(config_in, storage_in, http_client, nullptr) {}
59 
60  TestUptaneClient(Config &config_in,
61  std::shared_ptr<INvStorage> storage_in) : TestUptaneClient(config_in, storage_in, std::make_shared<HttpClient>()) {}
62  };
63 
64  static Primary::VirtualSecondaryConfig addDefaultSecondary(Config& config, const TemporaryDirectory& temp_dir,
65  const std::string& serial, const std::string& hw_id,
66  bool hardcoded_keys = true) {
68 
69  ecu_config.partial_verifying = false;
70  ecu_config.full_client_dir = temp_dir.Path();
71  ecu_config.ecu_serial = serial;
72  ecu_config.ecu_hardware_id = hw_id;
73  ecu_config.ecu_private_key = "sec.priv";
74  ecu_config.ecu_public_key = "sec.pub";
75  ecu_config.firmware_path = temp_dir / "firmware.txt";
76  ecu_config.target_name_path = temp_dir / "firmware_name.txt";
77  ecu_config.metadata_path = temp_dir / "secondary_metadata";
78 
79  config.uptane.secondary_config_file = temp_dir / boost::filesystem::unique_path() / "virtual_secondary_conf.json";
80  ecu_config.dump(config.uptane.secondary_config_file);
81 
82  if (hardcoded_keys) {
83  // store hard-coded keys to make the tests run WAY faster
84  Utils::writeFile((ecu_config.full_client_dir / ecu_config.ecu_private_key), std::string(sec_private_key));
85  Utils::writeFile((ecu_config.full_client_dir / ecu_config.ecu_public_key), std::string(sec_public_key));
86  }
87  return ecu_config;
88  }
89 
90  static Config makeTestConfig(const TemporaryDirectory& temp_dir, const std::string& url) {
91  Config conf("tests/config/basic.toml");
92  conf.uptane.director_server = url + "/director";
93  conf.uptane.repo_server = url + "/repo";
94  conf.provision.server = url;
95  conf.provision.primary_ecu_serial = "CA:FE:A6:D2:84:9D";
96  conf.provision.primary_ecu_hardware_id = "primary_hw";
97  conf.storage.path = temp_dir.Path();
98  conf.import.base_path = temp_dir.Path() / "import";
99  conf.tls.server = url;
100  conf.bootloader.reboot_sentinel_dir = temp_dir.Path();
101  UptaneTestCommon::addDefaultSecondary(conf, temp_dir, "secondary_ecu_serial", "secondary_hw");
102  return conf;
103  }
104 
105  static std::vector<Uptane::Target> makePackage(const std::string &serial, const std::string &hw_id) {
106  std::vector<Uptane::Target> packages_to_install;
107  Json::Value ot_json;
108  ot_json["custom"]["ecuIdentifiers"][serial]["hardwareId"] = hw_id;
109  ot_json["custom"]["targetFormat"] = "OSTREE";
110  ot_json["length"] = 0;
111  ot_json["hashes"]["sha256"] = serial;
112  packages_to_install.emplace_back(serial, ot_json);
113  return packages_to_install;
114  }
115 };
116 
117 #endif // UPTANE_TEST_COMMON_H_
118 
119 
Aktualizr::Aktualizr
Aktualizr(const Config &config)
Aktualizr requires a configuration object.
Definition: aktualizr.cc:13
UptaneTestCommon::TestAktualizr
Definition: uptane_test_common.h:21
SotaUptaneClient
Definition: sotauptaneclient.h:31
Config
Configuration object for an aktualizr instance running on a primary ECU.
Definition: config.h:73
UptaneTestCommon::TestUptaneClient
Definition: uptane_test_common.h:40
Aktualizr
This class provides the main APIs necessary for launching and controlling libaktualizr.
Definition: aktualizr.h:20
Primary::VirtualSecondaryConfig
Definition: virtualsecondary.h:11
TemporaryDirectory
Definition: utils.h:82
Aktualizr::AddSecondary
void AddSecondary(const std::shared_ptr< Uptane::SecondaryInterface > &secondary)
Add new secondary to aktualizr.
Definition: aktualizr.cc:100
UptaneTestCommon
Definition: uptane_test_common.h:19