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, CanApplySdlStandaloneClusterDbTypeStringAndReturnType)
88 databaseConfigurationImpl->checkAndApplyDbType("sdl-standalone-cluster");
89 const auto retDbType(databaseConfigurationImpl->getDbType());
90 EXPECT_EQ(DatabaseConfiguration::DbType::SDL_STANDALONE_CLUSTER, retDbType);
93 TEST_F(DatabaseConfigurationImplTest, CanApplySdlSentinelClusterDbTypeStringAndReturnType)
95 databaseConfigurationImpl->checkAndApplyDbType("sdl-sentinel-cluster");
96 const auto retDbType(databaseConfigurationImpl->getDbType());
97 EXPECT_EQ(DatabaseConfiguration::DbType::SDL_SENTINEL_CLUSTER, retDbType);
100 TEST_F(DatabaseConfigurationImplTest, CanApplyNewAddressesOneByOneAndReturnAllAddresses)
102 databaseConfigurationImpl->checkAndApplyServerAddress("dummydatabaseaddress.local");
103 databaseConfigurationImpl->checkAndApplyServerAddress("10.20.30.40:65535");
104 const auto retAddresses(databaseConfigurationImpl->getServerAddresses());
105 EXPECT_EQ(2U, retAddresses.size());
106 EXPECT_EQ("dummydatabaseaddress.local", retAddresses.at(0).getHost());
107 EXPECT_EQ(6379U, ntohs(retAddresses.at(0).getPort()));
108 EXPECT_EQ("10.20.30.40", retAddresses.at(1).getHost());
109 EXPECT_EQ(65535U, ntohs(retAddresses.at(1).getPort()));
112 TEST_F(DatabaseConfigurationImplTest, CanGetAddressesOneByOneWithAddressIndex)
114 databaseConfigurationImpl->checkAndApplyServerAddress("server0.local");
115 databaseConfigurationImpl->checkAndApplyServerAddress("10.20.30.40:65535");
116 const auto addresses(databaseConfigurationImpl->getServerAddresses(boost::none));
117 const auto addresses0(databaseConfigurationImpl->getServerAddresses(0));
118 const auto addresses1(databaseConfigurationImpl->getServerAddresses(1));
119 EXPECT_EQ(2U, addresses.size());
120 EXPECT_EQ(1U, addresses0.size());
121 EXPECT_EQ(1U, addresses1.size());
122 EXPECT_EQ("server0.local", addresses0.at(0).getHost());
123 EXPECT_EQ(6379U, ntohs(addresses0.at(0).getPort()));
124 EXPECT_EQ("10.20.30.40", addresses1.at(0).getHost());
125 EXPECT_EQ(65535U, ntohs(addresses1.at(0).getPort()));
128 TEST_F(DatabaseConfigurationImplTest, CanThrowIfIllegalDbTypeIsApplied)
130 EXPECT_THROW(databaseConfigurationImpl->checkAndApplyDbType("bad_db_type"), DatabaseConfiguration::InvalidDbType);
133 TEST_F(DatabaseConfigurationImplTest, CanApplyIPv6AddressAndReturnIt)
135 databaseConfigurationImpl->checkAndApplyServerAddress("[2001::123]:12345");
136 const auto retAddresses(databaseConfigurationImpl->getServerAddresses());
137 EXPECT_EQ(1U, retAddresses.size());
138 EXPECT_EQ("2001::123", retAddresses.at(0).getHost());
139 EXPECT_EQ(12345U, ntohs(retAddresses.at(0).getPort()));
142 TEST_F(DatabaseConfigurationImplTest, IsEmptyReturnsCorrectInformation)
144 EXPECT_TRUE(databaseConfigurationImpl->isEmpty());
145 databaseConfigurationImpl->checkAndApplyServerAddress("[2001::123]:12345");
146 EXPECT_FALSE(databaseConfigurationImpl->isEmpty());
149 TEST_F(DatabaseConfigurationImplTest, DefaultSentinelAddressIsNone)
151 EXPECT_EQ(boost::none, databaseConfigurationImpl->getSentinelAddress(boost::none));
154 TEST_F(DatabaseConfigurationImplTest, CanApplyAndReturnSentinelAddress)
156 databaseConfigurationImpl->checkAndApplySentinelAddress("dummydatabaseaddress.local:1234");
157 auto address = databaseConfigurationImpl->getSentinelAddress(boost::none);
158 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(boost::none));
159 EXPECT_EQ("dummydatabaseaddress.local", address->getHost());
160 EXPECT_EQ(1234, ntohs(address->getPort()));
163 TEST_F(DatabaseConfigurationImplTest, DefaultSentinelMasterNameIsEmpty)
165 EXPECT_EQ("", databaseConfigurationImpl->getSentinelMasterName());
168 TEST_F(DatabaseConfigurationImplTest, CanApplyAndReturnSentinelMasterName)
170 databaseConfigurationImpl->checkAndApplySentinelMasterName("mymaster");
171 EXPECT_EQ("mymaster", databaseConfigurationImpl->getSentinelMasterName());
174 TEST_F(DatabaseConfigurationImplTest, CanReturnSDLSentinelClusterAddress)
176 databaseConfigurationImpl->checkAndApplyDbType("sdl-sentinel-cluster");
177 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-0.local");
178 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-1.local");
179 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-2.local");
180 databaseConfigurationImpl->checkAndApplySentinelAddress("cluster-0.local:54321");
181 auto address0 = databaseConfigurationImpl->getSentinelAddress(0);
182 auto address1 = databaseConfigurationImpl->getSentinelAddress(1);
183 auto address2 = databaseConfigurationImpl->getSentinelAddress(2);
184 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(0));
185 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(1));
186 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(2));
187 EXPECT_EQ("cluster-0.local", address0->getHost());
188 EXPECT_EQ("cluster-1.local", address1->getHost());
189 EXPECT_EQ("cluster-2.local", address2->getHost());
190 EXPECT_EQ(54321, ntohs(address0->getPort()));
193 TEST_F(DatabaseConfigurationImplTest, CanReturnDefaultPortForSDLClusterAddress)
195 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-0.local");
196 databaseConfigurationImpl->checkAndApplySentinelAddress("cluster-0.local");
197 auto address0 = databaseConfigurationImpl->getSentinelAddress(0);
198 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(0));
199 EXPECT_EQ("cluster-0.local", address0->getHost());
200 EXPECT_EQ(26379, ntohs(address0->getPort()));