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