1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/fuchsia_component_support/config_reader.h"
9 #include "base/files/file_util.h"
10 #include "base/files/scoped_temp_dir.h"
11 #include "testing/gtest/include/gtest/gtest.h"
13 namespace fuchsia_component_support {
15 TEST(ConfigReaderTest, NoConfigData) {
16 base::ScopedTempDir temp_dir;
17 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
19 auto config = LoadConfigFromDirForTest(temp_dir.GetPath());
20 EXPECT_FALSE(config.has_value());
23 TEST(ConfigReaderTest, SingleConfigJson) {
24 base::ScopedTempDir temp_dir;
25 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
26 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("config.json"),
27 "{ \"name\": \"value\" }"));
29 auto config = LoadConfigFromDirForTest(temp_dir.GetPath());
30 ASSERT_TRUE(config.has_value());
32 EXPECT_EQ(config->size(), 1u);
33 const std::string* value = config->FindString("name");
35 EXPECT_EQ(*value, "value");
38 TEST(ConfigReaderTest, MultipleConfigJson) {
39 base::ScopedTempDir temp_dir;
40 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
41 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("foo.json"),
42 "{ \"name1\": \"value?\" }"));
43 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("bar.json"),
44 "{ \"name2\": \"value!\" }"));
45 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("wibble.json"),
46 "{ \"name3\": \"value...\" }"));
48 auto config = LoadConfigFromDirForTest(temp_dir.GetPath());
49 ASSERT_TRUE(config.has_value());
51 EXPECT_EQ(config->size(), 3u);
53 std::string* value = config->FindString("name1");
55 EXPECT_EQ(*value, "value?");
57 value = config->FindString("name2");
59 EXPECT_EQ(*value, "value!");
61 value = config->FindString("name3");
63 EXPECT_EQ(*value, "value...");
66 TEST(ConfigReaderTest, OneOfTheseConfigsIsNotValidLikeTheOthers) {
67 base::ScopedTempDir temp_dir;
68 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
70 // Provide some valid config JSONs.
71 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("foo.json"),
72 "{ \"name1\": \"value?\" }"));
73 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("wibble.json"),
74 "{ \"name2\": \"value...\" }"));
76 // Provide an invalid one, which should cause a CHECK failure.
77 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("not_valid.json"),
80 EXPECT_DEATH({ LoadConfigFromDirForTest(temp_dir.GetPath()); }, "");
83 TEST(ConfigReaderTest, MultipleClashingConfigJson) {
84 base::ScopedTempDir temp_dir;
85 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
86 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("foo.json"),
87 "{ \"name\": \"value?\" }"));
88 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("bar.json"),
89 "{ \"name\": \"value!\" }"));
90 ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("wibble.json"),
91 "{ \"name\": \"value...\" }"));
93 EXPECT_DEATH({ LoadConfigFromDirForTest(temp_dir.GetPath()); }, "");
96 } // namespace fuchsia_component_support