Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Side by Side Diff: webrtc/stats/rtcstats_unittest.cc

Issue 2241093002: RTCStats and RTCStatsReport added (webrtc/stats) (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/api/rtcstats.h"
12 #include "webrtc/api/rtcstatsreport.h"
13
14 #include "webrtc/base/checks.h"
15 #include "webrtc/base/gunit.h"
16 #include "webrtc/base/logging.h"
17
18 namespace webrtc {
19
20 class RTCTestStats : public RTCStats {
21 public:
22 static const char* const kType;
23
24 RTCTestStats(const std::string& id, double timestamp)
25 : RTCStats(id, timestamp),
26 m_int32("mInt32"),
27 m_uint32("mUint32"),
28 m_int64("mInt64"),
29 m_uint64("mUint64"),
30 m_double("mDouble"),
31 m_static_string("mStaticString"),
32 m_string("mString"),
33 m_sequence_int32("mSequenceInt32"),
34 m_sequence_uint32("mSequenceUint32"),
35 m_sequence_int64("mSequenceInt64"),
36 m_sequence_uint64("mSequenceUint64"),
37 m_sequence_double("mSequenceDouble"),
38 m_sequence_static_string("mSequenceStaticString"),
39 m_sequence_string("mSequenceString") {
40 }
41 std::unique_ptr<RTCStats> copy() const override {
42 return std::unique_ptr<RTCStats>(new RTCTestStats(*this));
43 }
44
45 const char* const* type() const override { return &kType; }
46 const char* type_name() const override { return kType; }
47 std::vector<const RTCStatsMemberInterface*> Members() const override {
48 const RTCStatsMemberInterface* members[] = {
49 &m_int32,
50 &m_uint32,
51 &m_int64,
52 &m_uint64,
53 &m_double,
54 &m_static_string,
55 &m_string,
56 &m_sequence_int32,
57 &m_sequence_uint32,
58 &m_sequence_int64,
59 &m_sequence_uint64,
60 &m_sequence_double,
61 &m_sequence_static_string,
62 &m_sequence_string
63 };
64 return MembersVector(members, sizeof(members) / sizeof(members[0]));
65 }
66
67 RTCStatsMember<int32_t> m_int32;
68 RTCStatsMember<uint32_t> m_uint32;
69 RTCStatsMember<int64_t> m_int64;
70 RTCStatsMember<uint64_t> m_uint64;
71 RTCStatsMember<double> m_double;
72 RTCStatsMember<const char*> m_static_string;
73 RTCStatsMember<std::string> m_string;
74
75 RTCStatsMember<std::vector<int32_t>> m_sequence_int32;
76 RTCStatsMember<std::vector<uint32_t>> m_sequence_uint32;
77 RTCStatsMember<std::vector<int64_t>> m_sequence_int64;
78 RTCStatsMember<std::vector<uint64_t>> m_sequence_uint64;
79 RTCStatsMember<std::vector<double>> m_sequence_double;
80 RTCStatsMember<std::vector<const char*>> m_sequence_static_string;
81 RTCStatsMember<std::vector<std::string>> m_sequence_string;
82 };
83
84 const char* const RTCTestStats::kType = "test";
85
86 class RTCTestStats2 : public RTCStats {
87 public:
88 static const char* const kType;
89
90 RTCTestStats2(const std::string& id, double timestamp)
91 : RTCStats(id, timestamp) {
92 }
93 std::unique_ptr<RTCStats> copy() const override {
94 return std::unique_ptr<RTCStats>(new RTCTestStats2(*this));
95 }
96
97 const char* const* type() const override { return &kType; }
98 const char* type_name() const override { return kType; }
99 std::vector<const RTCStatsMemberInterface*> Members() const override {
100 return std::vector<const RTCStatsMemberInterface*>();
101 }
102 };
103
104 const char* const RTCTestStats2::kType = "test2";
105
106 class RTCTestStats3 : public RTCStats {
107 public:
108 static const char* const kType;
109
110 RTCTestStats3(const std::string& id, double timestamp)
111 : RTCStats(id, timestamp) {
112 }
113 std::unique_ptr<RTCStats> copy() const override {
114 return std::unique_ptr<RTCStats>(new RTCTestStats3(*this));
115 }
116
117 const char* const* type() const override { return &kType; }
118 const char* type_name() const override { return kType; }
119 std::vector<const RTCStatsMemberInterface*> Members() const override {
120 return std::vector<const RTCStatsMemberInterface*>();
121 }
122 };
123
124 const char* const RTCTestStats3::kType = "test3";
125
126 class RTCStatsTest : public testing::Test {
127 };
128
129 TEST_F(RTCStatsTest, TestRTCStatsAndMembers) {
130 RTCTestStats stats("testId", 42.0);
131 EXPECT_EQ(stats.id(), "testId");
132 EXPECT_EQ(stats.timestamp(), 42.0);
133 std::vector<const RTCStatsMemberInterface*> members = stats.Members();
134 EXPECT_EQ(members.size(), static_cast<size_t>(14));
135 for (const RTCStatsMemberInterface* member : members) {
136 EXPECT_FALSE(member->has_value());
137 }
138 stats.m_int32 = 123;
139 stats.m_uint32 = 123;
140 stats.m_int64 = 123;
141 stats.m_uint64 = 123;
142 stats.m_double = 123.0;
143 stats.m_static_string = "123";
144 stats.m_string = std::string("123");
145 stats.m_sequence_int32 = std::vector<int32_t>();
146 stats.m_sequence_uint32 = std::vector<uint32_t>();
147 stats.m_sequence_int64 = std::vector<int64_t>();
148 stats.m_sequence_uint64 = std::vector<uint64_t>();
149 stats.m_sequence_double = std::vector<double>();
150 stats.m_sequence_static_string = std::vector<const char*>();
151 stats.m_sequence_string = std::vector<std::string>();
152 for (const RTCStatsMemberInterface* member : members) {
153 EXPECT_TRUE(member->has_value());
154 }
155 EXPECT_EQ(*stats.m_int32, static_cast<int32_t>(123));
156 EXPECT_EQ(*stats.m_uint32, static_cast<uint32_t>(123));
157 EXPECT_EQ(*stats.m_int64, static_cast<int64_t>(123));
158 EXPECT_EQ(*stats.m_uint64, static_cast<uint64_t>(123));
159 EXPECT_EQ(*stats.m_double, 123.0);
160 EXPECT_EQ(*stats.m_static_string, "123");
161 EXPECT_EQ(*stats.m_string, std::string("123"));
162 EXPECT_EQ(*stats.m_sequence_int32, std::vector<int32_t>());
163 EXPECT_EQ(*stats.m_sequence_uint32, std::vector<uint32_t>());
164 EXPECT_EQ(*stats.m_sequence_int64, std::vector<int64_t>());
165 EXPECT_EQ(*stats.m_sequence_uint64, std::vector<uint64_t>());
166 EXPECT_EQ(*stats.m_sequence_double, std::vector<double>());
167 EXPECT_EQ(*stats.m_sequence_static_string, std::vector<const char*>());
168 EXPECT_EQ(*stats.m_sequence_string, std::vector<std::string>());
169 }
170
171 TEST_F(RTCStatsTest, TestRTCStatsReport) {
172 rtc::scoped_refptr<RTCStatsReport> report = RTCStatsReport::Create();
173 EXPECT_EQ(report->size(), static_cast<size_t>(0));
174 report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats("a0", 1.0)));
175 report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats("a1", 2.0)));
176 report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b0", 4.0)));
177 report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b1", 8.0)));
178 report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats("a2", 16.0)));
179 report->AddStats(std::unique_ptr<RTCStats>(new RTCTestStats2("b2", 32.0)));
180 EXPECT_EQ(report->size(), static_cast<size_t>(6));
181
182 EXPECT_EQ((*report)["missing"], nullptr);
183 EXPECT_EQ((*report)["a0"]->id(), "a0");
184 EXPECT_EQ((*report)["b2"]->id(), "b2");
185
186 std::vector<const RTCTestStats*> a = report->GetStatsOfType<RTCTestStats>();
187 EXPECT_EQ(a.size(), static_cast<size_t>(3));
188 uint32_t mask = 0;
189 for (const RTCTestStats* stats : a)
190 mask |= static_cast<uint32_t>(stats->timestamp());
191 EXPECT_EQ(mask, static_cast<uint32_t>(1 | 2 | 16));
192
193 std::vector<const RTCTestStats2*> b = report->GetStatsOfType<RTCTestStats2>();
194 EXPECT_EQ(b.size(), static_cast<size_t>(3));
195 mask = 0;
196 for (const RTCTestStats2* stats : b)
197 mask |= static_cast<uint32_t>(stats->timestamp());
198 EXPECT_EQ(mask, static_cast<uint32_t>(4 | 8 | 32));
199
200 EXPECT_EQ(report->GetStatsOfType<RTCTestStats3>().size(),
201 static_cast<size_t>(0));
202 }
203
204 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698