Skip to content

Commit 6f03d68

Browse files
[app,config,database] Move migration config into a separate struct
Signed-off-by: Mykola Kobets <mykola_kobets@epam.com>
1 parent 115f208 commit 6f03d68

File tree

8 files changed

+59
-40
lines changed

8 files changed

+59
-40
lines changed

src/app/app.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include <execinfo.h>
1010
#include <iostream>
1111

12-
#include <Poco/Path.h>
1312
#include <Poco/SignalHandler.h>
1413
#include <Poco/Util/HelpFormatter.h>
1514
#include <systemd/sd-daemon.h>
@@ -142,8 +141,7 @@ void App::initialize(Application& self)
142141
auto config = ParseConfig(mConfigFile.empty() ? cDefaultConfigFile : mConfigFile);
143142
AOS_ERROR_CHECK_AND_THROW("can't parse config", config.mError);
144143

145-
err = mDatabase.Init(Poco::Path(config.mValue.mWorkingDir, cDBFileName).toString(), config.mValue.mMigrationPath,
146-
config.mValue.mMergedMigrationPath);
144+
err = mDatabase.Init(config.mValue.mWorkingDir, config.mValue.mMigration);
147145
AOS_ERROR_CHECK_AND_THROW("can't initialize database", err);
148146

149147
err = mNodeInfoProvider.Init(config.mValue.mNodeInfo);

src/app/app.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class App : public Poco::Util::ServerApplication {
3636

3737
private:
3838
static constexpr auto cSDNotifyReady = "READY=1";
39-
static constexpr auto cDBFileName = "iamanager.db";
4039
static constexpr auto cDefaultConfigFile = "aos_iamanager.cfg";
4140
static constexpr auto cPKCS11CertModule = "pkcs11module";
4241

src/config/config.cpp

+11-5
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,16 @@ static NodeInfoConfig ParseNodeInfoConfig(const aos::common::utils::CaseInsensit
101101
return nodeInfoConfig;
102102
}
103103

104+
static MigrationConfig ParseMigrationConfig(const aos::common::utils::CaseInsensitiveObjectWrapper& migration)
105+
{
106+
MigrationConfig config {};
107+
108+
config.mMigrationPath = migration.GetValue<std::string>("migrationPath");
109+
config.mMergedMigrationPath = migration.GetValue<std::string>("mergedMigrationPath");
110+
111+
return config;
112+
}
113+
104114
/***********************************************************************************************************************
105115
* Public functions
106116
**********************************************************************************************************************/
@@ -130,11 +140,7 @@ aos::RetWithError<Config> ParseConfig(const std::string& filename)
130140
config.mCertStorage = object.GetValue<std::string>("certStorage");
131141
config.mWorkingDir = object.GetValue<std::string>("workingDir");
132142
config.mEnablePermissionsHandler = object.GetValue<bool>("enablePermissionsHandler");
133-
134-
auto migration = object.GetObject("migration");
135-
136-
config.mMigrationPath = migration.GetValue<std::string>("migrationPath");
137-
config.mMergedMigrationPath = migration.GetValue<std::string>("mergedMigrationPath");
143+
config.mMigration = ParseMigrationConfig(object.GetObject("migration"));
138144

139145
config.mStartProvisioningCmdArgs = aos::common::utils::GetArrayValue<std::string>(object,
140146
"startProvisioningCmdArgs", [](const Poco::Dynamic::Var& value) { return value.convert<std::string>(); });

src/config/config.hpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,14 @@ struct NodeInfoConfig {
9494
std::vector<PartitionInfoConfig> mPartitions;
9595
};
9696

97+
/**
98+
* Migration configuration.
99+
*/
100+
struct MigrationConfig {
101+
std::string mMigrationPath;
102+
std::string mMergedMigrationPath;
103+
};
104+
97105
/*
98106
* Config instance.
99107
*/
@@ -107,8 +115,7 @@ struct Config {
107115
std::string mCACert;
108116
std::string mCertStorage;
109117
std::string mWorkingDir;
110-
std::string mMigrationPath;
111-
std::string mMergedMigrationPath;
118+
MigrationConfig mMigration;
112119
std::vector<ModuleConfig> mCertModules;
113120
std::vector<std::string> mStartProvisioningCmdArgs;
114121
std::vector<std::string> mDiskEncryptionCmdArgs;

src/database/database.cpp

+7-6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <Poco/Data/SQLite/Connector.h>
1010
#include <Poco/JSON/Parser.h>
1111
#include <Poco/JSON/Stringifier.h>
12+
#include <Poco/Path.h>
1213
#include <filesystem>
1314

1415
#include "database.hpp"
@@ -38,24 +39,24 @@ Database::Database()
3839
Poco::Data::SQLite::Connector::registerConnector();
3940
}
4041

41-
aos::Error Database::Init(
42-
const std::string& dbPath, const std::string& migrationPath, const std::string& mergedMigrationPath)
42+
aos::Error Database::Init(const std::string& workDir, const MigrationConfig& migration)
4343
{
4444
if (mSession && mSession->isConnected()) {
4545
return aos::ErrorEnum::eNone;
4646
}
4747

4848
try {
49-
auto dirPath = std::filesystem::path(dbPath).parent_path();
49+
auto dirPath = std::filesystem::path(workDir);
5050
if (!std::filesystem::exists(dirPath)) {
5151
std::filesystem::create_directories(dirPath);
5252
}
5353

54-
mSession = std::make_unique<Poco::Data::Session>("SQLite", dbPath);
54+
const auto dbPath = Poco::Path(workDir, cDBFileName);
55+
mSession = std::make_unique<Poco::Data::Session>("SQLite", dbPath.toString());
5556
CreateTables();
5657

57-
mMigration.emplace(*mSession, migrationPath, mergedMigrationPath);
58-
mMigration->MigrateToVersion(mVersion);
58+
mMigration.emplace(*mSession, migration.mMigrationPath, migration.mMergedMigrationPath);
59+
mMigration->MigrateToVersion(cVersion);
5960
} catch (const std::exception& e) {
6061
LOG_ERR() << "Failed to initialize database: " << e.what();
6162

src/database/database.hpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include <aos/iam/certmodules/certmodule.hpp>
1919
#include <aos/iam/nodemanager.hpp>
20+
#include <config/config.hpp>
2021
#include <migration/migration.hpp>
2122

2223
class Database : public aos::iam::certhandler::StorageItf, public aos::iam::nodemanager::NodeInfoStorageItf {
@@ -29,13 +30,11 @@ class Database : public aos::iam::certhandler::StorageItf, public aos::iam::node
2930
/**
3031
* Initializes certificate info storage.
3132
*
32-
* @param dbPath path to the database file.
33-
* @param migrationPath path to the migration scripts.
34-
* @param mergedMigrationPath path to the merged migration scripts.
33+
* @param workDir working directory.
34+
* @param migrationConf migration configuration.
3535
* @return Error.
3636
*/
37-
aos::Error Init(
38-
const std::string& dbPath, const std::string& migrationPath, const std::string& mergedMigrationPath);
37+
aos::Error Init(const std::string& workDir, const MigrationConfig& migrationConf);
3938

4039
//
4140
// certhandler::StorageItf interface
@@ -134,7 +133,8 @@ class Database : public aos::iam::certhandler::StorageItf, public aos::iam::node
134133
enum CertColumns { eType = 0, eIssuer, eSerial, eCertURL, eKeyURL, eNotAfter };
135134
using CertInfo = Poco::Tuple<std::string, Poco::Data::BLOB, Poco::Data::BLOB, std::string, std::string, uint64_t>;
136135

137-
constexpr static int mVersion = 0;
136+
constexpr static int cVersion = 0;
137+
constexpr static auto cDBFileName = "iamanager.db";
138138

139139
void CreateTables();
140140
CertInfo ToAosCertInfo(const aos::String& certType, const aos::iam::certhandler::CertInfo& certInfo);

tests/config/config_test.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,8 @@ TEST_F(ConfigTest, ParseConfig)
164164
EXPECT_EQ(config.mCACert, "/etc/ssl/certs/rootCA.crt");
165165
EXPECT_EQ(config.mCertStorage, "/var/aos/crypt/iam/");
166166
EXPECT_EQ(config.mWorkingDir, "/var/aos/iamanager");
167-
EXPECT_EQ(config.mMigrationPath, "/usr/share/aos/iam/migration");
168-
EXPECT_EQ(config.mMergedMigrationPath, "/var/aos/workdirs/iam/migration");
167+
EXPECT_EQ(config.mMigration.mMigrationPath, "/usr/share/aos/iam/migration");
168+
EXPECT_EQ(config.mMigration.mMergedMigrationPath, "/var/aos/workdirs/iam/migration");
169169
EXPECT_EQ(config.mEnablePermissionsHandler, true);
170170

171171
EXPECT_EQ(config.mFinishProvisioningCmdArgs, std::vector<std::string> {"/var/aos/finish.sh"});

tests/database/database_test.cpp

+23-15
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,28 @@ static aos::NodeInfo DefaultNodeInfo(const char* id = "node0")
8383

8484
class DatabaseTest : public Test {
8585
protected:
86-
void SetUp() override { std::filesystem::create_directories(mMigrationPath); }
86+
void SetUp() override
87+
{
88+
mMigrationConfig.mMigrationPath = cMigrationPath;
89+
mMigrationConfig.mMergedMigrationPath = cMergedMigrationPath;
90+
91+
std::filesystem::create_directories(cMigrationPath);
92+
}
8793

88-
void TearDown() override { std::filesystem::remove_all("database"); }
94+
void TearDown() override { std::filesystem::remove_all(cWorkingDir); }
8995

9096
const aos::Array<uint8_t> StringToDN(const char* str)
9197
{
9298
return aos::Array<uint8_t>(reinterpret_cast<const uint8_t*>(str), strlen(str) + 1);
9399
}
94100

95101
protected:
96-
std::string mFileName = "database/test/test.db";
97-
std::string mMigrationPath = "database/test/migration";
98-
std::string mMergedMigrationPath = "database/test/merged-migration";
99-
Database mDB;
102+
static constexpr auto cWorkingDir = "database";
103+
static constexpr auto cMigrationPath = "database/migration";
104+
static constexpr auto cMergedMigrationPath = "database/merged-migration";
105+
106+
MigrationConfig mMigrationConfig;
107+
Database mDB;
100108
};
101109

102110
/***********************************************************************************************************************
@@ -113,7 +121,7 @@ TEST_F(DatabaseTest, AddCertInfo)
113121
certInfo.mKeyURL = "keyURL";
114122
certInfo.mNotAfter = aos::Time::Now();
115123

116-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
124+
EXPECT_EQ(mDB.Init(cWorkingDir, mMigrationConfig), aos::ErrorEnum::eNone);
117125

118126
EXPECT_EQ(mDB.AddCertInfo("type", certInfo), aos::ErrorEnum::eNone);
119127
EXPECT_EQ(mDB.AddCertInfo("type", certInfo), aos::ErrorEnum::eFailed);
@@ -128,7 +136,7 @@ TEST_F(DatabaseTest, AddCertInfo)
128136

129137
TEST_F(DatabaseTest, RemoveCertInfo)
130138
{
131-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
139+
EXPECT_EQ(mDB.Init(cWorkingDir, mMigrationConfig), aos::ErrorEnum::eNone);
132140

133141
aos::iam::certhandler::CertInfo certInfo;
134142

@@ -145,7 +153,7 @@ TEST_F(DatabaseTest, RemoveCertInfo)
145153

146154
TEST_F(DatabaseTest, RemoveAllCertsInfo)
147155
{
148-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
156+
EXPECT_EQ(mDB.Init(cWorkingDir, mMigrationConfig), aos::ErrorEnum::eNone);
149157

150158
aos::iam::certhandler::CertInfo certInfo;
151159

@@ -169,7 +177,7 @@ TEST_F(DatabaseTest, RemoveAllCertsInfo)
169177

170178
TEST_F(DatabaseTest, GetCertInfo)
171179
{
172-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
180+
EXPECT_EQ(mDB.Init(cWorkingDir, mMigrationConfig), aos::ErrorEnum::eNone);
173181

174182
aos::iam::certhandler::CertInfo certInfo {};
175183

@@ -204,7 +212,7 @@ TEST_F(DatabaseTest, GetCertInfo)
204212

205213
TEST_F(DatabaseTest, GetCertsInfo)
206214
{
207-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
215+
EXPECT_EQ(mDB.Init(cWorkingDir, mMigrationConfig), aos::ErrorEnum::eNone);
208216

209217
aos::StaticArray<aos::iam::certhandler::CertInfo, 2> certsInfo;
210218

@@ -252,7 +260,7 @@ TEST_F(DatabaseTest, GetNodeInfo)
252260
{
253261
const auto& nodeInfo = DefaultNodeInfo();
254262

255-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
263+
ASSERT_TRUE(mDB.Init(cWorkingDir, mMigrationConfig).IsNone());
256264

257265
ASSERT_TRUE(mDB.SetNodeInfo(nodeInfo).IsNone());
258266

@@ -267,7 +275,7 @@ TEST_F(DatabaseTest, GetAllNodeIds)
267275
const auto& node1 = DefaultNodeInfo("node1");
268276
const auto& node2 = DefaultNodeInfo("node2");
269277

270-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
278+
ASSERT_TRUE(mDB.Init(cWorkingDir, mMigrationConfig).IsNone());
271279

272280
ASSERT_TRUE(mDB.SetNodeInfo(node0).IsNone());
273281
ASSERT_TRUE(mDB.SetNodeInfo(node1).IsNone());
@@ -286,7 +294,7 @@ TEST_F(DatabaseTest, GetAllNodeIdsNotEnoughMemory)
286294
const auto& node1 = DefaultNodeInfo("node1");
287295
const auto& node2 = DefaultNodeInfo("node2");
288296

289-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
297+
ASSERT_TRUE(mDB.Init(cWorkingDir, mMigrationConfig).IsNone());
290298

291299
ASSERT_TRUE(mDB.SetNodeInfo(node0).IsNone());
292300
ASSERT_TRUE(mDB.SetNodeInfo(node1).IsNone());
@@ -303,7 +311,7 @@ TEST_F(DatabaseTest, RemoveNodeInfo)
303311
const auto& node1 = DefaultNodeInfo("node1");
304312
const auto& node2 = DefaultNodeInfo("node2");
305313

306-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
314+
ASSERT_TRUE(mDB.Init(cWorkingDir, mMigrationConfig).IsNone());
307315

308316
ASSERT_TRUE(mDB.SetNodeInfo(node0).IsNone());
309317
ASSERT_TRUE(mDB.SetNodeInfo(node1).IsNone());

0 commit comments

Comments
 (0)