2 Copyright (c) 2018-2019 Nokia.
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
18 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 * platform project (RICP).
22 #include <gtest/gtest.h>
23 #include <gmock/gmock.h>
24 #include <arpa/inet.h>
25 #include "private/databaseconfigurationimpl.hpp"
27 using namespace shareddatalayer;
28 using namespace testing;
32 class DatabaseConfigurationImplTest: public testing::Test
35 std::unique_ptr<DatabaseConfigurationImpl> databaseConfigurationImpl;
37 DatabaseConfigurationImplTest()
40 databaseConfigurationImpl.reset(new DatabaseConfigurationImpl());
45 TEST_F(DatabaseConfigurationImplTest, CanReturnDefaultAddress)
47 const auto retAddresses(databaseConfigurationImpl->getDefaultServerAddresses());
48 EXPECT_EQ(1U, retAddresses.size());
49 EXPECT_EQ("localhost", retAddresses.back().getHost());
50 EXPECT_EQ(6379U, ntohs(retAddresses.back().getPort()));
53 TEST_F(DatabaseConfigurationImplTest, CanReturnEmptyAddressListIfNoAddressesAreApplied)
55 const auto retAddresses(databaseConfigurationImpl->getServerAddresses());
56 EXPECT_TRUE(retAddresses.empty());
59 TEST_F(DatabaseConfigurationImplTest, CanReturnUnknownTypeIfNoRedisDbTypeIsApplied)
61 const auto retDbType(databaseConfigurationImpl->getDbType());
62 EXPECT_EQ(DatabaseConfiguration::DbType::UNKNOWN, retDbType);
65 TEST_F(DatabaseConfigurationImplTest, CanApplyRedisDbTypeStringAndReturnType)
67 databaseConfigurationImpl->checkAndApplyDbType("redis-standalone");
68 const auto retDbType(databaseConfigurationImpl->getDbType());
69 EXPECT_EQ(DatabaseConfiguration::DbType::REDIS_STANDALONE, retDbType);
72 TEST_F(DatabaseConfigurationImplTest, CanApplyRedisClusterDbTypeStringAndReturnType)
74 databaseConfigurationImpl->checkAndApplyDbType("redis-cluster");
75 const auto retDbType(databaseConfigurationImpl->getDbType());
76 EXPECT_EQ(DatabaseConfiguration::DbType::REDIS_CLUSTER, retDbType);
79 TEST_F(DatabaseConfigurationImplTest, CanApplyRedisSentinelDbTypeStringAndReturnType)
81 databaseConfigurationImpl->checkAndApplyDbType("redis-sentinel");
82 const auto retDbType(databaseConfigurationImpl->getDbType());
83 EXPECT_EQ(DatabaseConfiguration::DbType::REDIS_SENTINEL, retDbType);
86 TEST_F(DatabaseConfigurationImplTest, CanApplyNewAddressesOneByOneAndReturnAllAddresses)
88 databaseConfigurationImpl->checkAndApplyServerAddress("dummydatabaseaddress.local");
89 databaseConfigurationImpl->checkAndApplyServerAddress("10.20.30.40:65535");
90 const auto retAddresses(databaseConfigurationImpl->getServerAddresses());
91 EXPECT_EQ(2U, retAddresses.size());
92 EXPECT_EQ("dummydatabaseaddress.local", retAddresses.at(0).getHost());
93 EXPECT_EQ(6379U, ntohs(retAddresses.at(0).getPort()));
94 EXPECT_EQ("10.20.30.40", retAddresses.at(1).getHost());
95 EXPECT_EQ(65535U, ntohs(retAddresses.at(1).getPort()));
98 TEST_F(DatabaseConfigurationImplTest, CanThrowIfIllegalDbTypeIsApplied)
100 EXPECT_THROW(databaseConfigurationImpl->checkAndApplyDbType("bad_db_type"), DatabaseConfiguration::InvalidDbType);
103 TEST_F(DatabaseConfigurationImplTest, CanApplyIPv6AddressAndReturnIt)
105 databaseConfigurationImpl->checkAndApplyServerAddress("[2001::123]:12345");
106 const auto retAddresses(databaseConfigurationImpl->getServerAddresses());
107 EXPECT_EQ(1U, retAddresses.size());
108 EXPECT_EQ("2001::123", retAddresses.at(0).getHost());
109 EXPECT_EQ(12345U, ntohs(retAddresses.at(0).getPort()));
112 TEST_F(DatabaseConfigurationImplTest, IsEmptyReturnsCorrectInformation)
114 EXPECT_TRUE(databaseConfigurationImpl->isEmpty());
115 databaseConfigurationImpl->checkAndApplyServerAddress("[2001::123]:12345");
116 EXPECT_FALSE(databaseConfigurationImpl->isEmpty());
119 TEST_F(DatabaseConfigurationImplTest, DefaultSentinelAddressIsNone)
121 EXPECT_EQ(boost::none, databaseConfigurationImpl->getSentinelAddress());
124 TEST_F(DatabaseConfigurationImplTest, CanApplyAndReturnSentinelAddress)
126 databaseConfigurationImpl->checkAndApplySentinelAddress("dummydatabaseaddress.local:1234");
127 auto address = databaseConfigurationImpl->getSentinelAddress();
128 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress());
129 EXPECT_EQ("dummydatabaseaddress.local", address->getHost());
130 EXPECT_EQ(1234, ntohs(address->getPort()));
133 TEST_F(DatabaseConfigurationImplTest, DefaultSentinelMasterNameIsEmpty)
135 EXPECT_EQ("", databaseConfigurationImpl->getSentinelMasterName());
138 TEST_F(DatabaseConfigurationImplTest, CanApplyAndReturnSentinelMasterName)
140 databaseConfigurationImpl->checkAndApplySentinelMasterName("mymaster");
141 EXPECT_EQ("mymaster", databaseConfigurationImpl->getSentinelMasterName());