1aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone/*
2aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * Copyright 2018 The Android Open Source Project
3aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone *
4aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * Licensed under the Apache License, Version 2.0 (the "License");
5aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * you may not use this file except in compliance with the License.
6aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * You may obtain a copy of the License at
7aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone *
8aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone *      http://www.apache.org/licenses/LICENSE-2.0
9aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone *
10aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * Unless required by applicable law or agreed to in writing, software
11aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * distributed under the License is distributed on an "AS IS" BASIS,
12aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * See the License for the specific language governing permissions and
14aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * limitations under the License.
15aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone */
16aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
17aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone#include <gtest/gtest.h>
18aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
19aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone#include "CounterMetric.h"
20aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
21aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stonenamespace android {
22aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
23aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone/**
24aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone * Unit tests for the CounterMetric class.
25aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone */
26aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stoneclass CounterMetricTest : public ::testing::Test {
27aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone};
28aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
29aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam StoneTEST_F(CounterMetricTest, IntDataTypeEmpty) {
30aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  CounterMetric<int> metric("MyMetricName", "MetricAttributeName");
31aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
32aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  std::map<int, int64_t> values;
33aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
34aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.ExportValues(
35aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone      [&] (int attribute_value, int64_t value) {
36aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone          values[attribute_value] = value;
37aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone      });
38aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
39aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  EXPECT_TRUE(values.empty());
40aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone}
41aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
42aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam StoneTEST_F(CounterMetricTest, IntDataType) {
43aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  CounterMetric<int> metric("MyMetricName", "MetricAttributeName");
44aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
45aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  std::map<int, int64_t> values;
46aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
47aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.Increment(7);
48aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.Increment(8);
49aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.Increment(8);
50aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
51aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.ExportValues(
52aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone      [&] (int attribute_value, int64_t value) {
53aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone          values[attribute_value] = value;
54aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone      });
55aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
56aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  ASSERT_EQ(2u, values.size());
57aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  EXPECT_EQ(1, values[7]);
58aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  EXPECT_EQ(2, values[8]);
59aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone}
60aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
61aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam StoneTEST_F(CounterMetricTest, StringDataType) {
62aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  CounterMetric<std::string> metric("MyMetricName", "MetricAttributeName");
63aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
64aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  std::map<std::string, int64_t> values;
65aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
66aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.Increment("a");
67aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.Increment("b");
68aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.Increment("b");
69aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
70aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  metric.ExportValues(
71aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone      [&] (std::string attribute_value, int64_t value) {
72aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone          values[attribute_value] = value;
73aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone      });
74aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
75aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  ASSERT_EQ(2u, values.size());
76aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  EXPECT_EQ(1, values["a"]);
77aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone  EXPECT_EQ(2, values["b"]);
78aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone}
79aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone
80aaf87dd09686bdb47df0a638b622a4c2ea37a331Adam Stone}  // namespace android
81