blob: d1948b478a24ccbe9bbdc9549b03730c5ed1d962 [file] [log] [blame]
Adam Stonecea91ce2018-01-22 19:23:28 -08001/*
2 * Copyright 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <gtest/gtest.h>
18
19#include "DrmMetrics.h"
20
21using ::android::hardware::drm::V1_0::EventType;
22using ::android::hardware::drm::V1_0::KeyStatusType;
23
24namespace android {
25
26/**
27 * Unit tests for the MediaDrmMetrics class.
28 */
29class MediaDrmMetricsTest : public ::testing::Test {
30};
31
32TEST_F(MediaDrmMetricsTest, EmptySuccess) {
33 MediaDrmMetrics metrics;
34 MediaAnalyticsItem item;
35
36 metrics.Export(&item);
37 EXPECT_EQ(0, item.count());
38}
39
40TEST_F(MediaDrmMetricsTest, AllValuesSuccessCounts) {
41 MediaDrmMetrics metrics;
42
43 metrics.mOpenSessionCounter.Increment(OK);
44 metrics.mCloseSessionCounter.Increment(OK);
45
46 {
47 EventTimer<status_t> get_key_request_timer(&metrics.mGetKeyRequestTiming);
48 EventTimer<status_t> provide_key_response_timer(
49 &metrics.mProvideKeyResponseTiming);
50 get_key_request_timer.SetAttribute(OK);
51 provide_key_response_timer.SetAttribute(OK);
52 }
53
54 metrics.mGetProvisionRequestCounter.Increment(OK);
55 metrics.mProvideProvisionResponseCounter.Increment(OK);
56 metrics.mGetDeviceUniqueIdCounter.Increment(OK);
57
58 metrics.mKeyStatusChangeCounter.Increment(KeyStatusType::USABLE);
59 metrics.mEventCounter.Increment(EventType::PROVISION_REQUIRED);
60
61 MediaAnalyticsItem item;
62
63 metrics.Export(&item);
64 EXPECT_EQ(11, item.count());
65
66 // Verify the list of pairs of int64 metrics.
67 std::vector<std::pair<std::string, int64_t>> expected_values = {
Adam Stone4bea53c2018-01-24 21:44:58 -080068 { "drm.mediadrm.open_session.ok.count", 1 },
69 { "drm.mediadrm.close_session.ok.count", 1 },
70 { "drm.mediadrm.get_key_request.ok.count", 1 },
71 { "drm.mediadrm.provide_key_response.ok.count", 1 },
72 { "drm.mediadrm.get_provision_request.ok.count", 1 },
73 { "drm.mediadrm.provide_provision_response.ok.count", 1 },
74 { "drm.mediadrm.key_status_change.USABLE.count", 1 },
75 { "drm.mediadrm.event.PROVISION_REQUIRED.count", 1 },
76 { "drm.mediadrm.get_device_unique_id.ok.count", 1 }};
Adam Stonecea91ce2018-01-22 19:23:28 -080077 for (const auto& expected_pair : expected_values) {
78 int64_t value = -1;
79 EXPECT_TRUE(item.getInt64(expected_pair.first.c_str(), &value))
80 << "Failed to get " << expected_pair.first;
81 EXPECT_EQ(expected_pair.second, value)
82 << "Unexpected value for " << expected_pair.first;
83 }
84
85 // Validate timing values exist.
86 int64_t value = -1;
87 EXPECT_TRUE(
Adam Stone4bea53c2018-01-24 21:44:58 -080088 item.getInt64("drm.mediadrm.get_key_request.ok.average_time_micros",
Adam Stonecea91ce2018-01-22 19:23:28 -080089 &value));
90 EXPECT_GE(value, 0);
91
92 value = -1;
93 EXPECT_TRUE(
Adam Stone4bea53c2018-01-24 21:44:58 -080094 item.getInt64("drm.mediadrm.provide_key_response.ok.average_time_micros",
Adam Stonecea91ce2018-01-22 19:23:28 -080095 &value));
96 EXPECT_GE(value, 0);
97}
98
99TEST_F(MediaDrmMetricsTest, AllValuesFull) {
100 MediaDrmMetrics metrics;
101
102 metrics.mOpenSessionCounter.Increment(OK);
103 metrics.mOpenSessionCounter.Increment(UNEXPECTED_NULL);
104
105 metrics.mCloseSessionCounter.Increment(OK);
106 metrics.mCloseSessionCounter.Increment(UNEXPECTED_NULL);
107
108 for (status_t s : {OK, UNEXPECTED_NULL}) {
109 {
110 EventTimer<status_t> get_key_request_timer(&metrics.mGetKeyRequestTiming);
111 EventTimer<status_t> provide_key_response_timer(
112 &metrics.mProvideKeyResponseTiming);
113 get_key_request_timer.SetAttribute(s);
114 provide_key_response_timer.SetAttribute(s);
115 }
116 }
117
118 metrics.mGetProvisionRequestCounter.Increment(OK);
119 metrics.mGetProvisionRequestCounter.Increment(UNEXPECTED_NULL);
120 metrics.mProvideProvisionResponseCounter.Increment(OK);
121 metrics.mProvideProvisionResponseCounter.Increment(UNEXPECTED_NULL);
122 metrics.mGetDeviceUniqueIdCounter.Increment(OK);
123 metrics.mGetDeviceUniqueIdCounter.Increment(UNEXPECTED_NULL);
124
125 metrics.mKeyStatusChangeCounter.Increment(KeyStatusType::USABLE);
126 metrics.mKeyStatusChangeCounter.Increment(KeyStatusType::EXPIRED);
127 metrics.mKeyStatusChangeCounter.Increment(KeyStatusType::OUTPUTNOTALLOWED);
128 metrics.mKeyStatusChangeCounter.Increment(KeyStatusType::STATUSPENDING);
129 metrics.mKeyStatusChangeCounter.Increment(KeyStatusType::INTERNALERROR);
130 metrics.mEventCounter.Increment(EventType::PROVISION_REQUIRED);
131 metrics.mEventCounter.Increment(EventType::KEY_NEEDED);
132 metrics.mEventCounter.Increment(EventType::KEY_EXPIRED);
133 metrics.mEventCounter.Increment(EventType::VENDOR_DEFINED);
134 metrics.mEventCounter.Increment(EventType::SESSION_RECLAIMED);
135
136 MediaAnalyticsItem item;
137
138 metrics.Export(&item);
139 EXPECT_EQ(26, item.count());
140
141 // Verify the list of pairs of int64 metrics.
142 std::vector<std::pair<std::string, int64_t>> expected_values = {
Adam Stone4bea53c2018-01-24 21:44:58 -0800143 { "drm.mediadrm.open_session.ok.count", 1 },
144 { "drm.mediadrm.close_session.ok.count", 1 },
145 { "drm.mediadrm.get_key_request.ok.count", 1 },
146 { "drm.mediadrm.provide_key_response.ok.count", 1 },
147 { "drm.mediadrm.get_provision_request.ok.count", 1 },
148 { "drm.mediadrm.provide_provision_response.ok.count", 1 },
149 { "drm.mediadrm.get_device_unique_id.ok.count", 1 },
150 { "drm.mediadrm.open_session.error.count", 1 },
151 { "drm.mediadrm.close_session.error.count", 1 },
152 { "drm.mediadrm.get_key_request.error.count", 1 },
153 { "drm.mediadrm.provide_key_response.error.count", 1 },
154 { "drm.mediadrm.get_provision_request.error.count", 1 },
155 { "drm.mediadrm.provide_provision_response.error.count", 1 },
156 { "drm.mediadrm.get_device_unique_id.error.count", 1 },
157 { "drm.mediadrm.key_status_change.USABLE.count", 1 },
158 { "drm.mediadrm.key_status_change.EXPIRED.count", 1 },
159 { "drm.mediadrm.key_status_change.OUTPUT_NOT_ALLOWED.count", 1 },
160 { "drm.mediadrm.key_status_change.STATUS_PENDING.count", 1 },
161 { "drm.mediadrm.key_status_change.INTERNAL_ERROR.count", 1 },
162 { "drm.mediadrm.event.PROVISION_REQUIRED.count", 1 },
163 { "drm.mediadrm.event.KEY_NEEDED.count", 1 },
164 { "drm.mediadrm.event.KEY_EXPIRED.count", 1 },
165 { "drm.mediadrm.event.VENDOR_DEFINED.count", 1 },
166 { "drm.mediadrm.event.SESSION_RECLAIMED.count", 1 }};
Adam Stonecea91ce2018-01-22 19:23:28 -0800167 for (const auto& expected_pair : expected_values) {
168 int64_t value = -1;
169 EXPECT_TRUE(item.getInt64(expected_pair.first.c_str(), &value))
170 << "Failed to get " << expected_pair.first;
171 EXPECT_EQ(expected_pair.second, value)
172 << "Unexpected value for " << expected_pair.first;
173 }
174
175 // Validate timing values exist.
176 int64_t value = -1;
Adam Stone4bea53c2018-01-24 21:44:58 -0800177 EXPECT_TRUE(
178 item.getInt64("drm.mediadrm.get_key_request.ok.average_time_micros",
179 &value));
Adam Stonecea91ce2018-01-22 19:23:28 -0800180 EXPECT_GE(value, 0);
181
182 value = -1;
Adam Stone4bea53c2018-01-24 21:44:58 -0800183 EXPECT_TRUE(
184 item.getInt64("drm.mediadrm.provide_key_response.ok.average_time_micros",
185 &value));
Adam Stonecea91ce2018-01-22 19:23:28 -0800186 EXPECT_GE(value, 0);
187}
188
Adam Stonecea91ce2018-01-22 19:23:28 -0800189} // namespace android