in_memory_metadata_change_list_unittest.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // Copyright 2018 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/sync/model/in_memory_metadata_change_list.h"
  5. #include "testing/gmock/include/gmock/gmock.h"
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. namespace syncer {
  8. namespace {
  9. using testing::StrictMock;
  10. MATCHER_P(EqualsProto, expected, "") {
  11. return arg.SerializeAsString() == expected.SerializeAsString();
  12. }
  13. class MockMetadataChangeList : public MetadataChangeList {
  14. public:
  15. MOCK_METHOD(void,
  16. UpdateModelTypeState,
  17. (const sync_pb::ModelTypeState& model_type_state),
  18. (override));
  19. MOCK_METHOD(void, ClearModelTypeState, (), (override));
  20. MOCK_METHOD(void,
  21. UpdateMetadata,
  22. (const std::string& storage_key,
  23. const sync_pb::EntityMetadata& metadata),
  24. (override));
  25. MOCK_METHOD(void,
  26. ClearMetadata,
  27. (const std::string& storage_key),
  28. (override));
  29. };
  30. TEST(InMemoryMetadataChangeListTest, ShouldTransferNothingIfEmptyChangeList) {
  31. StrictMock<MockMetadataChangeList> mock_change_list;
  32. InMemoryMetadataChangeList cl;
  33. // StrictMock verifies no calls are issued.
  34. cl.TransferChangesTo(&mock_change_list);
  35. }
  36. TEST(InMemoryMetadataChangeListTest, ShouldTransferUpdateModelTypeState) {
  37. StrictMock<MockMetadataChangeList> mock_change_list;
  38. InMemoryMetadataChangeList cl;
  39. sync_pb::ModelTypeState state;
  40. state.set_encryption_key_name("ekn");
  41. cl.UpdateModelTypeState(state);
  42. EXPECT_CALL(mock_change_list, UpdateModelTypeState(EqualsProto(state)));
  43. cl.TransferChangesTo(&mock_change_list);
  44. }
  45. TEST(InMemoryMetadataChangeListTest, ShouldTransferClearModelTypeState) {
  46. StrictMock<MockMetadataChangeList> mock_change_list;
  47. InMemoryMetadataChangeList cl;
  48. cl.ClearModelTypeState();
  49. EXPECT_CALL(mock_change_list, ClearModelTypeState());
  50. cl.TransferChangesTo(&mock_change_list);
  51. }
  52. TEST(InMemoryMetadataChangeListTest, ShouldTransferUpdateMetadata) {
  53. StrictMock<MockMetadataChangeList> mock_change_list;
  54. InMemoryMetadataChangeList cl;
  55. sync_pb::EntityMetadata metadata;
  56. metadata.set_client_tag_hash("some_hash");
  57. cl.UpdateMetadata("client_tag", metadata);
  58. EXPECT_CALL(mock_change_list,
  59. UpdateMetadata("client_tag", EqualsProto(metadata)));
  60. cl.TransferChangesTo(&mock_change_list);
  61. }
  62. TEST(InMemoryMetadataChangeListTest, ShouldTransferClearMetadata) {
  63. StrictMock<MockMetadataChangeList> mock_change_list;
  64. InMemoryMetadataChangeList cl;
  65. cl.ClearMetadata("client_tag");
  66. EXPECT_CALL(mock_change_list, ClearMetadata("client_tag"));
  67. cl.TransferChangesTo(&mock_change_list);
  68. }
  69. TEST(InMemoryMetadataChangeListTest, ShouldTransferMultipleChanges) {
  70. StrictMock<MockMetadataChangeList> mock_change_list;
  71. InMemoryMetadataChangeList cl;
  72. sync_pb::ModelTypeState state;
  73. state.set_encryption_key_name("ekn");
  74. cl.UpdateModelTypeState(state);
  75. sync_pb::EntityMetadata metadata;
  76. metadata.set_client_tag_hash("some_hash");
  77. cl.UpdateMetadata("client_tag", metadata);
  78. EXPECT_CALL(mock_change_list, UpdateModelTypeState(EqualsProto(state)));
  79. EXPECT_CALL(mock_change_list,
  80. UpdateMetadata("client_tag", EqualsProto(metadata)));
  81. cl.TransferChangesTo(&mock_change_list);
  82. }
  83. TEST(InMemoryMetadataChangeListTest, ShouldTransferClearDespitePriorUpdates) {
  84. StrictMock<MockMetadataChangeList> mock_change_list;
  85. InMemoryMetadataChangeList cl;
  86. // Updates that should be ignored due to the later clears.
  87. {
  88. sync_pb::ModelTypeState state;
  89. state.set_encryption_key_name("ekn");
  90. cl.UpdateModelTypeState(state);
  91. sync_pb::EntityMetadata metadata;
  92. metadata.set_client_tag_hash("some_hash");
  93. cl.UpdateMetadata("client_tag", metadata);
  94. }
  95. cl.ClearModelTypeState();
  96. cl.ClearMetadata("client_tag");
  97. EXPECT_CALL(mock_change_list, ClearModelTypeState());
  98. EXPECT_CALL(mock_change_list, ClearMetadata("client_tag"));
  99. cl.TransferChangesTo(&mock_change_list);
  100. }
  101. } // namespace
  102. } // namespace syncer