Skip to content

Commit 67710e8

Browse files
committed
Refactor initialization process
The purpose of this change is to allow SotaUptaneClient to operate offline (before provisioning has completed on-line). At the moment SotaUptaneClient still requires provisioning to complete (see SotaUptaneClient::initialize()), but this refactor is a step along the path outlined in uptane/aktualizr#8 Signed-off-by: Phil Wise <[email protected]>
1 parent 399bbd5 commit 67710e8

14 files changed

+492
-370
lines changed

src/libaktualizr/primary/CMakeLists.txt

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
set(SOURCES aktualizr.cc
22
aktualizr_helpers.cc
3-
initializer.cc
3+
provisioner.cc
44
reportqueue.cc
55
secondary_provider.cc
66
sotauptaneclient.cc)
77

88
set(HEADERS aktualizr_helpers.h
9-
initializer.h
9+
provisioner.h
1010
reportqueue.h
1111
secondary_config.h
1212
secondary_provider_builder.h
1313
sotauptaneclient.h)
1414

1515
add_library(primary OBJECT ${SOURCES})
1616

17+
add_library(provisioner_test_utils STATIC provisioner_test_utils.cc)
18+
aktualizr_source_file_checks(provisioner_test_utils.cc provisioner_test_utils.h)
19+
20+
1721
add_aktualizr_test(NAME aktualizr
1822
SOURCES aktualizr_test.cc
1923
PROJECT_WORKING_DIRECTORY
@@ -55,10 +59,10 @@ else (BUILD_OSTREE)
5559
aktualizr_source_file_checks(aktualizr_fullostree_test.cc download_nonostree_test.cc aktualizr_lite_test.cc)
5660
endif (BUILD_OSTREE)
5761

58-
add_aktualizr_test(NAME initializer
59-
SOURCES initializer_test.cc
62+
add_aktualizr_test(NAME provisioner
63+
SOURCES provisioner_test.cc
6064
PROJECT_WORKING_DIRECTORY
61-
LIBRARIES PUBLIC uptane_generator_lib)
65+
LIBRARIES PUBLIC uptane_generator_lib provisioner_test_utils)
6266

6367
add_aktualizr_test(NAME reportqueue
6468
SOURCES reportqueue_test.cc
@@ -97,7 +101,7 @@ add_aktualizr_test(NAME metadata_expiration
97101
add_aktualizr_test(NAME device_cred_prov
98102
SOURCES device_cred_prov_test.cc
99103
PROJECT_WORKING_DIRECTORY
100-
LIBRARIES uptane_generator_lib)
104+
LIBRARIES uptane_generator_lib provisioner_test_utils)
101105
set_tests_properties(test_device_cred_prov PROPERTIES LABELS "crypto")
102106

103107

src/libaktualizr/primary/device_cred_prov_test.cc

+26-25
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
#include "httpfake.h"
1111
#include "logging/logging.h"
12-
#include "primary/initializer.h"
12+
#include "primary/provisioner.h"
13+
#include "primary/provisioner_test_utils.h"
1314
#include "primary/sotauptaneclient.h"
1415
#include "storage/invstorage.h"
1516
#include "uptane/uptanerepository.h"
@@ -28,10 +29,10 @@ TEST(DeviceCredProv, DeviceIdFailure) {
2829

2930
auto storage = INvStorage::newStorage(config.storage);
3031
auto http = std::make_shared<HttpFake>(temp_dir.Path());
31-
KeyManager keys(storage, config.keymanagerConfig());
32+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
3233

3334
// Expect failure when trying to read the certificate to get the device ID.
34-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), std::exception);
35+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
3536
}
3637

3738
/**
@@ -49,10 +50,10 @@ TEST(DeviceCredProv, TlsFailure) {
4950

5051
auto storage = INvStorage::newStorage(config.storage);
5152
auto http = std::make_shared<HttpFake>(temp_dir.Path());
52-
KeyManager keys(storage, config.keymanagerConfig());
53+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
5354

5455
// Expect failure when trying to read the TLS credentials.
55-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), Initializer::Error);
56+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
5657
}
5758

5859
/**
@@ -79,9 +80,9 @@ TEST(DeviceCredProv, Incomplete) {
7980
boost::filesystem::copy_file("tests/test_data/device_cred_prov/ca.pem", temp_dir / "import/ca.pem");
8081
auto storage = INvStorage::newStorage(config.storage);
8182
storage->importData(config.import);
82-
KeyManager keys(storage, config.keymanagerConfig());
83+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
8384

84-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), Initializer::Error);
85+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
8586
}
8687

8788
{
@@ -93,9 +94,9 @@ TEST(DeviceCredProv, Incomplete) {
9394
boost::filesystem::copy_file("tests/test_data/device_cred_prov/client.pem", temp_dir / "import/client.pem");
9495
auto storage = INvStorage::newStorage(config.storage);
9596
storage->importData(config.import);
96-
KeyManager keys(storage, config.keymanagerConfig());
97+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
9798

98-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), Initializer::Error);
99+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
99100
}
100101

101102
{
@@ -107,9 +108,9 @@ TEST(DeviceCredProv, Incomplete) {
107108
boost::filesystem::copy_file("tests/test_data/device_cred_prov/pkey.pem", temp_dir / "import/pkey.pem");
108109
auto storage = INvStorage::newStorage(config.storage);
109110
storage->importData(config.import);
110-
KeyManager keys(storage, config.keymanagerConfig());
111+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
111112

112-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), Initializer::Error);
113+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
113114
}
114115

115116
{
@@ -122,9 +123,9 @@ TEST(DeviceCredProv, Incomplete) {
122123
boost::filesystem::copy_file("tests/test_data/device_cred_prov/client.pem", temp_dir / "import/client.pem");
123124
auto storage = INvStorage::newStorage(config.storage);
124125
storage->importData(config.import);
125-
KeyManager keys(storage, config.keymanagerConfig());
126+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
126127

127-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), Initializer::Error);
128+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
128129
}
129130

130131
{
@@ -137,9 +138,9 @@ TEST(DeviceCredProv, Incomplete) {
137138
boost::filesystem::copy_file("tests/test_data/device_cred_prov/pkey.pem", temp_dir / "import/pkey.pem");
138139
auto storage = INvStorage::newStorage(config.storage);
139140
storage->importData(config.import);
140-
KeyManager keys(storage, config.keymanagerConfig());
141+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
141142

142-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), Initializer::Error);
143+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
143144
}
144145

145146
{
@@ -152,9 +153,9 @@ TEST(DeviceCredProv, Incomplete) {
152153
boost::filesystem::copy_file("tests/test_data/device_cred_prov/pkey.pem", temp_dir / "import/pkey.pem");
153154
auto storage = INvStorage::newStorage(config.storage);
154155
storage->importData(config.import);
155-
KeyManager keys(storage, config.keymanagerConfig());
156+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
156157

157-
EXPECT_THROW(Initializer(config.provision, storage, http, keys, {}), Initializer::Error);
158+
ExpectProvisionError(Provisioner(config.provision, storage, http, keys, {}));
158159
}
159160

160161
// Do one last round with all three files to make sure it actually works as
@@ -169,9 +170,9 @@ TEST(DeviceCredProv, Incomplete) {
169170
boost::filesystem::copy_file("tests/test_data/device_cred_prov/pkey.pem", temp_dir / "import/pkey.pem");
170171
auto storage = INvStorage::newStorage(config.storage);
171172
storage->importData(config.import);
172-
KeyManager keys(storage, config.keymanagerConfig());
173+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
173174

174-
EXPECT_NO_THROW(Initializer(config.provision, storage, http, keys, {}));
175+
ExpectProvisionOK(Provisioner(config.provision, storage, http, keys, {}));
175176
}
176177

177178
/**
@@ -195,9 +196,9 @@ TEST(DeviceCredProv, Success) {
195196
auto storage = INvStorage::newStorage(config.storage);
196197
storage->importData(config.import);
197198
auto http = std::make_shared<HttpFake>(temp_dir.Path());
198-
KeyManager keys(storage, config.keymanagerConfig());
199+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
199200

200-
EXPECT_NO_THROW(Initializer(config.provision, storage, http, keys, {}));
201+
ExpectProvisionOK(Provisioner(config.provision, storage, http, keys, {}));
201202
}
202203

203204
/**
@@ -226,8 +227,8 @@ TEST(DeviceCredProv, ReImportCert) {
226227
/* prepare storage initialized with device_id from config where cert CN and device id are differen*/
227228
auto storage = INvStorage::newStorage(config.storage);
228229
storage->importData(config.import);
229-
KeyManager keys(storage, config.keymanagerConfig());
230-
EXPECT_NO_THROW(Initializer(config.provision, storage, http, keys, {}));
230+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
231+
ExpectProvisionOK(Provisioner(config.provision, storage, http, keys, {}));
231232
std::string device_id;
232233
EXPECT_TRUE(storage->loadDeviceId(&device_id));
233234
EXPECT_EQ(device_id, "AnYsTrInG");
@@ -237,8 +238,8 @@ TEST(DeviceCredProv, ReImportCert) {
237238
config.import.tls_clientcert_path = utils::BasedPath("newcert.pem");
238239
auto storage = INvStorage::newStorage(config.storage);
239240
EXPECT_NO_THROW(storage->importData(config.import));
240-
KeyManager keys(storage, config.keymanagerConfig());
241-
EXPECT_NO_THROW(Initializer(config.provision, storage, http, keys, {}));
241+
auto keys = std::make_shared<KeyManager>(storage, config.keymanagerConfig());
242+
ExpectProvisionOK(Provisioner(config.provision, storage, http, keys, {}));
242243
std::string device_id;
243244
EXPECT_TRUE(storage->loadDeviceId(&device_id));
244245
EXPECT_EQ(device_id, "AnYsTrInG");

src/libaktualizr/primary/initializer.h

-77
This file was deleted.

0 commit comments

Comments
 (0)