// 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 ValueMetric. #include "value_metric.h" #include #include #include namespace wvcdm { namespace metrics { TEST(ValueMetricTest, StringValue) { ValueMetric metric; metric.Record("foo"); std::unique_ptr metric_proto(metric.ToProto()); ASSERT_EQ("foo", metric_proto->string_value()); ASSERT_FALSE(metric_proto->has_error_code()); } TEST(ValueMetricTest, DoubleValue) { ValueMetric metric; metric.Record(42.0); std::unique_ptr metric_proto(metric.ToProto()); ASSERT_EQ(42.0, metric_proto->double_value()); ASSERT_FALSE(metric_proto->has_error_code()); } TEST(ValueMetricTest, Int32Value) { ValueMetric metric; metric.Record(42); std::unique_ptr metric_proto(metric.ToProto()); ASSERT_EQ(42, metric_proto->int_value()); ASSERT_FALSE(metric_proto->has_error_code()); } TEST(ValueMetricTest, Int64Value) { ValueMetric metric; metric.Record(42); std::unique_ptr metric_proto(metric.ToProto()); ASSERT_EQ(42, metric_proto->int_value()); ASSERT_FALSE(metric_proto->has_error_code()); } TEST(ValueMetricTest, SetError) { ValueMetric metric; metric.Record(42); metric.SetError(7); std::unique_ptr metric_proto(metric.ToProto()); ASSERT_EQ(7, metric_proto->error_code()); ASSERT_FALSE(metric_proto->has_int_value()); } TEST(ValueMetricTest, ValueOverflow) { constexpr int64_t kMaxValue = std::numeric_limits::max(); constexpr uint64_t kMaxU64 = std::numeric_limits::max(); constexpr size_t kMaxSizeT = std::numeric_limits::max(); ValueMetric metric_u64; metric_u64.Record(kMaxU64); // Runtime value should not be capped. ASSERT_EQ(kMaxU64, metric_u64.GetValue()); std::unique_ptr metric_proto(metric_u64.ToProto()); // Proto value should be capped. ASSERT_EQ(kMaxValue, metric_proto->int_value()); ASSERT_FALSE(metric_proto->has_error_code()); ValueMetric metric_z; metric_z.Record(kMaxSizeT); ASSERT_EQ(kMaxSizeT, metric_z.GetValue()); metric_proto.reset(metric_z.ToProto()); if (sizeof(int64_t) <= sizeof(size_t) && static_cast(kMaxValue) <= kMaxSizeT) { ASSERT_EQ(kMaxValue, metric_proto->int_value()); } else { ASSERT_GT(kMaxValue, metric_proto->int_value()); } } } // namespace metrics } // namespace wvcdm