Files
android/libwvdrmengine/cdm/metrics/test/event_metric_unittest.cpp
John "Juce" Bruce bfd299a4be Add missing override keywords
(This is a merge of http://go/wvgerrit/139629.)

This patch fixes several places where the override keyword was missing.
These were found when future patches that enable stricter checking of
the override keyword were enabled. There are two basic categories of
missing override:

* Destructors found to be overriding a virtual destructor without using
  the override keyword.
* Test methods overriding methods on test-only or mock objects.

Some of these were previously marked as virtual, following our pre-C++11
style guidelines, but this is not necessary now that we have override.

Bug: 207684988
Test: x86-64 build
Change-Id: I09aa499bd3ea80d925e2fc422290d61eb005a769
2021-12-01 11:55:32 -08:00

195 lines
7.1 KiB
C++

// Copyright 2017 Google LLC. All Rights Reserved. This file and proprietary
// source code may only be used and distributed under the Widevine License
// Agreement.
//
// Unit tests for EventMetric
#include "event_metric.h"
#include <gtest/gtest.h>
#include "string_conversions.h"
#include "wv_cdm_types.h"
namespace wvcdm {
namespace metrics {
using drm_metrics::TestMetrics;
class EventMetricTest : public ::testing::Test {
public:
void SetUp() override {}
protected:
};
TEST_F(EventMetricTest, NoFieldsEmpty) {
wvcdm::metrics::EventMetric<> metric;
TestMetrics metric_proto;
metric.ToProto(metric_proto.mutable_test_distributions());
ASSERT_EQ(0, metric_proto.test_distributions().size());
}
TEST_F(EventMetricTest, NoFieldsSuccess) {
wvcdm::metrics::EventMetric<> metric;
metric.Record(10LL);
metric.Record(10LL);
TestMetrics metric_proto;
metric.ToProto(metric_proto.mutable_test_distributions());
std::string serialized_metrics;
ASSERT_TRUE(metric_proto.SerializeToString(&serialized_metrics));
ASSERT_EQ(1, metric_proto.test_distributions().size());
EXPECT_EQ(2u, metric_proto.test_distributions(0).operation_count());
EXPECT_FALSE(metric_proto.test_distributions(0).has_attributes())
<< std::string("Unexpected attributes value. Serialized metrics: ")
<< wvcdm::b2a_hex(serialized_metrics);
}
TEST_F(EventMetricTest, OneFieldSuccess) {
EventMetric<drm_metrics::Attributes::kErrorCodeFieldNumber, int> metric;
metric.Record(10LL, 7);
metric.Record(11LL, 13);
metric.Record(12LL, 13);
TestMetrics metric_proto;
metric.ToProto(metric_proto.mutable_test_distributions());
ASSERT_EQ(2, metric_proto.test_distributions().size());
EXPECT_EQ(1u, metric_proto.test_distributions(0).operation_count());
EXPECT_EQ(10LL, metric_proto.test_distributions(0).mean());
EXPECT_EQ(2u, metric_proto.test_distributions(1).operation_count());
EXPECT_NEAR(11.5, metric_proto.test_distributions(1).mean(), 1.0);
EXPECT_NEAR(0.5, metric_proto.test_distributions(1).variance(), 0.5);
EXPECT_EQ(11, metric_proto.test_distributions(1).min());
EXPECT_EQ(12, metric_proto.test_distributions(1).max());
}
TEST_F(EventMetricTest, TwoFieldsSuccess) {
EventMetric<drm_metrics::Attributes::kErrorCodeFieldNumber, int,
drm_metrics::Attributes::kLengthFieldNumber, Pow2Bucket>
metric;
metric.Record(1, 7, Pow2Bucket(23));
metric.Record(2, 7, Pow2Bucket(33));
metric.Record(3, 11, Pow2Bucket(23));
metric.Record(4, 11, Pow2Bucket(33));
metric.Record(5, 7, Pow2Bucket(23));
TestMetrics metric_proto;
metric.ToProto(metric_proto.mutable_test_distributions());
ASSERT_EQ(4, metric_proto.test_distributions().size());
// error 7, bucket 16
EXPECT_EQ(2u, metric_proto.test_distributions(0).operation_count());
EXPECT_EQ(3LL, metric_proto.test_distributions(0).mean());
EXPECT_NEAR(3.5, metric_proto.test_distributions(0).variance(), 0.5);
EXPECT_EQ(1, metric_proto.test_distributions(0).min());
EXPECT_EQ(5, metric_proto.test_distributions(0).max());
EXPECT_EQ(7, metric_proto.test_distributions(0).attributes().error_code());
EXPECT_EQ(16U, metric_proto.test_distributions(0).attributes().length());
// error 7, bucket 32
EXPECT_EQ(1u, metric_proto.test_distributions(1).operation_count());
EXPECT_EQ(2, metric_proto.test_distributions(1).mean());
EXPECT_EQ(7, metric_proto.test_distributions(1).attributes().error_code());
EXPECT_EQ(32U, metric_proto.test_distributions(1).attributes().length());
// error 11, bucket 16
EXPECT_EQ(1u, metric_proto.test_distributions(2).operation_count());
EXPECT_EQ(3, metric_proto.test_distributions(2).mean());
EXPECT_EQ(11, metric_proto.test_distributions(2).attributes().error_code());
EXPECT_EQ(16U, metric_proto.test_distributions(2).attributes().length());
// error 11, bucket 32
EXPECT_EQ(1u, metric_proto.test_distributions(3).operation_count());
EXPECT_EQ(4, metric_proto.test_distributions(3).mean());
EXPECT_EQ(11, metric_proto.test_distributions(3).attributes().error_code());
EXPECT_EQ(32U, metric_proto.test_distributions(3).attributes().length());
}
TEST_F(EventMetricTest, ThreeFieldsSuccess) {
EventMetric<drm_metrics::Attributes::kErrorCodeFieldNumber, int,
drm_metrics::Attributes::kLengthFieldNumber, Pow2Bucket,
drm_metrics::Attributes::kErrorCodeBoolFieldNumber, bool>
metric;
metric.Record(10LL, 7, Pow2Bucket(13), false);
metric.Record(11LL, 8, Pow2Bucket(17), true);
TestMetrics metric_proto;
metric.ToProto(metric_proto.mutable_test_distributions());
ASSERT_EQ(2, metric_proto.test_distributions().size());
EXPECT_EQ(1u, metric_proto.test_distributions(0).operation_count());
EXPECT_EQ(10LL, metric_proto.test_distributions(0).mean());
EXPECT_FALSE(metric_proto.test_distributions(0).has_variance());
EXPECT_EQ(7, metric_proto.test_distributions(0).attributes().error_code());
EXPECT_EQ(8u, metric_proto.test_distributions(0).attributes().length());
EXPECT_FALSE(
metric_proto.test_distributions(0).attributes().error_code_bool());
EXPECT_EQ(1u, metric_proto.test_distributions(1).operation_count());
EXPECT_EQ(11LL, metric_proto.test_distributions(1).mean());
EXPECT_FALSE(metric_proto.test_distributions(1).has_variance());
EXPECT_EQ(8, metric_proto.test_distributions(1).attributes().error_code());
EXPECT_EQ(16u, metric_proto.test_distributions(1).attributes().length());
EXPECT_TRUE(
metric_proto.test_distributions(1).attributes().error_code_bool());
}
TEST_F(EventMetricTest, FourFieldsSuccess) {
EventMetric<drm_metrics::Attributes::kErrorCodeFieldNumber, int,
drm_metrics::Attributes::kLengthFieldNumber, Pow2Bucket,
drm_metrics::Attributes::kErrorCodeBoolFieldNumber, bool,
drm_metrics::Attributes::kCdmSecurityLevelFieldNumber,
CdmSecurityLevel>
metric;
metric.Record(10LL, 7, Pow2Bucket(13), true, kSecurityLevelL3);
TestMetrics metric_proto;
metric.ToProto(metric_proto.mutable_test_distributions());
ASSERT_EQ(1, metric_proto.test_distributions().size());
EXPECT_EQ(1u, metric_proto.test_distributions(0).operation_count());
EXPECT_EQ(10LL, metric_proto.test_distributions(0).mean());
EXPECT_FALSE(metric_proto.test_distributions(0).has_variance());
EXPECT_EQ(7, metric_proto.test_distributions(0).attributes().error_code());
EXPECT_EQ(8u, metric_proto.test_distributions(0).attributes().length());
EXPECT_TRUE(
metric_proto.test_distributions(0).attributes().error_code_bool());
EXPECT_EQ(
3u, metric_proto.test_distributions(0).attributes().cdm_security_level());
}
TEST_F(EventMetricTest, Pow2BucketTest) {
std::stringstream value;
value << Pow2Bucket(1);
EXPECT_EQ("1", value.str());
value.str("");
value << Pow2Bucket(0);
EXPECT_EQ("0", value.str());
value.str("");
value << Pow2Bucket(2);
EXPECT_EQ("2", value.str());
value.str("");
value << Pow2Bucket(0xFFFFFFFFu);
EXPECT_EQ("2147483648", value.str());
value.str("");
value << Pow2Bucket(0x80000000u);
EXPECT_EQ("2147483648", value.str());
value.str("");
value << Pow2Bucket(0x7FFFFFFF);
EXPECT_EQ("1073741824", value.str());
}
} // namespace metrics
} // namespace wvcdm