xref: /openbmc/phosphor-networkd/test/test_dhcp_configuration.cpp (revision dbafed3291d863c409616e737b7011d757678387)
1*dbafed32SRavi Teja #include "config_parser.hpp"
2*dbafed32SRavi Teja #include "dhcp_configuration.hpp"
3*dbafed32SRavi Teja #include "mock_ethernet_interface.hpp"
4*dbafed32SRavi Teja #include "test_network_manager.hpp"
5*dbafed32SRavi Teja 
6*dbafed32SRavi Teja #include <net/if_arp.h>
7*dbafed32SRavi Teja 
8*dbafed32SRavi Teja #include <sdbusplus/bus.hpp>
9*dbafed32SRavi Teja #include <stdplus/gtest/tmp.hpp>
10*dbafed32SRavi Teja 
11*dbafed32SRavi Teja #include <filesystem>
12*dbafed32SRavi Teja #include <fstream>
13*dbafed32SRavi Teja #include <string_view>
14*dbafed32SRavi Teja 
15*dbafed32SRavi Teja #include <gtest/gtest.h>
16*dbafed32SRavi Teja 
17*dbafed32SRavi Teja namespace phosphor
18*dbafed32SRavi Teja {
19*dbafed32SRavi Teja namespace network
20*dbafed32SRavi Teja {
21*dbafed32SRavi Teja namespace dhcp
22*dbafed32SRavi Teja {
23*dbafed32SRavi Teja 
24*dbafed32SRavi Teja using std::literals::string_view_literals::operator""sv;
25*dbafed32SRavi Teja using testing::Return;
26*dbafed32SRavi Teja 
27*dbafed32SRavi Teja class TestDHCPConfiguration : public stdplus::gtest::TestWithTmp
28*dbafed32SRavi Teja {
29*dbafed32SRavi Teja   public:
30*dbafed32SRavi Teja     stdplus::Pinned<sdbusplus::bus_t> bus;
31*dbafed32SRavi Teja     std::filesystem::path confDir;
32*dbafed32SRavi Teja     TestManager manager;
33*dbafed32SRavi Teja     MockEthernetInterface interface;
34*dbafed32SRavi Teja     static inline int testCounter = 0;
35*dbafed32SRavi Teja     int currentTestId;
36*dbafed32SRavi Teja 
TestDHCPConfiguration()37*dbafed32SRavi Teja     TestDHCPConfiguration() :
38*dbafed32SRavi Teja         bus(sdbusplus::bus::new_default()), confDir(CaseTmpDir()),
39*dbafed32SRavi Teja         manager(bus, "/xyz/openbmc_test/network", confDir),
40*dbafed32SRavi Teja         interface(makeInterface(bus, manager)), currentTestId(testCounter++)
41*dbafed32SRavi Teja     {}
42*dbafed32SRavi Teja 
makeInterface(stdplus::PinnedRef<sdbusplus::bus_t> bus,TestManager & manager)43*dbafed32SRavi Teja     static MockEthernetInterface makeInterface(
44*dbafed32SRavi Teja         stdplus::PinnedRef<sdbusplus::bus_t> bus, TestManager& manager)
45*dbafed32SRavi Teja     {
46*dbafed32SRavi Teja         AllIntfInfo info{InterfaceInfo{
47*dbafed32SRavi Teja             .type = ARPHRD_ETHER, .idx = 1, .flags = 0, .name = "test0"}};
48*dbafed32SRavi Teja         return {bus, manager, info, "/xyz/openbmc_test/network"sv,
49*dbafed32SRavi Teja                 config::Parser()};
50*dbafed32SRavi Teja     }
51*dbafed32SRavi Teja 
writeConfigFile(const std::string & content)52*dbafed32SRavi Teja     void writeConfigFile(const std::string& content)
53*dbafed32SRavi Teja     {
54*dbafed32SRavi Teja         auto confPath = confDir / "00-bmc-test0.network";
55*dbafed32SRavi Teja         std::ofstream file(confPath);
56*dbafed32SRavi Teja         file << content;
57*dbafed32SRavi Teja         file.close();
58*dbafed32SRavi Teja     }
59*dbafed32SRavi Teja 
createDHCPv4Config()60*dbafed32SRavi Teja     std::unique_ptr<Configuration> createDHCPv4Config()
61*dbafed32SRavi Teja     {
62*dbafed32SRavi Teja         EthernetInterface& ethIntf = interface;
63*dbafed32SRavi Teja         return std::make_unique<Configuration>(
64*dbafed32SRavi Teja             bus,
65*dbafed32SRavi Teja             "/xyz/openbmc_test/network/test0/dhcp4_" +
66*dbafed32SRavi Teja                 std::to_string(currentTestId),
67*dbafed32SRavi Teja             ethIntf, DHCPType::v4);
68*dbafed32SRavi Teja     }
69*dbafed32SRavi Teja 
createDHCPv6Config()70*dbafed32SRavi Teja     std::unique_ptr<Configuration> createDHCPv6Config()
71*dbafed32SRavi Teja     {
72*dbafed32SRavi Teja         EthernetInterface& ethIntf = interface;
73*dbafed32SRavi Teja         return std::make_unique<Configuration>(
74*dbafed32SRavi Teja             bus,
75*dbafed32SRavi Teja             "/xyz/openbmc_test/network/test0/dhcp6_" +
76*dbafed32SRavi Teja                 std::to_string(currentTestId),
77*dbafed32SRavi Teja             ethIntf, DHCPType::v6);
78*dbafed32SRavi Teja     }
79*dbafed32SRavi Teja };
80*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,ConstructorDHCPv4DefaultValues)81*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, ConstructorDHCPv4DefaultValues)
82*dbafed32SRavi Teja {
83*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
84*dbafed32SRavi Teja 
85*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
86*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
87*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
88*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
89*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
90*dbafed32SRavi Teja }
91*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,ConstructorDHCPv4LoadFromConfig)92*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, ConstructorDHCPv4LoadFromConfig)
93*dbafed32SRavi Teja {
94*dbafed32SRavi Teja     writeConfigFile(R"([Network]
95*dbafed32SRavi Teja DHCP=ipv4
96*dbafed32SRavi Teja [DHCPv4]
97*dbafed32SRavi Teja UseDNS=true
98*dbafed32SRavi Teja UseNTP=true
99*dbafed32SRavi Teja UseHostname=true
100*dbafed32SRavi Teja SendHostname=true
101*dbafed32SRavi Teja UseDomains=true
102*dbafed32SRavi Teja )");
103*dbafed32SRavi Teja 
104*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
105*dbafed32SRavi Teja 
106*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
107*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
108*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
109*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
110*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
111*dbafed32SRavi Teja }
112*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,ConstructorDHCPv6DefaultValues)113*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, ConstructorDHCPv6DefaultValues)
114*dbafed32SRavi Teja {
115*dbafed32SRavi Teja     auto dhcp = createDHCPv6Config();
116*dbafed32SRavi Teja 
117*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
118*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
119*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
120*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
121*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
122*dbafed32SRavi Teja }
123*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,ConstructorDHCPv6LoadFromConfig)124*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, ConstructorDHCPv6LoadFromConfig)
125*dbafed32SRavi Teja {
126*dbafed32SRavi Teja     writeConfigFile(R"([Network]
127*dbafed32SRavi Teja DHCP=ipv6
128*dbafed32SRavi Teja [DHCPv6]
129*dbafed32SRavi Teja UseDNS=true
130*dbafed32SRavi Teja UseNTP=false
131*dbafed32SRavi Teja UseHostname=true
132*dbafed32SRavi Teja SendHostname=false
133*dbafed32SRavi Teja UseDomains=true
134*dbafed32SRavi Teja )");
135*dbafed32SRavi Teja 
136*dbafed32SRavi Teja     auto dhcp = createDHCPv6Config();
137*dbafed32SRavi Teja 
138*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
139*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->ntpEnabled());
140*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
141*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->sendHostNameEnabled());
142*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
143*dbafed32SRavi Teja }
144*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetDNSEnabledTrue)145*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetDNSEnabledTrue)
146*dbafed32SRavi Teja {
147*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
148*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
149*dbafed32SRavi Teja 
150*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
151*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled(true));
152*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
153*dbafed32SRavi Teja }
154*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetDNSEnabledFalse)155*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetDNSEnabledFalse)
156*dbafed32SRavi Teja {
157*dbafed32SRavi Teja     writeConfigFile(R"([DHCPv4]
158*dbafed32SRavi Teja UseDNS=true
159*dbafed32SRavi Teja )");
160*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
161*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
162*dbafed32SRavi Teja 
163*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule());
164*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->dnsEnabled(false));
165*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->dnsEnabled());
166*dbafed32SRavi Teja }
167*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetDNSEnabledNoOpSameValue)168*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetDNSEnabledNoOpSameValue)
169*dbafed32SRavi Teja {
170*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
171*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
172*dbafed32SRavi Teja 
173*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
174*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled(true));
175*dbafed32SRavi Teja }
176*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetNTPEnabledTrue)177*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetNTPEnabledTrue)
178*dbafed32SRavi Teja {
179*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
180*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
181*dbafed32SRavi Teja 
182*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
183*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled(true));
184*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
185*dbafed32SRavi Teja }
186*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetNTPEnabledFalse)187*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetNTPEnabledFalse)
188*dbafed32SRavi Teja {
189*dbafed32SRavi Teja     writeConfigFile(R"([DHCPv4]
190*dbafed32SRavi Teja UseNTP=true
191*dbafed32SRavi Teja )");
192*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
193*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
194*dbafed32SRavi Teja 
195*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule());
196*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->ntpEnabled(false));
197*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->ntpEnabled());
198*dbafed32SRavi Teja }
199*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetNTPEnabledNoOpSameValue)200*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetNTPEnabledNoOpSameValue)
201*dbafed32SRavi Teja {
202*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
203*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
204*dbafed32SRavi Teja 
205*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
206*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled(true));
207*dbafed32SRavi Teja }
208*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetHostNameEnabledTrue)209*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetHostNameEnabledTrue)
210*dbafed32SRavi Teja {
211*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
212*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
213*dbafed32SRavi Teja 
214*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
215*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled(true));
216*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
217*dbafed32SRavi Teja }
218*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetHostNameEnabledFalse)219*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetHostNameEnabledFalse)
220*dbafed32SRavi Teja {
221*dbafed32SRavi Teja     writeConfigFile(R"([DHCPv4]
222*dbafed32SRavi Teja UseHostname=true
223*dbafed32SRavi Teja )");
224*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
225*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
226*dbafed32SRavi Teja 
227*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule());
228*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->hostNameEnabled(false));
229*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->hostNameEnabled());
230*dbafed32SRavi Teja }
231*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetHostNameEnabledNoOpSameValue)232*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetHostNameEnabledNoOpSameValue)
233*dbafed32SRavi Teja {
234*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
235*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
236*dbafed32SRavi Teja 
237*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
238*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled(true));
239*dbafed32SRavi Teja }
240*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetSendHostNameEnabledTrue)241*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetSendHostNameEnabledTrue)
242*dbafed32SRavi Teja {
243*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
244*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
245*dbafed32SRavi Teja 
246*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
247*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled(true));
248*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
249*dbafed32SRavi Teja }
250*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetSendHostNameEnabledFalse)251*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetSendHostNameEnabledFalse)
252*dbafed32SRavi Teja {
253*dbafed32SRavi Teja     writeConfigFile(R"([DHCPv4]
254*dbafed32SRavi Teja SendHostname=true
255*dbafed32SRavi Teja )");
256*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
257*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
258*dbafed32SRavi Teja 
259*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule());
260*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->sendHostNameEnabled(false));
261*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->sendHostNameEnabled());
262*dbafed32SRavi Teja }
263*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetSendHostNameEnabledNoOpSameValue)264*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetSendHostNameEnabledNoOpSameValue)
265*dbafed32SRavi Teja {
266*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
267*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
268*dbafed32SRavi Teja 
269*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
270*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled(true));
271*dbafed32SRavi Teja }
272*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetDomainEnabledTrue)273*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetDomainEnabledTrue)
274*dbafed32SRavi Teja {
275*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
276*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
277*dbafed32SRavi Teja 
278*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
279*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled(true));
280*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
281*dbafed32SRavi Teja }
282*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetDomainEnabledFalse)283*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetDomainEnabledFalse)
284*dbafed32SRavi Teja {
285*dbafed32SRavi Teja     writeConfigFile(R"([DHCPv4]
286*dbafed32SRavi Teja UseDomains=true
287*dbafed32SRavi Teja )");
288*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
289*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
290*dbafed32SRavi Teja 
291*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule());
292*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->domainEnabled(false));
293*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->domainEnabled());
294*dbafed32SRavi Teja }
295*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetDomainEnabledNoOpSameValue)296*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetDomainEnabledNoOpSameValue)
297*dbafed32SRavi Teja {
298*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
299*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
300*dbafed32SRavi Teja 
301*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
302*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled(true));
303*dbafed32SRavi Teja }
304*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,SetMultiplePropertiesSequentially)305*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, SetMultiplePropertiesSequentially)
306*dbafed32SRavi Teja {
307*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
308*dbafed32SRavi Teja 
309*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
310*dbafed32SRavi Teja 
311*dbafed32SRavi Teja     dhcp->dnsEnabled(true);
312*dbafed32SRavi Teja     dhcp->ntpEnabled(true);
313*dbafed32SRavi Teja     dhcp->hostNameEnabled(true);
314*dbafed32SRavi Teja     dhcp->sendHostNameEnabled(true);
315*dbafed32SRavi Teja     dhcp->domainEnabled(true);
316*dbafed32SRavi Teja 
317*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
318*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
319*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
320*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
321*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
322*dbafed32SRavi Teja }
323*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,TogglePropertiesMultipleTimes)324*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, TogglePropertiesMultipleTimes)
325*dbafed32SRavi Teja {
326*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
327*dbafed32SRavi Teja 
328*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(3);
329*dbafed32SRavi Teja 
330*dbafed32SRavi Teja     dhcp->dnsEnabled(false);
331*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->dnsEnabled());
332*dbafed32SRavi Teja 
333*dbafed32SRavi Teja     dhcp->dnsEnabled(true);
334*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
335*dbafed32SRavi Teja 
336*dbafed32SRavi Teja     dhcp->dnsEnabled(false);
337*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->dnsEnabled());
338*dbafed32SRavi Teja }
339*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,DHCPv6AllPropertiesEnabled)340*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, DHCPv6AllPropertiesEnabled)
341*dbafed32SRavi Teja {
342*dbafed32SRavi Teja     auto dhcp = createDHCPv6Config();
343*dbafed32SRavi Teja 
344*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
345*dbafed32SRavi Teja 
346*dbafed32SRavi Teja     dhcp->dnsEnabled(true);
347*dbafed32SRavi Teja     dhcp->ntpEnabled(true);
348*dbafed32SRavi Teja     dhcp->hostNameEnabled(true);
349*dbafed32SRavi Teja     dhcp->sendHostNameEnabled(true);
350*dbafed32SRavi Teja     dhcp->domainEnabled(true);
351*dbafed32SRavi Teja 
352*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
353*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
354*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
355*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
356*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
357*dbafed32SRavi Teja }
358*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,PartialConfigurationEnabled)359*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, PartialConfigurationEnabled)
360*dbafed32SRavi Teja {
361*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
362*dbafed32SRavi Teja 
363*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(2);
364*dbafed32SRavi Teja 
365*dbafed32SRavi Teja     dhcp->dnsEnabled(true);
366*dbafed32SRavi Teja     dhcp->ntpEnabled(true);
367*dbafed32SRavi Teja     dhcp->hostNameEnabled(false);
368*dbafed32SRavi Teja     dhcp->sendHostNameEnabled(false);
369*dbafed32SRavi Teja     dhcp->domainEnabled(true);
370*dbafed32SRavi Teja 
371*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
372*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
373*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->hostNameEnabled());
374*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->sendHostNameEnabled());
375*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
376*dbafed32SRavi Teja }
377*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,ConfigWrittenAfterUpdate)378*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, ConfigWrittenAfterUpdate)
379*dbafed32SRavi Teja {
380*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
381*dbafed32SRavi Teja 
382*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule());
383*dbafed32SRavi Teja     dhcp->dnsEnabled(false);
384*dbafed32SRavi Teja 
385*dbafed32SRavi Teja     auto confPath = confDir / "00-bmc-test0.network";
386*dbafed32SRavi Teja     EXPECT_TRUE(std::filesystem::exists(confPath));
387*dbafed32SRavi Teja }
388*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,RapidPropertyChanges)389*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, RapidPropertyChanges)
390*dbafed32SRavi Teja {
391*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
392*dbafed32SRavi Teja 
393*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(10);
394*dbafed32SRavi Teja 
395*dbafed32SRavi Teja     for (int i = 0; i < 5; ++i)
396*dbafed32SRavi Teja     {
397*dbafed32SRavi Teja         dhcp->dnsEnabled(false);
398*dbafed32SRavi Teja         dhcp->dnsEnabled(true);
399*dbafed32SRavi Teja     }
400*dbafed32SRavi Teja }
401*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,AllPropertiesDisabled)402*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, AllPropertiesDisabled)
403*dbafed32SRavi Teja {
404*dbafed32SRavi Teja     writeConfigFile(R"([DHCPv4]
405*dbafed32SRavi Teja UseDNS=true
406*dbafed32SRavi Teja UseNTP=true
407*dbafed32SRavi Teja UseHostname=true
408*dbafed32SRavi Teja SendHostname=true
409*dbafed32SRavi Teja UseDomains=true
410*dbafed32SRavi Teja )");
411*dbafed32SRavi Teja 
412*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
413*dbafed32SRavi Teja 
414*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(5);
415*dbafed32SRavi Teja 
416*dbafed32SRavi Teja     dhcp->dnsEnabled(false);
417*dbafed32SRavi Teja     dhcp->ntpEnabled(false);
418*dbafed32SRavi Teja     dhcp->hostNameEnabled(false);
419*dbafed32SRavi Teja     dhcp->sendHostNameEnabled(false);
420*dbafed32SRavi Teja     dhcp->domainEnabled(false);
421*dbafed32SRavi Teja 
422*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->dnsEnabled());
423*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->ntpEnabled());
424*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->hostNameEnabled());
425*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->sendHostNameEnabled());
426*dbafed32SRavi Teja     EXPECT_FALSE(dhcp->domainEnabled());
427*dbafed32SRavi Teja }
428*dbafed32SRavi Teja 
TEST_F(TestDHCPConfiguration,PropertiesAreIndependent)429*dbafed32SRavi Teja TEST_F(TestDHCPConfiguration, PropertiesAreIndependent)
430*dbafed32SRavi Teja {
431*dbafed32SRavi Teja     auto dhcp = createDHCPv4Config();
432*dbafed32SRavi Teja 
433*dbafed32SRavi Teja     EXPECT_CALL(manager.mockReload, schedule()).Times(0);
434*dbafed32SRavi Teja 
435*dbafed32SRavi Teja     dhcp->dnsEnabled(true);
436*dbafed32SRavi Teja     dhcp->ntpEnabled(true);
437*dbafed32SRavi Teja 
438*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->dnsEnabled());
439*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->ntpEnabled());
440*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->hostNameEnabled());
441*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->sendHostNameEnabled());
442*dbafed32SRavi Teja     EXPECT_TRUE(dhcp->domainEnabled());
443*dbafed32SRavi Teja }
444*dbafed32SRavi Teja 
445*dbafed32SRavi Teja } // namespace dhcp
446*dbafed32SRavi Teja } // namespace network
447*dbafed32SRavi Teja } // namespace phosphor
448