123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // Copyright 2022 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "base/metrics/ranges_manager.h"
- #include <vector>
- #include "testing/gmock/include/gmock/gmock.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace base {
- using testing::UnorderedElementsAre;
- TEST(RangesManagerTest, RegisterBucketRanges) {
- RangesManager ranges_manager;
- // Create some BucketRanges. We call |ResetChecksum| to calculate and set
- // their checksums. Checksums are used to validate integrity (and test for
- // non-equivalence) and should be computed after a BucketRanges is fully
- // initialized. Note that BucketRanges are initialized with 0 for all ranges,
- // i.e., all buckets will be [0, 0).
- BucketRanges* ranges1 = new BucketRanges(3);
- ranges1->ResetChecksum();
- BucketRanges* ranges2 = new BucketRanges(4);
- ranges2->ResetChecksum();
- // Register new ranges.
- EXPECT_EQ(ranges1, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges1));
- EXPECT_EQ(ranges2, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges2));
- EXPECT_THAT(ranges_manager.GetBucketRanges(),
- UnorderedElementsAre(ranges1, ranges2));
- // Register |ranges1| again. The registered BucketRanges set should not change
- // as |ranges1| is already registered.
- EXPECT_EQ(ranges1, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges1));
- EXPECT_THAT(ranges_manager.GetBucketRanges(),
- UnorderedElementsAre(ranges1, ranges2));
- // Make sure |ranges1| still exists, and is the same as what we expect (all
- // ranges are 0).
- ASSERT_EQ(3u, ranges1->size());
- EXPECT_EQ(0, ranges1->range(0));
- EXPECT_EQ(0, ranges1->range(1));
- EXPECT_EQ(0, ranges1->range(2));
- // Register a new |ranges3| that is equivalent to |ranges1| (same ranges). We
- // expect that |ranges3| is deleted (verified by LeakSanitizer bots) and that
- // |ranges1| is returned by |RegisterOrDeleteDuplicateRanges|.
- BucketRanges* ranges3 = new BucketRanges(3);
- ranges3->ResetChecksum();
- EXPECT_EQ(ranges1, ranges_manager.RegisterOrDeleteDuplicateRanges(ranges3));
- EXPECT_THAT(ranges_manager.GetBucketRanges(),
- UnorderedElementsAre(ranges1, ranges2));
- }
- TEST(RangesManagerTest, ReleaseBucketRangesOnDestroy) {
- std::unique_ptr<RangesManager> ranges_manager =
- std::make_unique<RangesManager>();
- // Create a BucketRanges. We call |ResetChecksum| to calculate and set its
- // checksum. Checksums are used to validate integrity (and test for
- // non-equivalence) and should be computed after a BucketRanges is fully
- // initialized. Note that BucketRanges are initialized with 0 for all ranges,
- // i.e., all buckets will be [0, 0).
- BucketRanges* ranges = new BucketRanges(1);
- ranges->ResetChecksum();
- // Register new range.
- EXPECT_EQ(ranges, ranges_manager->RegisterOrDeleteDuplicateRanges(ranges));
- EXPECT_THAT(ranges_manager->GetBucketRanges(), UnorderedElementsAre(ranges));
- // Explicitly destroy |ranges_manager|.
- ranges_manager.reset();
- // LeakSanitizer (lsan) bots will verify that |ranges| will be properly
- // released after destroying |ranges_manager|.
- }
- } // namespace base
|