xref: /aosp_15_r20/system/nfc/tests/utils/config_test.cc (revision 7eba2f3b06c51ae21384f6a4f14577b668a869b3)
1 /*
2  * Copyright 2017 The Android Open Source Project
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 #include <config.h>
17 #include <gtest/gtest.h>
18 
19 #include <filesystem>
20 
21 namespace {
22 const std::filesystem::path kConfigFile =
23     std::filesystem::temp_directory_path() / "test_config.conf";
24 const char* SIMPLE_CONFIG_FILE = kConfigFile.c_str();
25 const char SIMPLE_CONFIG[] =
26     "# Simple config file test\n\
27 STRING_VALUE=\"Hello World!\"\n\
28 #COMMENTED_OUT_VALUE=1\n\
29 NUM_VALUE=42\n\
30 BYTES_VALUE={0A:0b:0C:fF:00}\n";
31 
32 const char INVALID_CONFIG1[] =
33     "# This is an invalid config\n\
34 # Config values must contain an = sign\n\
35 TEST:1";
36 
37 const char INVALID_CONFIG2[] =
38     "# This is an invalid config\n\
39 # Byte arrays must contain at least one value\n\
40 TEST={}";
41 
42 const char INVALID_CONFIG3[] =
43     "# This is an invalid config\n\
44 # String values cannot be empty\n\
45 TEST=\"\"";
46 
47 const char INVALID_CONFIG4[] =
48     "# This is an invalid config\n\
49 # Multiple config entries with the same key\n\
50 TEST=1\n\
51 TEST=2";
52 
53 const char INVALID_CONFIG5[] =
54     "# This is an invalid config\n\
55 # Byte value width incorrect\n\
56 BYTES_VALUE={0A:0b:0C:1:00}\n";
57 }  // namespace
58 
59 class ConfigTestFromFile : public ::testing::Test {
60  protected:
SetUp()61   void SetUp() override {
62     FILE* fp = fopen(SIMPLE_CONFIG_FILE, "wt");
63     fwrite(SIMPLE_CONFIG, 1, sizeof(SIMPLE_CONFIG), fp);
64     fclose(fp);
65   }
TearDown()66   void TearDown() override { std::filesystem::remove(kConfigFile); }
67 };
68 
TEST(ConfigTestFromString,test_simple_config)69 TEST(ConfigTestFromString, test_simple_config) {
70   ConfigFile config;
71   config.parseFromString(SIMPLE_CONFIG);
72   EXPECT_FALSE(config.hasKey("UNKNOWN_VALUE"));
73   EXPECT_FALSE(config.hasKey("COMMENTED_OUT_VALUE"));
74   EXPECT_TRUE(config.hasKey("NUM_VALUE"));
75   EXPECT_TRUE(config.hasKey("STRING_VALUE"));
76   EXPECT_TRUE(config.hasKey("BYTES_VALUE"));
77 }
78 
TEST(ConfigTestFromString,test_simple_values)79 TEST(ConfigTestFromString, test_simple_values) {
80   ConfigFile config;
81   config.parseFromString(SIMPLE_CONFIG);
82   EXPECT_EQ(config.getUnsigned("NUM_VALUE"), 42u);
83   EXPECT_EQ(config.getString("STRING_VALUE"), "Hello World!");
84   auto bytes = config.getBytes("BYTES_VALUE");
85   EXPECT_EQ(bytes.size(), 5u);
86   EXPECT_EQ(bytes[0], 10);
87   EXPECT_EQ(bytes[1], 11);
88   EXPECT_EQ(bytes[2], 12);
89   EXPECT_EQ(bytes[3], 255);
90   EXPECT_EQ(bytes[4], 0);
91 }
92 
TEST(ConfigTestFromString,test_invalid_configs)93 TEST(ConfigTestFromString, test_invalid_configs) {
94   ConfigFile config1;
95   EXPECT_DEATH(config1.parseFromString(INVALID_CONFIG1), "");
96   ConfigFile config2;
97   EXPECT_DEATH(config2.parseFromString(INVALID_CONFIG2), "");
98   ConfigFile config3;
99   EXPECT_DEATH(config3.parseFromString(INVALID_CONFIG3), "");
100   ConfigFile config4;
101   EXPECT_DEATH(config4.parseFromString(INVALID_CONFIG4), "");
102   ConfigFile config5;
103   EXPECT_DEATH(config5.parseFromString(INVALID_CONFIG5), "");
104 }
105 
TEST(ConfigTestFromString,test_clear)106 TEST(ConfigTestFromString, test_clear) {
107   ConfigFile config;
108   EXPECT_FALSE(config.hasKey("NUM_VALUE"));
109   config.parseFromString(SIMPLE_CONFIG);
110   EXPECT_TRUE(config.hasKey("NUM_VALUE"));
111   EXPECT_EQ(config.getUnsigned("NUM_VALUE"), 42u);
112   config.clear();
113   EXPECT_FALSE(config.hasKey("NUM_VALUE"));
114   EXPECT_DEATH(config.getUnsigned("NUM_VALUE"), "");
115 }
116 
TEST(ConfigTestFromString,test_isEmpty)117 TEST(ConfigTestFromString, test_isEmpty) {
118   ConfigFile config;
119   EXPECT_TRUE(config.isEmpty());
120   config.parseFromString(SIMPLE_CONFIG);
121   EXPECT_FALSE(config.isEmpty());
122   config.clear();
123   EXPECT_TRUE(config.isEmpty());
124 }
125 
TEST_F(ConfigTestFromFile,test_file_based_config)126 TEST_F(ConfigTestFromFile, test_file_based_config) {
127   ConfigFile config;
128   config.parseFromFile(SIMPLE_CONFIG_FILE);
129   EXPECT_FALSE(config.hasKey("UNKNOWN_VALUE"));
130   EXPECT_EQ(config.getUnsigned("NUM_VALUE"), 42u);
131   EXPECT_EQ(config.getString("STRING_VALUE"), "Hello World!");
132   auto bytes = config.getBytes("BYTES_VALUE");
133   EXPECT_EQ(bytes.size(), 5u);
134   EXPECT_EQ(bytes[0], 10);
135   EXPECT_EQ(bytes[1], 11);
136   EXPECT_EQ(bytes[2], 12);
137   EXPECT_EQ(bytes[3], 255);
138   EXPECT_EQ(bytes[4], 0);
139 }
140