blob: b84bd0d6ad47c2eaa3d71ec04d14630c5bdcfbe3 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/first_party_sets/sets_mutation.h"
#include <optional>
#include "net/base/schemeful_site.h"
#include "net/first_party_sets/first_party_set_entry.h"
#include "testing/gmock/include/gmock/gmock-matchers.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
using ::testing::Pair;
using ::testing::UnorderedElementsAre;
namespace net {
TEST(SetsMutationTest, Valid) {
const SchemefulSite primary1(GURL("https://primary1.test"));
const SchemefulSite primary1_cctld(GURL("https://primary1.cctld"));
const SchemefulSite associated1(GURL("https://associated1.test"));
const SchemefulSite associated1_cctld(GURL("https://associated1.ccltd"));
const SchemefulSite primary2(GURL("https://primary2.test"));
const SchemefulSite associated2(GURL("https://associated2.test"));
const SchemefulSite associated2_cctld(GURL("https://associated2.ccltd"));
std::ignore = SetsMutation(
/*replacement_sets=*/
{
{
{primary1, FirstPartySetEntry(primary1, SiteType::kPrimary)},
{associated1,
FirstPartySetEntry(primary1, SiteType::kAssociated)},
{primary1_cctld,
FirstPartySetEntry(primary1, SiteType::kPrimary)},
{associated1_cctld,
FirstPartySetEntry(primary1, SiteType::kAssociated)},
},
{
{primary2, FirstPartySetEntry(primary2, SiteType::kPrimary)},
{associated2,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
{associated2_cctld,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
},
},
/*addition_sets=*/{}, /*aliases=*/
{
{primary1_cctld, primary1},
{associated1_cctld, associated1},
{associated2_cctld, associated2},
});
std::ignore = SetsMutation(
/*replacement_sets=*/{},
/*addition_sets=*/
{
{
{primary1, FirstPartySetEntry(primary1, SiteType::kPrimary)},
{associated1,
FirstPartySetEntry(primary1, SiteType::kAssociated)},
{primary1_cctld,
FirstPartySetEntry(primary1, SiteType::kPrimary)},
{associated1_cctld,
FirstPartySetEntry(primary1, SiteType::kAssociated)},
},
{
{primary2, FirstPartySetEntry(primary2, SiteType::kPrimary)},
{associated2,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
{associated2_cctld,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
},
},
/*aliases=*/
{
{primary1_cctld, primary1},
{associated1_cctld, associated1},
{associated2_cctld, associated2},
});
std::ignore = SetsMutation(
/*replacement_sets=*/
{
{
{primary1, FirstPartySetEntry(primary1, SiteType::kPrimary)},
{associated1,
FirstPartySetEntry(primary1, SiteType::kAssociated)},
{primary1_cctld,
FirstPartySetEntry(primary1, SiteType::kPrimary)},
{associated1_cctld,
FirstPartySetEntry(primary1, SiteType::kAssociated)},
},
},
/*addition_sets=*/
{
{
{primary2, FirstPartySetEntry(primary2, SiteType::kPrimary)},
{associated2,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
{associated2_cctld,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
},
},
/*aliases=*/
{
{primary1_cctld, primary1},
{associated1_cctld, associated1},
{associated2_cctld, associated2},
});
}
#if defined(GTEST_HAS_DEATH_TEST)
TEST(SetsMutationTest, Nondisjoint_death) {
const SchemefulSite primary1(GURL("https://primary1.test"));
const SchemefulSite associated1(GURL("https://associated1.test"));
const SchemefulSite primary2(GURL("https://primary2.test"));
const SchemefulSite associated2(GURL("https://associated2.test"));
EXPECT_DEATH(
{
SetsMutation(
/*replacement_sets=*/
{
{
{primary1,
FirstPartySetEntry(primary1, SiteType::kPrimary)},
{associated1,
FirstPartySetEntry(primary1, SiteType::kAssociated)},
},
{
{primary2,
FirstPartySetEntry(primary2, SiteType::kPrimary)},
{associated1,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
{associated2,
FirstPartySetEntry(primary2, SiteType::kAssociated)},
},
},
/*addition_sets=*/{}, /*aliases=*/{});
},
"");
}
#endif // defined(GTEST_HAS_DEATH_TEST)
} // namespace net