config_reader_unittest.cc 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/fuchsia_component_support/config_reader.h"
  5. #include <string>
  6. #include "base/files/file_util.h"
  7. #include "base/files/scoped_temp_dir.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace fuchsia_component_support {
  10. TEST(ConfigReaderTest, NoConfigData) {
  11. base::ScopedTempDir temp_dir;
  12. ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
  13. auto config = LoadConfigFromDirForTest(temp_dir.GetPath());
  14. EXPECT_FALSE(config.has_value());
  15. }
  16. TEST(ConfigReaderTest, SingleConfigJson) {
  17. base::ScopedTempDir temp_dir;
  18. ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
  19. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("config.json"),
  20. "{ \"name\": \"value\" }"));
  21. auto config = LoadConfigFromDirForTest(temp_dir.GetPath());
  22. ASSERT_TRUE(config.has_value());
  23. ASSERT_TRUE(config->is_dict());
  24. EXPECT_EQ(config->DictSize(), 1u);
  25. const std::string* value = config->FindStringKey("name");
  26. ASSERT_TRUE(value);
  27. EXPECT_EQ(*value, "value");
  28. }
  29. TEST(ConfigReaderTest, MultipleConfigJson) {
  30. base::ScopedTempDir temp_dir;
  31. ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
  32. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("foo.json"),
  33. "{ \"name1\": \"value?\" }"));
  34. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("bar.json"),
  35. "{ \"name2\": \"value!\" }"));
  36. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("wibble.json"),
  37. "{ \"name3\": \"value...\" }"));
  38. auto config = LoadConfigFromDirForTest(temp_dir.GetPath());
  39. ASSERT_TRUE(config.has_value());
  40. ASSERT_TRUE(config->is_dict());
  41. EXPECT_EQ(config->DictSize(), 3u);
  42. std::string* value = config->FindStringKey("name1");
  43. ASSERT_TRUE(value);
  44. EXPECT_EQ(*value, "value?");
  45. value = config->FindStringKey("name2");
  46. ASSERT_TRUE(value);
  47. EXPECT_EQ(*value, "value!");
  48. value = config->FindStringKey("name3");
  49. ASSERT_TRUE(value);
  50. EXPECT_EQ(*value, "value...");
  51. }
  52. TEST(ConfigReaderTest, OneOfTheseConfigsIsNotValidLikeTheOthers) {
  53. base::ScopedTempDir temp_dir;
  54. ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
  55. // Provide some valid config JSONs.
  56. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("foo.json"),
  57. "{ \"name1\": \"value?\" }"));
  58. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("wibble.json"),
  59. "{ \"name2\": \"value...\" }"));
  60. // Provide an invalid one, which should cause a CHECK failure.
  61. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("not_valid.json"),
  62. "{ \"name3\"= }"));
  63. EXPECT_DEATH({ LoadConfigFromDirForTest(temp_dir.GetPath()); }, "");
  64. }
  65. TEST(ConfigReaderTest, MultipleClashingConfigJson) {
  66. base::ScopedTempDir temp_dir;
  67. ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
  68. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("foo.json"),
  69. "{ \"name\": \"value?\" }"));
  70. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("bar.json"),
  71. "{ \"name\": \"value!\" }"));
  72. ASSERT_TRUE(base::WriteFile(temp_dir.GetPath().Append("wibble.json"),
  73. "{ \"name\": \"value...\" }"));
  74. EXPECT_DEATH({ LoadConfigFromDirForTest(temp_dir.GetPath()); }, "");
  75. }
  76. } // namespace fuchsia_component_support