Skip to content

Commit fab7b32

Browse files
[app,config,database] Move db config in a separate structure
Signed-off-by: Mykola Kobets <mykola_kobets@epam.com>
1 parent 115f208 commit fab7b32

File tree

8 files changed

+66
-41
lines changed

8 files changed

+66
-41
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.mDatabase);
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

+22-7
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include <Poco/JSON/Object.h>
1313
#include <Poco/JSON/Parser.h>
14+
#include <Poco/Path.h>
1415

1516
#include <utils/json.hpp>
1617

@@ -25,6 +26,7 @@ constexpr auto cDefaultCPUInfoPath = "/proc/cpuinfo";
2526
constexpr auto cDefaultMemInfoPath = "/proc/meminfo";
2627
constexpr auto cDefaultProvisioningStatusPath = "/var/aos/.provisionstate";
2728
constexpr auto cDefaultNodeIDPath = "/etc/machine-id";
29+
constexpr auto cDBFileName = "iamanager.db";
2830

2931
/***********************************************************************************************************************
3032
* Static
@@ -101,6 +103,22 @@ static NodeInfoConfig ParseNodeInfoConfig(const aos::common::utils::CaseInsensit
101103
return nodeInfoConfig;
102104
}
103105

106+
static DatabaseConfig ParseDatabaseConfig(const aos::common::utils::CaseInsensitiveObjectWrapper& object)
107+
{
108+
DatabaseConfig config {};
109+
110+
auto migration = object.GetObject("migration");
111+
112+
config.mMigrationPath = migration.GetValue<std::string>("migrationPath");
113+
config.mMergedMigrationPath = migration.GetValue<std::string>("mergedMigrationPath");
114+
115+
auto workDir = object.GetValue<std::string>("workingDir");
116+
117+
config.mPath = Poco::Path(workDir, cDBFileName).toString();
118+
119+
return config;
120+
}
121+
104122
/***********************************************************************************************************************
105123
* Public functions
106124
**********************************************************************************************************************/
@@ -126,15 +144,12 @@ aos::RetWithError<Config> ParseConfig(const std::string& filename)
126144
config.mMainIAMPublicServerURL = object.GetValue<std::string>("mainIAMPublicServerURL");
127145
config.mMainIAMProtectedServerURL = object.GetValue<std::string>("mainIAMProtectedServerURL");
128146

129-
config.mCACert = object.GetValue<std::string>("caCert");
130-
config.mCertStorage = object.GetValue<std::string>("certStorage");
131-
config.mWorkingDir = object.GetValue<std::string>("workingDir");
132-
config.mEnablePermissionsHandler = object.GetValue<bool>("enablePermissionsHandler");
147+
config.mCACert = object.GetValue<std::string>("caCert");
148+
config.mCertStorage = object.GetValue<std::string>("certStorage");
133149

134-
auto migration = object.GetObject("migration");
150+
config.mEnablePermissionsHandler = object.GetValue<bool>("enablePermissionsHandler");
135151

136-
config.mMigrationPath = migration.GetValue<std::string>("migrationPath");
137-
config.mMergedMigrationPath = migration.GetValue<std::string>("mergedMigrationPath");
152+
config.mDatabase = ParseDatabaseConfig(object);
138153

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

src/config/config.hpp

+10-3
Original file line numberDiff line numberDiff line change
@@ -94,21 +94,28 @@ struct NodeInfoConfig {
9494
std::vector<PartitionInfoConfig> mPartitions;
9595
};
9696

97+
/**
98+
* Database configuration.
99+
*/
100+
struct DatabaseConfig {
101+
std::string mPath;
102+
std::string mMigrationPath;
103+
std::string mMergedMigrationPath;
104+
};
105+
97106
/*
98107
* Config instance.
99108
*/
100109
struct Config {
101110
NodeInfoConfig mNodeInfo;
111+
DatabaseConfig mDatabase;
102112
std::string mIAMPublicServerURL;
103113
std::string mIAMProtectedServerURL;
104114
std::string mMainIAMPublicServerURL;
105115
std::string mMainIAMProtectedServerURL;
106116
aos::common::utils::Duration mNodeReconnectInterval;
107117
std::string mCACert;
108118
std::string mCertStorage;
109-
std::string mWorkingDir;
110-
std::string mMigrationPath;
111-
std::string mMergedMigrationPath;
112119
std::vector<ModuleConfig> mCertModules;
113120
std::vector<std::string> mStartProvisioningCmdArgs;
114121
std::vector<std::string> mDiskEncryptionCmdArgs;

src/database/database.cpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,22 @@ Database::Database()
3838
Poco::Data::SQLite::Connector::registerConnector();
3939
}
4040

41-
aos::Error Database::Init(
42-
const std::string& dbPath, const std::string& migrationPath, const std::string& mergedMigrationPath)
41+
aos::Error Database::Init(const DatabaseConfig& config)
4342
{
4443
if (mSession && mSession->isConnected()) {
4544
return aos::ErrorEnum::eNone;
4645
}
4746

4847
try {
49-
auto dirPath = std::filesystem::path(dbPath).parent_path();
48+
auto dirPath = std::filesystem::path(config.mPath).parent_path();
5049
if (!std::filesystem::exists(dirPath)) {
5150
std::filesystem::create_directories(dirPath);
5251
}
5352

54-
mSession = std::make_unique<Poco::Data::Session>("SQLite", dbPath);
53+
mSession = std::make_unique<Poco::Data::Session>("SQLite", config.mPath);
5554
CreateTables();
5655

57-
mMigration.emplace(*mSession, migrationPath, mergedMigrationPath);
56+
mMigration.emplace(*mSession, config.mMigrationPath, config.mMergedMigrationPath);
5857
mMigration->MigrateToVersion(mVersion);
5958
} catch (const std::exception& e) {
6059
LOG_ERR() << "Failed to initialize database: " << e.what();

src/database/database.hpp

+3-5
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,10 @@ 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 config database configuration.
3534
* @return Error.
3635
*/
37-
aos::Error Init(
38-
const std::string& dbPath, const std::string& migrationPath, const std::string& mergedMigrationPath);
36+
aos::Error Init(const DatabaseConfig& config);
3937

4038
//
4139
// certhandler::StorageItf interface

tests/config/config_test.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,9 @@ TEST_F(ConfigTest, ParseConfig)
163163
EXPECT_EQ(config.mIAMProtectedServerURL, "localhost:8089");
164164
EXPECT_EQ(config.mCACert, "/etc/ssl/certs/rootCA.crt");
165165
EXPECT_EQ(config.mCertStorage, "/var/aos/crypt/iam/");
166-
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");
166+
EXPECT_EQ(config.mDatabase.mPath, "/var/aos/iamanager/iamanager.db");
167+
EXPECT_EQ(config.mDatabase.mMigrationPath, "/usr/share/aos/iam/migration");
168+
EXPECT_EQ(config.mDatabase.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-14
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,14 @@ 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+
mConfig.mPath = cFileName;
89+
mConfig.mMigrationPath = cMigrationPath;
90+
mConfig.mMergedMigrationPath = cMergedMigrationPath;
91+
92+
std::filesystem::create_directories(cMigrationPath);
93+
}
8794

8895
void TearDown() override { std::filesystem::remove_all("database"); }
8996

@@ -93,10 +100,12 @@ class DatabaseTest : public Test {
93100
}
94101

95102
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;
103+
static constexpr auto cFileName = "database/test/test.db";
104+
static constexpr auto cMigrationPath = "database/test/migration";
105+
static constexpr auto cMergedMigrationPath = "database/test/merged-migration";
106+
107+
DatabaseConfig mConfig;
108+
Database mDB;
100109
};
101110

102111
/***********************************************************************************************************************
@@ -113,7 +122,7 @@ TEST_F(DatabaseTest, AddCertInfo)
113122
certInfo.mKeyURL = "keyURL";
114123
certInfo.mNotAfter = aos::Time::Now();
115124

116-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
125+
EXPECT_EQ(mDB.Init(mConfig), aos::ErrorEnum::eNone);
117126

118127
EXPECT_EQ(mDB.AddCertInfo("type", certInfo), aos::ErrorEnum::eNone);
119128
EXPECT_EQ(mDB.AddCertInfo("type", certInfo), aos::ErrorEnum::eFailed);
@@ -128,7 +137,7 @@ TEST_F(DatabaseTest, AddCertInfo)
128137

129138
TEST_F(DatabaseTest, RemoveCertInfo)
130139
{
131-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
140+
EXPECT_EQ(mDB.Init(mConfig), aos::ErrorEnum::eNone);
132141

133142
aos::iam::certhandler::CertInfo certInfo;
134143

@@ -145,7 +154,7 @@ TEST_F(DatabaseTest, RemoveCertInfo)
145154

146155
TEST_F(DatabaseTest, RemoveAllCertsInfo)
147156
{
148-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
157+
EXPECT_EQ(mDB.Init(mConfig), aos::ErrorEnum::eNone);
149158

150159
aos::iam::certhandler::CertInfo certInfo;
151160

@@ -169,7 +178,7 @@ TEST_F(DatabaseTest, RemoveAllCertsInfo)
169178

170179
TEST_F(DatabaseTest, GetCertInfo)
171180
{
172-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
181+
EXPECT_EQ(mDB.Init(mConfig), aos::ErrorEnum::eNone);
173182

174183
aos::iam::certhandler::CertInfo certInfo {};
175184

@@ -204,7 +213,7 @@ TEST_F(DatabaseTest, GetCertInfo)
204213

205214
TEST_F(DatabaseTest, GetCertsInfo)
206215
{
207-
EXPECT_EQ(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath), aos::ErrorEnum::eNone);
216+
EXPECT_EQ(mDB.Init(mConfig), aos::ErrorEnum::eNone);
208217

209218
aos::StaticArray<aos::iam::certhandler::CertInfo, 2> certsInfo;
210219

@@ -252,7 +261,7 @@ TEST_F(DatabaseTest, GetNodeInfo)
252261
{
253262
const auto& nodeInfo = DefaultNodeInfo();
254263

255-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
264+
ASSERT_TRUE(mDB.Init(mConfig).IsNone());
256265

257266
ASSERT_TRUE(mDB.SetNodeInfo(nodeInfo).IsNone());
258267

@@ -267,7 +276,7 @@ TEST_F(DatabaseTest, GetAllNodeIds)
267276
const auto& node1 = DefaultNodeInfo("node1");
268277
const auto& node2 = DefaultNodeInfo("node2");
269278

270-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
279+
ASSERT_TRUE(mDB.Init(mConfig).IsNone());
271280

272281
ASSERT_TRUE(mDB.SetNodeInfo(node0).IsNone());
273282
ASSERT_TRUE(mDB.SetNodeInfo(node1).IsNone());
@@ -286,7 +295,7 @@ TEST_F(DatabaseTest, GetAllNodeIdsNotEnoughMemory)
286295
const auto& node1 = DefaultNodeInfo("node1");
287296
const auto& node2 = DefaultNodeInfo("node2");
288297

289-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
298+
ASSERT_TRUE(mDB.Init(mConfig).IsNone());
290299

291300
ASSERT_TRUE(mDB.SetNodeInfo(node0).IsNone());
292301
ASSERT_TRUE(mDB.SetNodeInfo(node1).IsNone());
@@ -303,7 +312,7 @@ TEST_F(DatabaseTest, RemoveNodeInfo)
303312
const auto& node1 = DefaultNodeInfo("node1");
304313
const auto& node2 = DefaultNodeInfo("node2");
305314

306-
ASSERT_TRUE(mDB.Init(mFileName, mMigrationPath, mMergedMigrationPath).IsNone());
315+
ASSERT_TRUE(mDB.Init(mConfig).IsNone());
307316

308317
ASSERT_TRUE(mDB.SetNodeInfo(node0).IsNone());
309318
ASSERT_TRUE(mDB.SetNodeInfo(node1).IsNone());

0 commit comments

Comments
 (0)