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

Unified Diff: chrome/browser/media/webrtc/test_stats_dictionary_unittest.cc

Issue 2534633002: Preparation CL for WebRTC performance test using promise-based getStats (Closed)
Patch Set: Rename RTCStats[Report]Dictionary to TestStats[Report]Dictionary Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media/webrtc/test_stats_dictionary_unittest.cc
diff --git a/chrome/browser/media/webrtc/test_stats_dictionary_unittest.cc b/chrome/browser/media/webrtc/test_stats_dictionary_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..44fecb5677b80be566ee88b1510144f0b93a30e3
--- /dev/null
+++ b/chrome/browser/media/webrtc/test_stats_dictionary_unittest.cc
@@ -0,0 +1,167 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/media/webrtc/test_stats_dictionary.h"
+
+#include <memory>
+#include <set>
+#include <vector>
+
+#include "base/json/json_reader.h"
+#include "base/logging.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/values.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+namespace {
+
+const char kTestStatsReportJson[] =
+ "{\n"
+ " \"GarbageA\": {\n"
+ " \"id\": \"GarbageA\",\n"
+ " \"timestamp\": 0.0,\n"
+ " \"type\": \"garbage\"\n"
+ " },\n"
+ " \"RTCTestStatsID\": {\n"
+ " \"id\": \"RTCTestStatsID\",\n"
+ " \"timestamp\": 13.37,\n"
+ " \"type\": \"test\",\n"
+ " \"boolean\": true,\n"
+ " \"number\": 42,\n"
+ " \"string\": \"text\",\n"
+ " \"sequenceBoolean\": [ true ],\n"
+ " \"sequenceNumber\": [ 42 ],\n"
+ " \"sequenceString\": [ \"text\" ]\n"
+ " },\n"
+ " \"GarbageB\": {\n"
+ " \"id\": \"GarbageB\",\n"
+ " \"timestamp\": 0.0,\n"
+ " \"type\": \"garbage\"\n"
+ " }\n"
+ "}";
+
+class TestStatsDictionaryTest : public testing::Test {
+ public:
+ TestStatsDictionaryTest() {
+ std::unique_ptr<base::Value> value =
+ base::JSONReader::Read(kTestStatsReportJson);
+ CHECK(value);
+ base::DictionaryValue* dictionary;
+ CHECK(value->GetAsDictionary(&dictionary));
+ ignore_result(value.release());
+ report_ = new TestStatsReportDictionary(
+ std::unique_ptr<base::DictionaryValue>(dictionary));
+ }
+
+ protected:
+ scoped_refptr<TestStatsReportDictionary> report_;
+};
+
+TEST_F(TestStatsDictionaryTest, ReportGetStats) {
+ EXPECT_FALSE(report_->Get("InvalidID"));
+ EXPECT_TRUE(report_->Get("GarbageA"));
+ EXPECT_TRUE(report_->Get("RTCTestStatsID"));
+ EXPECT_TRUE(report_->Get("GarbageB"));
+}
+
+TEST_F(TestStatsDictionaryTest, ReportForEach) {
+ std::set<std::string> remaining;
+ remaining.insert("GarbageA");
+ remaining.insert("RTCTestStatsID");
+ remaining.insert("GarbageB");
+ report_->ForEach([&remaining](const TestStatsDictionary& stats) {
+ remaining.erase(stats.GetString("id"));
+ });
+ EXPECT_TRUE(remaining.empty());
+}
+
+TEST_F(TestStatsDictionaryTest, ReportFilterStats) {
+ std::vector<TestStatsDictionary> filtered_stats = report_->Filter(
+ [](const TestStatsDictionary& stats) -> bool {
+ return false;
+ });
+ EXPECT_EQ(filtered_stats.size(), 0u);
+
+ filtered_stats = report_->Filter(
+ [](const TestStatsDictionary& stats) -> bool {
+ return true;
+ });
+ EXPECT_EQ(filtered_stats.size(), 3u);
+
+ filtered_stats = report_->Filter(
+ [](const TestStatsDictionary& stats) -> bool {
+ return stats.GetString("id") == "RTCTestStatsID";
+ });
+ EXPECT_EQ(filtered_stats.size(), 1u);
+}
+
+TEST_F(TestStatsDictionaryTest, ReportGetAll) {
+ std::set<std::string> remaining;
+ remaining.insert("GarbageA");
+ remaining.insert("RTCTestStatsID");
+ remaining.insert("GarbageB");
+ for (const TestStatsDictionary& stats : report_->GetAll()) {
+ remaining.erase(stats.GetString("id"));
+ }
+ EXPECT_TRUE(remaining.empty());
+}
+
+TEST_F(TestStatsDictionaryTest, ReportGetByType) {
+ std::vector<TestStatsDictionary> stats = report_->GetByType("garbage");
+ EXPECT_EQ(stats.size(), 2u);
+ std::set<std::string> remaining;
+ remaining.insert("GarbageA");
+ remaining.insert("GarbageB");
+ report_->ForEach([&remaining](const TestStatsDictionary& stats) {
+ remaining.erase(stats.GetString("id"));
+ });
+ EXPECT_TRUE(remaining.empty());
+}
+
+TEST_F(TestStatsDictionaryTest, StatsVerifyMembers) {
+ std::unique_ptr<TestStatsDictionary> stats = report_->Get("RTCTestStatsID");
+ EXPECT_TRUE(stats);
+
+ EXPECT_FALSE(stats->IsBoolean("nonexistentMember"));
+ EXPECT_FALSE(stats->IsNumber("nonexistentMember"));
+ EXPECT_FALSE(stats->IsString("nonexistentMember"));
+ EXPECT_FALSE(stats->IsSequenceBoolean("nonexistentMember"));
+ EXPECT_FALSE(stats->IsSequenceNumber("nonexistentMember"));
+ EXPECT_FALSE(stats->IsSequenceString("nonexistentMember"));
+
+ ASSERT_TRUE(stats->IsBoolean("boolean"));
+ EXPECT_EQ(stats->GetBoolean("boolean"), true);
+
+ ASSERT_TRUE(stats->IsNumber("number"));
+ EXPECT_EQ(stats->GetNumber("number"), 42.0);
+
+ ASSERT_TRUE(stats->IsString("string"));
+ EXPECT_EQ(stats->GetString("string"), "text");
+
+ ASSERT_TRUE(stats->IsSequenceBoolean("sequenceBoolean"));
+ EXPECT_EQ(stats->GetSequenceBoolean("sequenceBoolean"),
+ std::vector<bool> { true });
+
+ ASSERT_TRUE(stats->IsSequenceNumber("sequenceNumber"));
+ EXPECT_EQ(stats->GetSequenceNumber("sequenceNumber"),
+ std::vector<double> { 42.0 });
+
+ ASSERT_TRUE(stats->IsSequenceString("sequenceString"));
+ EXPECT_EQ(stats->GetSequenceString("sequenceString"),
+ std::vector<std::string> { "text" });
+}
+
+TEST_F(TestStatsDictionaryTest, TestStatsDictionaryShouldKeepReportAlive) {
+ std::unique_ptr<TestStatsDictionary> stats = report_->Get("RTCTestStatsID");
+ EXPECT_TRUE(stats);
+ report_ = nullptr;
+ EXPECT_EQ(stats->GetString("string"), "text");
+}
+
+} // namespace
+
+} // namespace content
« no previous file with comments | « chrome/browser/media/webrtc/test_stats_dictionary.cc ('k') | chrome/browser/media/webrtc/webrtc_browsertest_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698