batch_entity_metadata_task_unittest.cc 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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/optimization_guide/core/batch_entity_metadata_task.h"
  5. #include "base/test/task_environment.h"
  6. #include "base/threading/thread_task_runner_handle.h"
  7. #include "components/optimization_guide/core/entity_metadata_provider.h"
  8. #include "testing/gtest/include/gtest/gtest.h"
  9. namespace optimization_guide {
  10. namespace {
  11. class TestEntityMetadataProvider : public EntityMetadataProvider {
  12. public:
  13. explicit TestEntityMetadataProvider(
  14. scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner)
  15. : main_thread_task_runner_(main_thread_task_runner) {}
  16. ~TestEntityMetadataProvider() override = default;
  17. // EntityMetadataProvider:
  18. void GetMetadataForEntityId(
  19. const std::string& entity_id,
  20. EntityMetadataRetrievedCallback callback) override {
  21. main_thread_task_runner_->PostTask(
  22. FROM_HERE,
  23. base::BindOnce(
  24. [](const std::string& entity_id,
  25. EntityMetadataRetrievedCallback callback) {
  26. EntityMetadata metadata;
  27. metadata.human_readable_name = entity_id;
  28. std::move(callback).Run(entity_id == "nometadata"
  29. ? absl::nullopt
  30. : absl::make_optional(metadata));
  31. },
  32. entity_id, std::move(callback)));
  33. }
  34. private:
  35. scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
  36. };
  37. class BatchEntityMetadataTaskTest : public testing::Test {
  38. public:
  39. void SetUp() override {
  40. entity_metadata_provider_ = std::make_unique<TestEntityMetadataProvider>(
  41. task_environment_.GetMainThreadTaskRunner());
  42. }
  43. void TearDown() override { entity_metadata_provider_.reset(); }
  44. base::flat_map<std::string, EntityMetadata> ExecuteBatchEntityMetadataTask(
  45. const std::vector<std::string>& entity_ids) {
  46. auto task = std::make_unique<BatchEntityMetadataTask>(
  47. entity_metadata_provider_.get(), entity_ids);
  48. base::flat_map<std::string, EntityMetadata> entity_metadata_map;
  49. std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
  50. task->Execute(base::BindOnce(
  51. [](base::RunLoop* run_loop,
  52. base::flat_map<std::string, EntityMetadata>* out_entity_metadata_map,
  53. const base::flat_map<std::string, EntityMetadata>&
  54. entity_metadata_map) {
  55. *out_entity_metadata_map = entity_metadata_map;
  56. run_loop->Quit();
  57. },
  58. run_loop.get(), &entity_metadata_map));
  59. run_loop->Run();
  60. return entity_metadata_map;
  61. }
  62. private:
  63. base::test::TaskEnvironment task_environment_;
  64. std::unique_ptr<TestEntityMetadataProvider> entity_metadata_provider_;
  65. };
  66. TEST_F(BatchEntityMetadataTaskTest, Execute) {
  67. base::flat_map<std::string, EntityMetadata> entity_metadata_map =
  68. ExecuteBatchEntityMetadataTask({
  69. "nometadata",
  70. "someentity",
  71. });
  72. EXPECT_EQ(entity_metadata_map.size(), 1u);
  73. auto it = entity_metadata_map.find("someentity");
  74. ASSERT_NE(it, entity_metadata_map.end());
  75. EXPECT_EQ(it->second.human_readable_name, "someentity");
  76. }
  77. } // namespace
  78. } // namespace optimization_guide