blob: c0a75aa5111cc5208be0abdaccbf5415e7f7d81a [file]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "missive/client/report_queue.h"
#include <utility>
#include <base/functional/bind.h>
#include <base/strings/strcat.h>
#include <base/test/task_environment.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "missive/analytics/metrics.h"
#include "missive/analytics/metrics_test_util.h"
#include "missive/client/mock_report_queue.h"
#include "missive/util/status.h"
#include "missive/util/status_macros.h"
#include "missive/util/test_support_callbacks.h"
using ::testing::_;
using ::testing::Eq;
using ::testing::Invoke;
using ::testing::Return;
using ::testing::StrEq;
using ::testing::WithArg;
namespace reporting {
namespace {
class ReportQueueTest : public ::testing::Test {
protected:
ReportQueueTest() = default;
base::test::TaskEnvironment task_environment_{
base::test::TaskEnvironment::TimeSource::MOCK_TIME};
analytics::Metrics::TestEnvironment metrics_test_environment_;
};
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(analytics::Metrics::TestEnvironment::GetMockMetricsLibrary(),
SendEnumToUMA(StrEq(ReportQueue::kEnqueueMetricsName),
Eq(error::OK), Eq(error::MAX_VALUE)))
.WillOnce(Return(true));
test::TestEvent<Status> e;
queue.Enqueue("Record", FAST_BATCH, e.cb());
ASSERT_OK(e.result());
task_environment_.RunUntilIdle(); // For asynchronous UMA upload.
}
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(analytics::Metrics::TestEnvironment::GetMockMetricsLibrary(),
SendEnumToUMA(StrEq(ReportQueue::kEnqueueMetricsName),
Eq(error::CANCELLED), Eq(error::MAX_VALUE)))
.WillOnce(Return(true));
test::TestEvent<Status> e;
queue.Enqueue("Record", FAST_BATCH, e.cb());
const auto result = e.result();
ASSERT_FALSE(result.ok());
ASSERT_THAT(result.error_code(), Eq(error::CANCELLED));
task_environment_.RunUntilIdle(); // For asynchronous UMA upload.
}
TEST_F(ReportQueueTest, FlushTest) {
MockReportQueue queue;
EXPECT_CALL(queue, Flush(_, _))
.WillOnce(WithArg<1>(Invoke([](ReportQueue::FlushCallback cb) {
std::move(cb).Run(Status::StatusOK());
})));
test::TestEvent<Status> e;
queue.Flush(MANUAL_BATCH, e.cb());
ASSERT_OK(e.result());
}
} // namespace
} // namespace reporting