1 // Copyright 2023 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.
4
5 #include "net/first_party_sets/sets_mutation.h"
6
7 #include <optional>
8
9 #include "net/base/schemeful_site.h"
10 #include "net/first_party_sets/first_party_set_entry.h"
11 #include "testing/gmock/include/gmock/gmock-matchers.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "url/gurl.h"
15
16 using ::testing::Pair;
17 using ::testing::UnorderedElementsAre;
18
19 namespace net {
20
TEST(SetsMutationTest,Valid)21 TEST(SetsMutationTest, Valid) {
22 const SchemefulSite primary1(GURL("https://primary1.test"));
23 const SchemefulSite associated1(GURL("https://associated1.test"));
24 const SchemefulSite primary2(GURL("https://primary2.test"));
25 const SchemefulSite associated2(GURL("https://associated2.test"));
26
27 std::ignore = SetsMutation(
28 /*replacement_sets=*/
29 {
30 {
31 {primary1,
32 FirstPartySetEntry(primary1, SiteType::kPrimary, std::nullopt)},
33 {associated1,
34 FirstPartySetEntry(primary1, SiteType::kAssociated, 0)},
35 },
36 {
37 {primary2,
38 FirstPartySetEntry(primary2, SiteType::kPrimary, std::nullopt)},
39 {associated2,
40 FirstPartySetEntry(primary2, SiteType::kAssociated, 0)},
41 },
42 },
43 /*addition_sets=*/{});
44
45 std::ignore = SetsMutation(
46 /*replacement_sets=*/{},
47 /*addition_sets=*/{
48 {
49 {primary1,
50 FirstPartySetEntry(primary1, SiteType::kPrimary, std::nullopt)},
51 {associated1,
52 FirstPartySetEntry(primary1, SiteType::kAssociated, 0)},
53 },
54 {
55 {primary2,
56 FirstPartySetEntry(primary2, SiteType::kPrimary, std::nullopt)},
57 {associated2,
58 FirstPartySetEntry(primary2, SiteType::kAssociated, 0)},
59 },
60 });
61
62 std::ignore = SetsMutation(
63 /*replacement_sets=*/
64 {
65 {
66 {primary1,
67 FirstPartySetEntry(primary1, SiteType::kPrimary, std::nullopt)},
68 {associated1,
69 FirstPartySetEntry(primary1, SiteType::kAssociated, 0)},
70 },
71 },
72 /*addition_sets=*/{
73 {
74 {primary2,
75 FirstPartySetEntry(primary2, SiteType::kPrimary, std::nullopt)},
76 {associated2,
77 FirstPartySetEntry(primary2, SiteType::kAssociated, 0)},
78 },
79 });
80 }
81
82 #if defined(GTEST_HAS_DEATH_TEST)
TEST(SetsMutationTest,Nondisjoint_death)83 TEST(SetsMutationTest, Nondisjoint_death) {
84 const SchemefulSite primary1(GURL("https://primary1.test"));
85 const SchemefulSite associated1(GURL("https://associated1.test"));
86 const SchemefulSite primary2(GURL("https://primary2.test"));
87 const SchemefulSite associated2(GURL("https://associated2.test"));
88
89 EXPECT_DEATH(
90 {
91 SetsMutation(
92 /*replacement_sets=*/
93 {
94 {
95 {primary1, FirstPartySetEntry(primary1, SiteType::kPrimary,
96 std::nullopt)},
97 {associated1,
98 FirstPartySetEntry(primary1, SiteType::kAssociated, 0)},
99 },
100 {
101 {primary2, FirstPartySetEntry(primary2, SiteType::kPrimary,
102 std::nullopt)},
103 {associated1,
104 FirstPartySetEntry(primary2, SiteType::kAssociated, 0)},
105 {associated2,
106 FirstPartySetEntry(primary2, SiteType::kAssociated, 0)},
107 },
108 },
109 /*addition_sets=*/{});
110 },
111 "");
112 }
113 #endif // defined(GTEST_HAS_DEATH_TEST)
114
115 } // namespace net
116