X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=tst%2Fconfigurationreader_test.cpp;h=55db2fc7692039bca976249d96623b2652cca478;hb=faf9fc79e58fa4ace9b0ef317b741afb2c1a8abe;hp=8120052193e3d7918becc0d312e614737f9b773e;hpb=ef2bf51d04aaf01fa0cabdcaf905b23423067662;p=ric-plt%2Fsdl.git diff --git a/tst/configurationreader_test.cpp b/tst/configurationreader_test.cpp index 8120052..55db2fc 100644 --- a/tst/configurationreader_test.cpp +++ b/tst/configurationreader_test.cpp @@ -14,6 +14,11 @@ limitations under the License. */ +/* + * This source code is part of the near-RT RIC (RAN Intelligent Controller) + * platform project (RICP). +*/ + #include #include #include @@ -57,11 +62,27 @@ namespace EXPECT_CALL(databaseConfigurationMock, checkAndApplyDbType(type)); } + void expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType type) + { + EXPECT_CALL(databaseConfigurationMock, getDbType()) + .WillOnce(Return(type)); + } + void expectDBServerAddressConfigurationCheckAndApply(const std::string& address) { EXPECT_CALL(databaseConfigurationMock, checkAndApplyServerAddress(address)); } + void expectSentinelAddressConfigurationCheckAndApply(const std::string& address) + { + EXPECT_CALL(databaseConfigurationMock, checkAndApplySentinelAddress(address)); + } + + void expectSentinelMasterNameConfigurationCheckAndApply(const std::string& address) + { + EXPECT_CALL(databaseConfigurationMock, checkAndApplySentinelMasterName(address)); + } + void expectDatabaseConfigurationIsEmpty_returnFalse() { EXPECT_CALL(databaseConfigurationMock, isEmpty()). @@ -723,6 +744,9 @@ class ConfigurationReaderEnvironmentVariableTest: public ConfigurationReaderBase public: std::string dbHostEnvVariableValue; std::string dbPortEnvVariableValue; + std::string sentinelPortEnvVariableValue; + std::string sentinelMasterNameEnvVariableValue; + std::string dbClusterAddrListEnvVariableValue; std::istringstream is{R"JSON( { "database": @@ -745,20 +769,25 @@ public: { } - void readEnvironmentConfigurationAndExpectConfigurationErrorException() + void readEnvironmentConfigurationAndExpectConfigurationErrorException(const std::string& msg, + bool expectCall) { std::ostringstream os; - os << "Configuration error in " << someKnownInputSource << ": some error"; + os << "Configuration error in " << someKnownInputSource << ": " << msg; - EXPECT_CALL(databaseConfigurationMock, checkAndApplyDbType(_)) - .WillOnce(Throw(Exception("some error"))); + if (expectCall) + EXPECT_CALL(databaseConfigurationMock, checkAndApplyDbType(_)) + .WillOnce(Throw(Exception("some error"))); EXPECT_THROW( { try { EXPECT_CALL(systemMock, getenv(_)) - .Times(2) + .Times(5) .WillOnce(Return(dbHostEnvVariableValue.c_str())) + .WillOnce(Return(nullptr)) + .WillOnce(Return(nullptr)) + .WillOnce(Return(nullptr)) .WillOnce(Return(nullptr)); initializeReaderWithoutDirectories(); configurationReader->readDatabaseConfiguration(databaseConfigurationMock); @@ -779,9 +808,13 @@ TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationCanOv expectGetEnvironmentString(dbHostEnvVariableValue.c_str()); dbPortEnvVariableValue = "12345"; expectGetEnvironmentString(dbPortEnvVariableValue.c_str()); + expectGetEnvironmentString(nullptr); //SENTINEL_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_MASTER_NAME_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //DB_CLUSTER_ENV_VAR_NAME expectDbTypeConfigurationCheckAndApply("redis-standalone"); expectDBServerAddressConfigurationCheckAndApply("unknownAddress.local:12345"); + expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType::REDIS_STANDALONE); initializeReaderWithSDLconfigFileDirectory(); configurationReader->readConfigurationFromInputStream(is); configurationReader->readDatabaseConfiguration(databaseConfigurationMock); @@ -792,10 +825,14 @@ TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationWitho InSequence dummy; dbHostEnvVariableValue = "server.local"; expectGetEnvironmentString(dbHostEnvVariableValue.c_str()); - expectGetEnvironmentString(nullptr); + expectGetEnvironmentString(nullptr); //DB_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_MASTER_NAME_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //DB_CLUSTER_ENV_VAR_NAME expectDbTypeConfigurationCheckAndApply("redis-standalone"); expectDBServerAddressConfigurationCheckAndApply("server.local"); + expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType::REDIS_STANDALONE); initializeReaderWithoutDirectories(); configurationReader->readDatabaseConfiguration(databaseConfigurationMock); } @@ -803,13 +840,14 @@ TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationWitho TEST_F(ConfigurationReaderEnvironmentVariableTest, EmptyEnvironmentVariableThrows) { dbHostEnvVariableValue = ""; - readEnvironmentConfigurationAndExpectConfigurationErrorException(); + readEnvironmentConfigurationAndExpectConfigurationErrorException("Missing environment variable configuration!", + false); } TEST_F(ConfigurationReaderEnvironmentVariableTest, IllegalCharacterInEnvironmentVariableThrows) { dbHostEnvVariableValue = "@"; - readEnvironmentConfigurationAndExpectConfigurationErrorException(); + readEnvironmentConfigurationAndExpectConfigurationErrorException("some error", true); } TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationAcceptIPv6Address) @@ -817,10 +855,101 @@ TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationAccep InSequence dummy; dbHostEnvVariableValue = "[2001::123]:12345"; expectGetEnvironmentString(dbHostEnvVariableValue.c_str()); - expectGetEnvironmentString(nullptr); + expectGetEnvironmentString(nullptr); //DB_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_MASTER_NAME_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //DB_CLUSTER_ENV_VAR_NAME expectDbTypeConfigurationCheckAndApply("redis-standalone"); expectDBServerAddressConfigurationCheckAndApply("[2001::123]:12345"); + expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType::REDIS_STANDALONE); + initializeReaderWithoutDirectories(); + configurationReader->readDatabaseConfiguration(databaseConfigurationMock); +} + +TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationWithSentinel) +{ + InSequence dummy; + dbHostEnvVariableValue = "sentinelAddress.local"; + expectGetEnvironmentString(dbHostEnvVariableValue.c_str()); + dbPortEnvVariableValue = "1111"; + expectGetEnvironmentString(dbPortEnvVariableValue.c_str()); + sentinelPortEnvVariableValue = "2222"; + expectGetEnvironmentString(sentinelPortEnvVariableValue.c_str()); + sentinelMasterNameEnvVariableValue = "mymaster"; + expectGetEnvironmentString(sentinelMasterNameEnvVariableValue.c_str()); + expectGetEnvironmentString(nullptr); //DB_CLUSTER_ENV_VAR_NAME + + expectDbTypeConfigurationCheckAndApply("redis-sentinel"); + expectDBServerAddressConfigurationCheckAndApply("sentinelAddress.local:1111"); + expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType::REDIS_SENTINEL); + expectSentinelAddressConfigurationCheckAndApply("sentinelAddress.local:2222"); + expectSentinelMasterNameConfigurationCheckAndApply(sentinelMasterNameEnvVariableValue); + initializeReaderWithoutDirectories(); + configurationReader->readDatabaseConfiguration(databaseConfigurationMock); +} + +TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationWithSentinelAndClusterConfiguration) +{ + InSequence dummy; + dbHostEnvVariableValue = "address-0.local"; + expectGetEnvironmentString(dbHostEnvVariableValue.c_str()); + expectGetEnvironmentString(nullptr); //DB_PORT_ENV_VAR_NAME + sentinelPortEnvVariableValue = "2222"; + expectGetEnvironmentString(sentinelPortEnvVariableValue.c_str()); + sentinelMasterNameEnvVariableValue = "mymaster"; + expectGetEnvironmentString(sentinelMasterNameEnvVariableValue.c_str()); + dbClusterAddrListEnvVariableValue = "address-0.local,address-1.local,address-2.local"; + expectGetEnvironmentString(dbClusterAddrListEnvVariableValue.c_str()); + + expectDbTypeConfigurationCheckAndApply("sdl-sentinel-cluster"); + expectDBServerAddressConfigurationCheckAndApply("address-0.local"); + expectDBServerAddressConfigurationCheckAndApply("address-1.local"); + expectDBServerAddressConfigurationCheckAndApply("address-2.local"); + expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType::SDL_SENTINEL_CLUSTER); + expectSentinelAddressConfigurationCheckAndApply("address-0.local:2222"); + expectSentinelMasterNameConfigurationCheckAndApply(sentinelMasterNameEnvVariableValue); + initializeReaderWithoutDirectories(); + configurationReader->readDatabaseConfiguration(databaseConfigurationMock); +} + +TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationWithoutSentinelAndWithClusterConfiguration) +{ + InSequence dummy; + dbHostEnvVariableValue = "address-0.local"; + expectGetEnvironmentString(dbHostEnvVariableValue.c_str()); + expectGetEnvironmentString(nullptr); //DB_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_MASTER_NAME_ENV_VAR_NAME + dbClusterAddrListEnvVariableValue = "address-0.local,address-1.local,address-2.local"; + expectGetEnvironmentString(dbClusterAddrListEnvVariableValue.c_str()); + + expectDbTypeConfigurationCheckAndApply("sdl-standalone-cluster"); + expectDBServerAddressConfigurationCheckAndApply("address-0.local"); + expectDBServerAddressConfigurationCheckAndApply("address-1.local"); + expectDBServerAddressConfigurationCheckAndApply("address-2.local"); + expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType::SDL_STANDALONE_CLUSTER); + initializeReaderWithoutDirectories(); + configurationReader->readDatabaseConfiguration(databaseConfigurationMock); +} + +TEST_F(ConfigurationReaderEnvironmentVariableTest, EnvironmentConfigurationWithoutSentinelAndWithClusterConfigurationAndDbPort) +{ + InSequence dummy; + dbHostEnvVariableValue = "address-0.local"; + expectGetEnvironmentString(dbHostEnvVariableValue.c_str()); + dbPortEnvVariableValue = "1111"; + expectGetEnvironmentString(dbPortEnvVariableValue.c_str()); + expectGetEnvironmentString(nullptr); //SENTINEL_PORT_ENV_VAR_NAME + expectGetEnvironmentString(nullptr); //SENTINEL_MASTER_NAME_ENV_VAR_NAME + dbClusterAddrListEnvVariableValue = "address-0.local,address-1.local,address-2.local"; + expectGetEnvironmentString(dbClusterAddrListEnvVariableValue.c_str()); + + expectDbTypeConfigurationCheckAndApply("sdl-standalone-cluster"); + expectDBServerAddressConfigurationCheckAndApply("address-0.local:1111"); + expectDBServerAddressConfigurationCheckAndApply("address-1.local:1111"); + expectDBServerAddressConfigurationCheckAndApply("address-2.local:1111"); + expectGetDbTypeAndWillOnceReturn(DatabaseConfiguration::DbType::SDL_STANDALONE_CLUSTER); initializeReaderWithoutDirectories(); configurationReader->readDatabaseConfiguration(databaseConfigurationMock); }