Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
packagemanagerfactory_test.cc
1 #include <gtest/gtest.h>
2 
3 #include <memory>
4 
5 #include <boost/filesystem.hpp>
6 
7 #include "libaktualizr/config.h"
8 #include "libaktualizr/packagemanagerfactory.h"
9 #include "libaktualizr/packagemanagerinterface.h"
10 #include "package_manager/packagemanagerfake.h"
11 #include "storage/invstorage.h"
12 #include "utilities/utils.h"
13 
14 boost::filesystem::path sysroot;
15 
16 #ifdef BUILD_OSTREE
17 TEST(PackageManagerFactory, Ostree) {
18  Config config;
19  config.pacman.type = PACKAGE_MANAGER_OSTREE;
20  config.pacman.sysroot = sysroot;
21  config.pacman.os = "dummy-os";
23  config.storage.path = dir.Path();
24  std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
25  std::shared_ptr<PackageManagerInterface> pacman =
26  PackageManagerFactory::makePackageManager(config.pacman, config.bootloader, storage, nullptr);
27  EXPECT_TRUE(pacman);
28 }
29 #endif
30 
31 TEST(PackageManagerFactory, None) {
32  Config config;
34  config.storage.path = dir.Path();
35  std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
36  config.pacman.type = PACKAGE_MANAGER_NONE;
37  std::shared_ptr<PackageManagerInterface> pacman =
38  PackageManagerFactory::makePackageManager(config.pacman, config.bootloader, storage, nullptr);
39  EXPECT_TRUE(pacman);
40 }
41 
42 TEST(PackageManagerFactory, Bad) {
43  Config config;
45  config.storage.path = dir.Path();
46  config.pacman.type = "bad";
47  std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
48  EXPECT_THROW(PackageManagerFactory::makePackageManager(config.pacman, config.bootloader, storage, nullptr),
49  std::runtime_error);
50 }
51 
52 TEST(PackageManagerFactory, Register) {
53  // a package manager cannot be registered twice
54  EXPECT_THROW(PackageManagerFactory::registerPackageManager(
55  "none",
56  [](const PackageConfig&, const BootloaderConfig&, const std::shared_ptr<INvStorage>&,
57  const std::shared_ptr<HttpInterface>&) -> PackageManagerInterface* {
58  throw std::runtime_error("unimplemented");
59  }),
60  std::runtime_error);
61 
62  PackageManagerFactory::registerPackageManager(
63  "new",
64  [](const PackageConfig& pconfig, const BootloaderConfig& bconfig, const std::shared_ptr<INvStorage>& storage,
65  const std::shared_ptr<HttpInterface>& http) -> PackageManagerInterface* {
66  return new PackageManagerFake(pconfig, bconfig, storage, http);
67  });
68 
69  Config config;
70  TemporaryDirectory temp_dir;
71  config.storage.path = temp_dir.Path();
72  config.pacman.type = "new";
73  std::shared_ptr<INvStorage> storage = INvStorage::newStorage(config.storage);
74 
75  EXPECT_NE(PackageManagerFactory::makePackageManager(config.pacman, config.bootloader, storage, nullptr), nullptr);
76 }
77 
78 #ifndef __NO_MAIN__
79 int main(int argc, char** argv) {
80  ::testing::InitGoogleTest(&argc, argv);
81 
82  if (argc != 2) {
83  std::cerr << "Error: " << argv[0] << " requires the path to an OSTree sysroot as an input argument.\n";
84  return EXIT_FAILURE;
85  }
86  sysroot = argv[1];
87  return RUN_ALL_TESTS();
88 }
89 #endif
PackageManagerInterface
Definition: packagemanagerinterface.h:42
Config
Configuration object for an aktualizr instance running on a Primary ECU.
Definition: config.h:208
PackageManagerFactory
Definition: packagemanagerfactory.h:13
PackageManagerFake
Definition: packagemanagerfake.h:11
PackageConfig
Definition: config.h:91
TemporaryDirectory
Definition: utils.h:82
BootloaderConfig
Definition: config.h:156