blob: 8bac70e0850a8ed9ddcf6c72df4b77cc236dc300 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 "src/logger/internal_metrics.h"
#include <vector>
#include <gtest/gtest.h>
#include "src/logger/fake_logger.h"
namespace cobalt::logger {
constexpr int64_t kNumBytes = 123;
constexpr uint32_t kTestCustomerId = 1;
constexpr uint32_t kTestProjectId = 2;
constexpr uint32_t kMany = 100;
class InternalMetricsImplTest : public ::testing::Test {
public:
static Project GetTestProject() {
Project project;
project.set_customer_id(kTestCustomerId);
project.set_customer_name("test");
project.set_project_id(kTestProjectId);
project.set_project_name("project");
return project;
}
};
TEST_F(InternalMetricsImplTest, LoggerCalled) {
testing::FakeLogger logger;
InternalMetricsImpl metrics(&logger);
metrics.LoggerCalled(PerProjectLoggerCallsMadeMetricDimensionLoggerMethod::LogMemoryUsage,
GetTestProject());
metrics.Flush();
ASSERT_EQ(logger.call_count(), 2);
ASSERT_TRUE(logger.last_event_logged().has_event_count_event());
ASSERT_EQ(logger.last_event_logged().event_count_event().component(), "test/project");
}
TEST_F(InternalMetricsImplTest, LoggerCalledPauseWorks) {
testing::FakeLogger logger;
InternalMetricsImpl inner_metrics(&logger);
InternalMetricsPauseWrapper metrics(&inner_metrics);
metrics.PauseLogging();
for (int i = 0; i < kMany; i++) {
metrics.LoggerCalled(PerProjectLoggerCallsMadeMetricDimensionLoggerMethod::LogMemoryUsage,
GetTestProject());
}
metrics.ResumeLogging();
metrics.Flush();
ASSERT_EQ(logger.call_count(), 0);
}
TEST_F(InternalMetricsImplTest, BytesUploaded) {
testing::FakeLogger logger;
InternalMetricsImpl metrics(&logger);
ASSERT_EQ(logger.call_count(), 0);
metrics.BytesUploaded(PerDeviceBytesUploadedMetricDimensionStatus::Attempted, kNumBytes);
metrics.Flush();
ASSERT_EQ(logger.call_count(), 2);
ASSERT_TRUE(logger.last_event_logged().has_occurrence_event());
ASSERT_EQ(logger.last_event_logged().metric_id(), kBytesUploadedMetricId);
ASSERT_EQ(logger.last_event_logged().occurrence_event().count(), kNumBytes);
}
TEST_F(InternalMetricsImplTest, BytesUploadedPauseWorks) {
testing::FakeLogger logger;
InternalMetricsImpl inner_metrics(&logger);
InternalMetricsPauseWrapper metrics(&inner_metrics);
metrics.PauseLogging();
for (int i = 0; i < kMany; i++) {
metrics.BytesUploaded(PerDeviceBytesUploadedMetricDimensionStatus::Attempted, kNumBytes);
}
metrics.ResumeLogging();
metrics.Flush();
ASSERT_EQ(logger.call_count(), 0);
}
TEST_F(InternalMetricsImplTest, MegaBytesUploaded) {
testing::FakeLogger logger;
InternalMetricsImpl metrics(&logger);
ASSERT_EQ(logger.call_count(), 0);
metrics.BytesUploaded(PerProjectBytesUploadedMetricDimensionStatus::Attempted, kNumBytes,
kTestCustomerId, kTestProjectId);
metrics.Flush();
ASSERT_EQ(logger.call_count(), 1);
ASSERT_TRUE(logger.last_event_logged().has_event_count_event());
ASSERT_EQ(logger.last_event_logged().event_count_event().count(), kNumBytes);
}
TEST_F(InternalMetricsImplTest, MegaBytesUploadedPauseWorks) {
testing::FakeLogger logger;
InternalMetricsImpl inner_metrics(&logger);
InternalMetricsPauseWrapper metrics(&inner_metrics);
metrics.PauseLogging();
for (int i = 0; i < kMany; i++) {
metrics.BytesUploaded(PerProjectBytesUploadedMetricDimensionStatus::Attempted, kNumBytes,
kTestCustomerId, kTestProjectId);
}
metrics.ResumeLogging();
metrics.Flush();
ASSERT_EQ(logger.call_count(), 0);
}
TEST_F(InternalMetricsImplTest, BytesStored) {
testing::FakeLogger logger;
InternalMetricsImpl metrics(&logger);
ASSERT_EQ(logger.call_count(), 0);
metrics.BytesStored(PerProjectBytesStoredMetricDimensionStatus::Attempted, kNumBytes,
kTestCustomerId, kTestProjectId);
metrics.Flush();
ASSERT_EQ(logger.call_count(), 1);
ASSERT_TRUE(logger.last_event_logged().has_memory_usage_event());
ASSERT_EQ(logger.last_event_logged().memory_usage_event().bytes(), kNumBytes);
}
TEST_F(InternalMetricsImplTest, BytesStoredPauseWorks) {
testing::FakeLogger logger;
InternalMetricsImpl inner_metrics(&logger);
InternalMetricsPauseWrapper metrics(&inner_metrics);
metrics.PauseLogging();
for (int i = 0; i < kMany; i++) {
metrics.BytesStored(PerProjectBytesStoredMetricDimensionStatus::Attempted, kNumBytes,
kTestCustomerId, kTestProjectId);
}
metrics.ResumeLogging();
metrics.Flush();
ASSERT_EQ(logger.call_count(), 0);
}
TEST_F(InternalMetricsImplTest, IdleObservationUploadWorks) {
testing::FakeLogger logger;
InternalMetricsImpl metrics(&logger);
ASSERT_EQ(logger.call_count(), 0);
metrics.IdleObservationUpload(IdleObservationUploadMetricDimensionDeviceState_Active);
metrics.Flush();
ASSERT_EQ(logger.call_count(), 1);
ASSERT_TRUE(logger.last_event_logged().has_event_count_event());
ASSERT_EQ(logger.last_event_logged().event_count_event().count(), 1);
}
TEST_F(InternalMetricsImplTest, IdleObservationUploadPauseWorks) {
testing::FakeLogger logger;
InternalMetricsImpl inner_metrics(&logger);
InternalMetricsPauseWrapper metrics(&inner_metrics);
metrics.PauseLogging();
for (int i = 0; i < kMany; i++) {
metrics.IdleObservationUpload(IdleObservationUploadMetricDimensionDeviceState_Active);
}
metrics.ResumeLogging();
metrics.Flush();
ASSERT_EQ(logger.call_count(), 0);
}
TEST_F(InternalMetricsImplTest, SetSoftwareDistributionInfoCalledWorks) {
testing::FakeLogger logger;
InternalMetricsImpl metrics(&logger);
ASSERT_EQ(logger.call_count(), 0);
metrics.SetSoftwareDistributionInfoCalled(
{SetSoftwareDistributionInfoCalledMetricDimensionNewRealm::Valid});
metrics.Flush();
ASSERT_EQ(logger.call_count(), 1);
ASSERT_TRUE(logger.last_event_logged().has_event_count_event());
ASSERT_EQ(logger.last_event_logged().event_count_event().count(), 1);
}
TEST_F(InternalMetricsImplTest, SetSoftwareDistributionInfoCalledPauseWorks) {
testing::FakeLogger logger;
InternalMetricsImpl inner_metrics(&logger);
InternalMetricsPauseWrapper metrics(&inner_metrics);
metrics.PauseLogging();
for (int i = 0; i < kMany; i++) {
metrics.SetSoftwareDistributionInfoCalled(
{SetSoftwareDistributionInfoCalledMetricDimensionNewRealm::Valid});
}
metrics.ResumeLogging();
metrics.Flush();
ASSERT_EQ(logger.call_count(), 0);
}
TEST_F(InternalMetricsImplTest, TrackDiskUsageWorks) {
testing::FakeLogger logger;
InternalMetricsImpl metrics(&logger);
metrics.TrackDiskUsage(InternalMetrics::StorageClass::ObservationStore, 90, 100);
metrics.Flush();
ASSERT_EQ(logger.call_count(), 2);
ASSERT_TRUE(logger.nth_event_logged(0).has_integer_event());
ASSERT_EQ(logger.nth_event_logged(0).integer_event().value(), 90);
ASSERT_TRUE(logger.nth_event_logged(1).has_integer_event());
ASSERT_EQ(logger.nth_event_logged(1).integer_event().value(), 900);
}
} // namespace cobalt::logger