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, CanApplySdlClusterDbTypeStringAndReturnType)
88 databaseConfigurationImpl->checkAndApplyDbType("sdl-cluster");
89 const auto retDbType(databaseConfigurationImpl->getDbType());
90 EXPECT_EQ(DatabaseConfiguration::DbType::SDL_CLUSTER, retDbType);
93 TEST_F(DatabaseConfigurationImplTest, CanApplyNewAddressesOneByOneAndReturnAllAddresses)
95 databaseConfigurationImpl->checkAndApplyServerAddress("dummydatabaseaddress.local");
96 databaseConfigurationImpl->checkAndApplyServerAddress("10.20.30.40:65535");
97 const auto retAddresses(databaseConfigurationImpl->getServerAddresses());
98 EXPECT_EQ(2U, retAddresses.size());
99 EXPECT_EQ("dummydatabaseaddress.local", retAddresses.at(0).getHost());
100 EXPECT_EQ(6379U, ntohs(retAddresses.at(0).getPort()));
101 EXPECT_EQ("10.20.30.40", retAddresses.at(1).getHost());
102 EXPECT_EQ(65535U, ntohs(retAddresses.at(1).getPort()));
105 TEST_F(DatabaseConfigurationImplTest, CanThrowIfIllegalDbTypeIsApplied)
107 EXPECT_THROW(databaseConfigurationImpl->checkAndApplyDbType("bad_db_type"), DatabaseConfiguration::InvalidDbType);
110 TEST_F(DatabaseConfigurationImplTest, CanApplyIPv6AddressAndReturnIt)
112 databaseConfigurationImpl->checkAndApplyServerAddress("[2001::123]:12345");
113 const auto retAddresses(databaseConfigurationImpl->getServerAddresses());
114 EXPECT_EQ(1U, retAddresses.size());
115 EXPECT_EQ("2001::123", retAddresses.at(0).getHost());
116 EXPECT_EQ(12345U, ntohs(retAddresses.at(0).getPort()));
119 TEST_F(DatabaseConfigurationImplTest, IsEmptyReturnsCorrectInformation)
121 EXPECT_TRUE(databaseConfigurationImpl->isEmpty());
122 databaseConfigurationImpl->checkAndApplyServerAddress("[2001::123]:12345");
123 EXPECT_FALSE(databaseConfigurationImpl->isEmpty());
126 TEST_F(DatabaseConfigurationImplTest, DefaultSentinelAddressIsNone)
128 EXPECT_EQ(boost::none, databaseConfigurationImpl->getSentinelAddress(boost::none));
131 TEST_F(DatabaseConfigurationImplTest, CanApplyAndReturnSentinelAddress)
133 databaseConfigurationImpl->checkAndApplySentinelAddress("dummydatabaseaddress.local:1234");
134 auto address = databaseConfigurationImpl->getSentinelAddress(boost::none);
135 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(boost::none));
136 EXPECT_EQ("dummydatabaseaddress.local", address->getHost());
137 EXPECT_EQ(1234, ntohs(address->getPort()));
140 TEST_F(DatabaseConfigurationImplTest, DefaultSentinelMasterNameIsEmpty)
142 EXPECT_EQ("", databaseConfigurationImpl->getSentinelMasterName());
145 TEST_F(DatabaseConfigurationImplTest, CanApplyAndReturnSentinelMasterName)
147 databaseConfigurationImpl->checkAndApplySentinelMasterName("mymaster");
148 EXPECT_EQ("mymaster", databaseConfigurationImpl->getSentinelMasterName());
151 TEST_F(DatabaseConfigurationImplTest, CanReturnSDLClusterAddress)
153 databaseConfigurationImpl->checkAndApplyDbType("sdl-cluster");
154 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-0.local");
155 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-1.local");
156 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-2.local");
157 databaseConfigurationImpl->checkAndApplySentinelAddress("cluster-0.local:54321");
158 auto address0 = databaseConfigurationImpl->getSentinelAddress(0);
159 auto address1 = databaseConfigurationImpl->getSentinelAddress(1);
160 auto address2 = databaseConfigurationImpl->getSentinelAddress(2);
161 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(0));
162 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(1));
163 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(2));
164 EXPECT_EQ("cluster-0.local", address0->getHost());
165 EXPECT_EQ("cluster-1.local", address1->getHost());
166 EXPECT_EQ("cluster-2.local", address2->getHost());
167 EXPECT_EQ(54321, ntohs(address0->getPort()));
170 TEST_F(DatabaseConfigurationImplTest, CanReturnDefaultPortForSDLClusterAddress)
172 databaseConfigurationImpl->checkAndApplyServerAddress("cluster-0.local");
173 databaseConfigurationImpl->checkAndApplySentinelAddress("cluster-0.local");
174 auto address0 = databaseConfigurationImpl->getSentinelAddress(0);
175 EXPECT_NE(boost::none, databaseConfigurationImpl->getSentinelAddress(0));
176 EXPECT_EQ("cluster-0.local", address0->getHost());
177 EXPECT_EQ(26379, ntohs(address0->getPort()));