1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/reporting/client/report_queue.h"
#include "base/functional/bind.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/strcat.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/task_environment.h"
#include "base/test/test_future.h"
#include "components/reporting/client/mock_report_queue.h"
#include "components/reporting/proto/synced/record.pb.h"
#include "components/reporting/util/status.h"
#include "components/reporting/util/status_macros.h"
#include "components/reporting/util/statusor.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::_;
using ::testing::Eq;
using ::testing::Invoke;
using ::testing::Return;
using ::testing::WithArg;
namespace reporting {
namespace {
class ReportQueueTest : public ::testing::Test {
protected:
ReportQueueTest() = default;
base::test::TaskEnvironment task_environment_;
base::HistogramTester histogram_tester_;
};
TEST_F(ReportQueueTest, EnqueueTest) {
MockReportQueue queue;
EXPECT_CALL(queue, AddRecord(_, _, _))
.WillOnce(WithArg<2>(Invoke([](ReportQueue::EnqueueCallback cb) {
std::move(cb).Run(Status::StatusOK());
})));
EXPECT_CALL(queue, GetDestination)
.WillOnce(Return(Destination::EVENT_METRIC));
base::test::TestFuture<Status> test_future;
queue.Enqueue("Record", FAST_BATCH, test_future.GetCallback());
ASSERT_OK(test_future.Take());
histogram_tester_.ExpectBucketCount(ReportQueue::kEnqueueMetricsName,
error::OK,
/*expected_count=*/1);
histogram_tester_.ExpectTotalCount(ReportQueue::kEnqueueMetricsName,
/*expected_count=*/1);
histogram_tester_.ExpectBucketCount(
ReportQueue::kEnqueueSuccessDestinationMetricsName,
Destination::EVENT_METRIC,
/*expected_count=*/1);
histogram_tester_.ExpectTotalCount(
ReportQueue::kEnqueueSuccessDestinationMetricsName,
/*expected_count=*/1);
histogram_tester_.ExpectTotalCount(
ReportQueue::kEnqueueFailedDestinationMetricsName,
/*expected_count=*/0);
}
TEST_F(ReportQueueTest, EnqueueWithErrorTest) {
MockReportQueue queue;
EXPECT_CALL(queue, AddRecord(_, _, _))
.WillOnce(WithArg<2>(Invoke([](ReportQueue::EnqueueCallback cb) {
std::move(cb).Run(Status(error::CANCELLED, "Cancelled by test"));
})));
EXPECT_CALL(queue, GetDestination)
.WillOnce(Return(Destination::EVENT_METRIC));
base::test::TestFuture<Status> test_future;
queue.Enqueue("Record", FAST_BATCH, test_future.GetCallback());
const auto result = test_future.Take();
ASSERT_FALSE(result.ok());
ASSERT_THAT(result.error_code(), Eq(error::CANCELLED));
histogram_tester_.ExpectBucketCount(ReportQueue::kEnqueueMetricsName,
error::CANCELLED,
/*expected_count=*/1);
histogram_tester_.ExpectTotalCount(ReportQueue::kEnqueueMetricsName,
/*expected_count=*/1);
histogram_tester_.ExpectBucketCount(
ReportQueue::kEnqueueFailedDestinationMetricsName,
Destination::EVENT_METRIC,
/*expected_count=*/1);
histogram_tester_.ExpectTotalCount(
ReportQueue::kEnqueueFailedDestinationMetricsName,
/*expected_count=*/1);
histogram_tester_.ExpectTotalCount(
ReportQueue::kEnqueueSuccessDestinationMetricsName,
/*expected_count=*/0);
}
TEST_F(ReportQueueTest, FlushTest) {
MockReportQueue queue;
EXPECT_CALL(queue, Flush(_, _))
.WillOnce(WithArg<1>(Invoke([](ReportQueue::FlushCallback cb) {
std::move(cb).Run(Status::StatusOK());
})));
base::test::TestFuture<Status> test_future;
queue.Flush(MANUAL_BATCH, test_future.GetCallback());
ASSERT_OK(test_future.Take());
}
} // namespace
} // namespace reporting
|