url_request_rewrite_rules_manager_unittest.cc 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // Copyright 2019 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/url_rewrite/browser/url_request_rewrite_rules_manager.h"
  5. #include "testing/gmock/include/gmock/gmock.h"
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. namespace url_rewrite {
  8. namespace {
  9. using ::testing::ContainerEq;
  10. using ::testing::IsNull;
  11. using ::testing::SizeIs;
  12. TEST(UrlRequestRewriteRulesManagerTest, OnRulesUpdatedSucceeds) {
  13. url_rewrite::UrlRequestRewriteRulesManager url_request_rewrite_rules_manager;
  14. ASSERT_THAT(url_request_rewrite_rules_manager.GetCachedRules(), IsNull());
  15. auto add_headers = mojom::UrlRequestRewriteAddHeaders::New();
  16. auto header = mojom::UrlHeader::New("Test", "Value");
  17. add_headers->headers.push_back(std::move(header));
  18. auto rule = mojom::UrlRequestRule::New();
  19. rule->hosts_filter.emplace(std::vector<std::string>{"foo.bar"});
  20. rule->schemes_filter.emplace(std::vector<std::string>{"https"});
  21. rule->actions.push_back(
  22. mojom::UrlRequestAction::NewAddHeaders(std::move(add_headers)));
  23. auto rules = mojom::UrlRequestRewriteRules::New();
  24. rules->rules.push_back(std::move(rule));
  25. ASSERT_TRUE(
  26. url_request_rewrite_rules_manager.OnRulesUpdated(std::move(rules)));
  27. // Verify the rules got updated.
  28. mojom::UrlRequestRewriteRules* cached_rules =
  29. url_request_rewrite_rules_manager.GetCachedRules()->data.get();
  30. ASSERT_THAT(cached_rules->rules, SizeIs(1));
  31. ASSERT_TRUE(cached_rules->rules[0]->hosts_filter);
  32. ASSERT_THAT(cached_rules->rules[0]->hosts_filter.value(),
  33. ContainerEq(std::vector<std::string>{"foo.bar"}));
  34. ASSERT_TRUE(cached_rules->rules[0]->schemes_filter);
  35. ASSERT_THAT(cached_rules->rules[0]->schemes_filter.value(),
  36. ContainerEq(std::vector<std::string>{"https"}));
  37. ASSERT_THAT(cached_rules->rules[0]->actions, SizeIs(1));
  38. ASSERT_TRUE(cached_rules->rules[0]->actions[0]->is_add_headers());
  39. const std::vector<url_rewrite::mojom::UrlHeaderPtr>& headers =
  40. cached_rules->rules[0]->actions[0]->get_add_headers()->headers;
  41. ASSERT_THAT(headers, SizeIs(1));
  42. ASSERT_EQ(headers[0]->name, "Test");
  43. ASSERT_EQ(headers[0]->value, "Value");
  44. }
  45. TEST(UrlRequestRewriteRulesManagerTest, OnRulesUpdatedFailsWithInvalidRules) {
  46. url_rewrite::UrlRequestRewriteRulesManager url_request_rewrite_rules_manager;
  47. ASSERT_THAT(url_request_rewrite_rules_manager.GetCachedRules(), IsNull());
  48. auto remove_header =
  49. mojom::UrlRequestRewriteRemoveHeader::New("Query", "TestHeader");
  50. auto rule = mojom::UrlRequestRule::New();
  51. rule->actions.push_back(
  52. mojom::UrlRequestAction::NewRemoveHeader(std::move(remove_header)));
  53. auto rules = mojom::UrlRequestRewriteRules::New();
  54. rules->rules.push_back(std::move(rule));
  55. ASSERT_TRUE(
  56. url_request_rewrite_rules_manager.OnRulesUpdated(std::move(rules)));
  57. // Verify the rule got updated.
  58. mojom::UrlRequestRewriteRules* cached_rules =
  59. url_request_rewrite_rules_manager.GetCachedRules()->data.get();
  60. ASSERT_THAT(cached_rules->rules, SizeIs(1));
  61. ASSERT_FALSE(cached_rules->rules[0]->hosts_filter);
  62. ASSERT_FALSE(cached_rules->rules[0]->schemes_filter);
  63. ASSERT_THAT(cached_rules->rules[0]->actions, SizeIs(1));
  64. ASSERT_TRUE(cached_rules->rules[0]->actions[0]->is_remove_header());
  65. EXPECT_EQ(
  66. cached_rules->rules[0]->actions[0]->get_remove_header()->header_name,
  67. "TestHeader");
  68. ASSERT_TRUE(
  69. cached_rules->rules[0]->actions[0]->get_remove_header()->query_pattern);
  70. EXPECT_EQ(
  71. *cached_rules->rules[0]->actions[0]->get_remove_header()->query_pattern,
  72. "Query");
  73. // Verify the rules are not reset if validation fails.
  74. rules = mojom::UrlRequestRewriteRules::New();
  75. rules->rules.push_back(mojom::UrlRequestRule::New());
  76. ASSERT_FALSE(
  77. url_request_rewrite_rules_manager.OnRulesUpdated(std::move(rules)));
  78. mojom::UrlRequestRewriteRules* updated_rules =
  79. url_request_rewrite_rules_manager.GetCachedRules()->data.get();
  80. EXPECT_EQ(updated_rules, cached_rules);
  81. }
  82. TEST(UrlRequestRewriteRulesManagerTest, OnRulesRenewal) {
  83. url_rewrite::UrlRequestRewriteRulesManager url_request_rewrite_rules_manager;
  84. ASSERT_THAT(url_request_rewrite_rules_manager.GetCachedRules(), IsNull());
  85. auto append_to_query =
  86. mojom::UrlRequestRewriteAppendToQuery::New("TestQuery");
  87. auto rule = mojom::UrlRequestRule::New();
  88. rule->actions.push_back(
  89. mojom::UrlRequestAction::NewAppendToQuery(std::move(append_to_query)));
  90. auto rules = mojom::UrlRequestRewriteRules::New();
  91. rules->rules.push_back(std::move(rule));
  92. ASSERT_TRUE(
  93. url_request_rewrite_rules_manager.OnRulesUpdated(std::move(rules)));
  94. // Verify the rule got updated.
  95. mojom::UrlRequestRewriteRules* cached_rules =
  96. url_request_rewrite_rules_manager.GetCachedRules()->data.get();
  97. ASSERT_THAT(cached_rules->rules, SizeIs(1));
  98. ASSERT_FALSE(cached_rules->rules[0]->hosts_filter);
  99. ASSERT_FALSE(cached_rules->rules[0]->schemes_filter);
  100. ASSERT_THAT(cached_rules->rules[0]->actions, SizeIs(1));
  101. ASSERT_TRUE(cached_rules->rules[0]->actions[0]->is_append_to_query());
  102. EXPECT_EQ(cached_rules->rules[0]->actions[0]->get_append_to_query()->query,
  103. "TestQuery");
  104. // Verify the rules gets updated.
  105. auto substitute =
  106. mojom::UrlRequestRewriteSubstituteQueryPattern::New("Pattern", "Sub");
  107. rule = mojom::UrlRequestRule::New();
  108. rule->actions.push_back(mojom::UrlRequestAction::NewSubstituteQueryPattern(
  109. std::move(substitute)));
  110. rules = mojom::UrlRequestRewriteRules::New();
  111. rules->rules.push_back(std::move(rule));
  112. ASSERT_TRUE(
  113. url_request_rewrite_rules_manager.OnRulesUpdated(std::move(rules)));
  114. cached_rules = url_request_rewrite_rules_manager.GetCachedRules()->data.get();
  115. ASSERT_THAT(cached_rules->rules, SizeIs(1));
  116. ASSERT_FALSE(cached_rules->rules[0]->hosts_filter);
  117. ASSERT_FALSE(cached_rules->rules[0]->schemes_filter);
  118. ASSERT_THAT(cached_rules->rules[0]->actions, SizeIs(1));
  119. ASSERT_TRUE(
  120. cached_rules->rules[0]->actions[0]->is_substitute_query_pattern());
  121. EXPECT_EQ(cached_rules->rules[0]
  122. ->actions[0]
  123. ->get_substitute_query_pattern()
  124. ->pattern,
  125. "Pattern");
  126. EXPECT_EQ(cached_rules->rules[0]
  127. ->actions[0]
  128. ->get_substitute_query_pattern()
  129. ->substitution,
  130. "Sub");
  131. }
  132. } // namespace
  133. } // namespace url_rewrite