(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
195 lines
7.1 KiB
C++
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
|