1*cf78ab8cSAndroid Build Coastguard Worker // Copyright 2022 The Android Open Source Project
2*cf78ab8cSAndroid Build Coastguard Worker //
3*cf78ab8cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*cf78ab8cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*cf78ab8cSAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*cf78ab8cSAndroid Build Coastguard Worker //
7*cf78ab8cSAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*cf78ab8cSAndroid Build Coastguard Worker //
9*cf78ab8cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*cf78ab8cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*cf78ab8cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cf78ab8cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*cf78ab8cSAndroid Build Coastguard Worker // limitations under the License.
14*cf78ab8cSAndroid Build Coastguard Worker
15*cf78ab8cSAndroid Build Coastguard Worker // Unit tests for IniFile class.
16*cf78ab8cSAndroid Build Coastguard Worker #include "util/ini_file.h"
17*cf78ab8cSAndroid Build Coastguard Worker
18*cf78ab8cSAndroid Build Coastguard Worker #include <cstdio>
19*cf78ab8cSAndroid Build Coastguard Worker #include <fstream>
20*cf78ab8cSAndroid Build Coastguard Worker #include <string>
21*cf78ab8cSAndroid Build Coastguard Worker
22*cf78ab8cSAndroid Build Coastguard Worker #include "gtest/gtest.h"
23*cf78ab8cSAndroid Build Coastguard Worker
24*cf78ab8cSAndroid Build Coastguard Worker namespace netsim {
25*cf78ab8cSAndroid Build Coastguard Worker namespace testing {
26*cf78ab8cSAndroid Build Coastguard Worker namespace {
27*cf78ab8cSAndroid Build Coastguard Worker
28*cf78ab8cSAndroid Build Coastguard Worker class IniFileReadTest : public ::testing::TestWithParam<std::string> {
29*cf78ab8cSAndroid Build Coastguard Worker public:
SetUp()30*cf78ab8cSAndroid Build Coastguard Worker void SetUp() override {
31*cf78ab8cSAndroid Build Coastguard Worker tempFileName_ = std::tmpnam(NULL);
32*cf78ab8cSAndroid Build Coastguard Worker std::ofstream outTempFile(tempFileName_);
33*cf78ab8cSAndroid Build Coastguard Worker ASSERT_TRUE(outTempFile.is_open());
34*cf78ab8cSAndroid Build Coastguard Worker outTempFile << GetParam();
35*cf78ab8cSAndroid Build Coastguard Worker outTempFile.close();
36*cf78ab8cSAndroid Build Coastguard Worker }
TearDown()37*cf78ab8cSAndroid Build Coastguard Worker void TearDown() override {
38*cf78ab8cSAndroid Build Coastguard Worker // Delete temp file.
39*cf78ab8cSAndroid Build Coastguard Worker ASSERT_EQ(std::remove(tempFileName_), 0);
40*cf78ab8cSAndroid Build Coastguard Worker }
41*cf78ab8cSAndroid Build Coastguard Worker const char *tempFileName_;
42*cf78ab8cSAndroid Build Coastguard Worker };
43*cf78ab8cSAndroid Build Coastguard Worker
TEST_P(IniFileReadTest,Read)44*cf78ab8cSAndroid Build Coastguard Worker TEST_P(IniFileReadTest, Read) {
45*cf78ab8cSAndroid Build Coastguard Worker IniFile iniFile(tempFileName_);
46*cf78ab8cSAndroid Build Coastguard Worker iniFile.Read();
47*cf78ab8cSAndroid Build Coastguard Worker
48*cf78ab8cSAndroid Build Coastguard Worker EXPECT_TRUE(iniFile.HasKey("port"));
49*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("unknown-key"));
50*cf78ab8cSAndroid Build Coastguard Worker EXPECT_TRUE(iniFile.Get("port").has_value());
51*cf78ab8cSAndroid Build Coastguard Worker EXPECT_EQ(iniFile.Get("port").value(), "123");
52*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("unknown-key").has_value());
53*cf78ab8cSAndroid Build Coastguard Worker }
54*cf78ab8cSAndroid Build Coastguard Worker
55*cf78ab8cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(IniFileParameters, IniFileReadTest,
56*cf78ab8cSAndroid Build Coastguard Worker ::testing::Values("port=123", "port= 123", "port =123",
57*cf78ab8cSAndroid Build Coastguard Worker " port = 123 "));
58*cf78ab8cSAndroid Build Coastguard Worker
TEST(IniFileTest,SetTest)59*cf78ab8cSAndroid Build Coastguard Worker TEST(IniFileTest, SetTest) {
60*cf78ab8cSAndroid Build Coastguard Worker const char *tempFileName = tmpnam(NULL);
61*cf78ab8cSAndroid Build Coastguard Worker IniFile iniFile(tempFileName);
62*cf78ab8cSAndroid Build Coastguard Worker
63*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("port"));
64*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("unknown-key"));
65*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("port").has_value());
66*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("unknown-key").has_value());
67*cf78ab8cSAndroid Build Coastguard Worker
68*cf78ab8cSAndroid Build Coastguard Worker iniFile.Set("port", "123");
69*cf78ab8cSAndroid Build Coastguard Worker EXPECT_TRUE(iniFile.HasKey("port"));
70*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("unknown-key"));
71*cf78ab8cSAndroid Build Coastguard Worker EXPECT_EQ(iniFile.Get("port").value(), "123");
72*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("unknown-key").has_value());
73*cf78ab8cSAndroid Build Coastguard Worker
74*cf78ab8cSAndroid Build Coastguard Worker // Update the value of an existing key.
75*cf78ab8cSAndroid Build Coastguard Worker iniFile.Set("port", "234");
76*cf78ab8cSAndroid Build Coastguard Worker EXPECT_TRUE(iniFile.HasKey("port"));
77*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("unknown-key"));
78*cf78ab8cSAndroid Build Coastguard Worker EXPECT_EQ(iniFile.Get("port").value(), "234");
79*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("unknown-key").has_value());
80*cf78ab8cSAndroid Build Coastguard Worker }
81*cf78ab8cSAndroid Build Coastguard Worker
TEST(IniFileTest,WriteTest)82*cf78ab8cSAndroid Build Coastguard Worker TEST(IniFileTest, WriteTest) {
83*cf78ab8cSAndroid Build Coastguard Worker const char *tempFileName = tmpnam(NULL);
84*cf78ab8cSAndroid Build Coastguard Worker {
85*cf78ab8cSAndroid Build Coastguard Worker IniFile iniFile(tempFileName);
86*cf78ab8cSAndroid Build Coastguard Worker
87*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("port"));
88*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("unknown-key"));
89*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("port").has_value());
90*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("unknown-key").has_value());
91*cf78ab8cSAndroid Build Coastguard Worker
92*cf78ab8cSAndroid Build Coastguard Worker iniFile.Set("port", "123");
93*cf78ab8cSAndroid Build Coastguard Worker EXPECT_TRUE(iniFile.HasKey("port"));
94*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.HasKey("unknown-key"));
95*cf78ab8cSAndroid Build Coastguard Worker EXPECT_EQ(iniFile.Get("port").value(), "123");
96*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(iniFile.Get("unknown-key").has_value());
97*cf78ab8cSAndroid Build Coastguard Worker
98*cf78ab8cSAndroid Build Coastguard Worker iniFile.Write();
99*cf78ab8cSAndroid Build Coastguard Worker
100*cf78ab8cSAndroid Build Coastguard Worker std::ifstream inTempFile(tempFileName);
101*cf78ab8cSAndroid Build Coastguard Worker std::string line;
102*cf78ab8cSAndroid Build Coastguard Worker ASSERT_TRUE(getline(inTempFile, line));
103*cf78ab8cSAndroid Build Coastguard Worker EXPECT_EQ(line, "port=123");
104*cf78ab8cSAndroid Build Coastguard Worker EXPECT_FALSE(getline(inTempFile, line));
105*cf78ab8cSAndroid Build Coastguard Worker }
106*cf78ab8cSAndroid Build Coastguard Worker
107*cf78ab8cSAndroid Build Coastguard Worker // Delete temp file.
108*cf78ab8cSAndroid Build Coastguard Worker ASSERT_EQ(std::remove(tempFileName), 0);
109*cf78ab8cSAndroid Build Coastguard Worker }
110*cf78ab8cSAndroid Build Coastguard Worker
111*cf78ab8cSAndroid Build Coastguard Worker } // namespace
112*cf78ab8cSAndroid Build Coastguard Worker } // namespace testing
113*cf78ab8cSAndroid Build Coastguard Worker } // namespace netsim
114