Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
uptane_ci_test.cc
1 #include <gtest/gtest.h>
2 
3 #include <fstream>
4 #include <iostream>
5 #include <memory>
6 
7 #include <boost/filesystem.hpp>
8 #include <boost/polymorphic_pointer_cast.hpp>
9 
10 #include "http/httpclient.h"
11 #include "logging/logging.h"
12 #include "package_manager/ostreemanager.h"
13 #include "package_manager/packagemanagerfactory.h"
14 #include "package_manager/packagemanagerinterface.h"
15 #include "primary/reportqueue.h"
16 #include "primary/sotauptaneclient.h"
17 #include "storage/invstorage.h"
18 #include "uptane/uptanerepository.h"
19 #include "uptane_test_common.h"
20 #include "utilities/utils.h"
21 
22 boost::filesystem::path credentials;
23 boost::filesystem::path sysroot;
24 
25 TEST(UptaneCI, ProvisionAndPutManifest) {
26  // note: see tests/shared_cred_prov_test.py which tests the same
27  // functionality, with the full aktualizr binary
28  TemporaryDirectory temp_dir;
29  Config config("tests/config/minimal.toml");
30  config.provision.provision_path = credentials;
31  config.provision.mode = ProvisionMode::kSharedCred;
32  config.storage.path = temp_dir.Path();
33  config.pacman.type = PackageManager::kNone;
34  config.postUpdateValues(); // re-run copy of urls
35 
36  auto storage = INvStorage::newStorage(config.storage);
37  auto sota_client = std_::make_unique<UptaneTestCommon::TestUptaneClient>(config, storage);
38  EXPECT_NO_THROW(sota_client->initialize());
39  EXPECT_TRUE(sota_client->putManifestSimple());
40 }
41 
42 TEST(UptaneCI, CheckKeys) {
43  TemporaryDirectory temp_dir;
44  Config config("tests/config/minimal.toml");
45  config.provision.provision_path = credentials;
46  config.provision.mode = ProvisionMode::kSharedCred;
47  config.storage.path = temp_dir.Path();
48  config.pacman.type = PackageManager::kOstree;
49  config.pacman.sysroot = sysroot;
50  config.postUpdateValues(); // re-run copy of urls
51  boost::filesystem::remove_all(config.storage.path);
52 
53  auto storage = INvStorage::newStorage(config.storage);
54 
55  UptaneTestCommon::addDefaultSecondary(config, temp_dir, "", "secondary_hardware");
56  auto sota_client = std_::make_unique<UptaneTestCommon::TestUptaneClient>(config, storage);
57  EXPECT_NO_THROW(sota_client->initialize());
58 
59  std::string ca;
60  std::string cert;
61  std::string pkey;
62  EXPECT_TRUE(storage->loadTlsCreds(&ca, &cert, &pkey));
63  EXPECT_TRUE(ca.size() > 0);
64  EXPECT_TRUE(cert.size() > 0);
65  EXPECT_TRUE(pkey.size() > 0);
66 
67  std::string primary_public;
68  std::string primary_private;
69  EXPECT_TRUE(storage->loadPrimaryKeys(&primary_public, &primary_private));
70  EXPECT_TRUE(primary_public.size() > 0);
71  EXPECT_TRUE(primary_private.size() > 0);
72 
73  std::map<Uptane::EcuSerial, std::shared_ptr<Uptane::SecondaryInterface> >::iterator it;
74  for (it = sota_client->secondaries.begin(); it != sota_client->secondaries.end(); it++) {
75  std::shared_ptr<Primary::ManagedSecondary> managed_secondary =
76  std::dynamic_pointer_cast<Primary::ManagedSecondary>(it->second);
77  EXPECT_TRUE(managed_secondary);
78 
79  std::string public_key;
80  std::string private_key;
81  EXPECT_TRUE(managed_secondary->loadKeys(&public_key, &private_key));
82  EXPECT_TRUE(public_key.size() > 0);
83  EXPECT_TRUE(private_key.size() > 0);
84  EXPECT_NE(public_key, private_key);
85  }
86 }
87 
88 #ifndef __NO_MAIN__
89 int main(int argc, char **argv) {
90  ::testing::InitGoogleTest(&argc, argv);
91  logger_init();
92  logger_set_threshold(boost::log::trivial::trace);
93 
94  if (argc != 3) {
95  std::cerr << "Error: " << argv[0]
96  << " requires a path to a credentials archive and an OSTree sysroot as input arguments.\n";
97  exit(EXIT_FAILURE);
98  }
99  credentials = argv[1];
100  sysroot = argv[2];
101  return RUN_ALL_TESTS();
102 }
103 #endif
Config
Configuration object for an aktualizr instance running on a primary ECU.
Definition: config.h:73
TemporaryDirectory
Definition: utils.h:82