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

Side by Side Diff: chrome/browser/media/router/discovery/dial/dial_media_sink_service_unittest.cc

Issue 2701633002: [Media Router] Add DialMediaSinkService and DeviceDescriptionService (Closed)
Patch Set: merge with master Created 3 years, 8 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 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service.h"
6 #include "base/test/mock_callback.h"
mark a. foltz 2017/04/25 21:06:26 Are these #includes in the right order?
zhaobin 2017/04/26 18:50:05 Done.
7 #include "chrome/browser/media/router/discovery/dial/dial_device_data.h"
8 #include "chrome/browser/media/router/discovery/dial/dial_registry.h"
9 #include "chrome/browser/media/router/discovery/dial/mock_device_description_ser vice.h"
10 #include "chrome/browser/media/router/test_helper.h"
11 #include "chrome/common/media_router/discovery/media_sink_internal_unittest.h"
12 #include "chrome/test/base/testing_profile.h"
13 #include "content/public/test/test_browser_thread_bundle.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 using ::testing::_;
18 using ::testing::Return;
19
20 namespace media_router {
21
22 class TestDialRegistry : public DialRegistry {
23 public:
24 TestDialRegistry() {}
25 ~TestDialRegistry() {}
26
27 MOCK_METHOD1(RegisterObserver, void(DialRegistry::Observer* observer));
28 MOCK_METHOD1(UnregisterObserver, void(DialRegistry::Observer* observer));
29 };
30
31 class TestDialMediaSinkService : public DialMediaSinkService {
32 public:
33 TestDialMediaSinkService(
34 const MediaSinkService::OnSinksDiscoveredCallback& callback,
35 content::BrowserContext* browser_context,
36 TestDialRegistry* test_dial_registry,
37 MockDeviceDescriptionService* mock_description_service)
38 : DialMediaSinkService(callback, browser_context),
39 test_dial_registry_(test_dial_registry),
40 mock_description_service_(mock_description_service) {}
41
42 DialRegistry* dial_registry() override { return test_dial_registry_; }
43
44 DeviceDescriptionService* GetDescriptionService() override {
45 return mock_description_service_;
46 }
47
48 private:
49 TestDialRegistry* test_dial_registry_;
50 MockDeviceDescriptionService* mock_description_service_;
51 };
52
53 class DialMediaSinkServiceTest : public ::testing::Test {
54 public:
55 DialMediaSinkServiceTest()
56 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
57 mock_description_service_(mock_success_cb_.Get(), mock_error_cb_.Get()),
58 media_sink_service_(mock_sink_discovered_cb_.Get(),
59 &profile_,
60 &test_dial_registry_,
61 &mock_description_service_) {}
62
63 DialMediaSinkService* media_sink_service() { return &media_sink_service_; }
64
65 std::vector<MediaSinkInternal> CreateDialMediaSinks() {
mark a. foltz 2017/04/25 21:06:26 Similar comment about moving test data factory cod
zhaobin 2017/04/26 18:50:05 Done.
66 MediaSink sink1("sink1", "sink_name_1", MediaSink::IconType::CAST);
67 DialSinkExtraData extra_data1 =
68 MediaSinkInternalTest::CreateDialSinkExtraData(
69 "model_name1", "192.168.1.1", "https://example1.com");
70
71 MediaSink sink2("sink2", "sink_name_2", MediaSink::IconType::CAST);
72 DialSinkExtraData extra_data2 =
73 MediaSinkInternalTest::CreateDialSinkExtraData(
74 "model_name2", "192.168.1.2", "https://example2.com");
75
76 std::vector<MediaSinkInternal> sinks;
77 sinks.push_back(MediaSinkInternal(sink1, extra_data1));
78 sinks.push_back(MediaSinkInternal(sink2, extra_data2));
79 return sinks;
80 }
81
82 void TestFetchCompleted(const std::vector<MediaSinkInternal>& old_sinks,
83 const std::vector<MediaSinkInternal>& new_sinks) {
84 media_sink_service()->mrp_sinks_ =
85 std::set<MediaSinkInternal>(old_sinks.begin(), old_sinks.end());
86 media_sink_service()->current_sinks_ =
87 std::set<MediaSinkInternal>(new_sinks.begin(), new_sinks.end());
88 EXPECT_CALL(mock_sink_discovered_cb_, Run(new_sinks));
89 media_sink_service()->OnFetchCompleted();
90 }
91
92 protected:
93 const content::TestBrowserThreadBundle thread_bundle_;
94 TestingProfile profile_;
95
96 base::MockCallback<MediaSinkService::OnSinksDiscoveredCallback>
97 mock_sink_discovered_cb_;
98 base::MockCallback<
99 MockDeviceDescriptionService::DeviceDescriptionParseSuccessCallback>
100 mock_success_cb_;
101 base::MockCallback<
102 MockDeviceDescriptionService::DeviceDescriptionParseErrorCallback>
103 mock_error_cb_;
104
105 TestDialRegistry test_dial_registry_;
106 MockDeviceDescriptionService mock_description_service_;
107
108 TestDialMediaSinkService media_sink_service_;
109 };
110
111 TEST_F(DialMediaSinkServiceTest, TestStart) {
112 EXPECT_CALL(test_dial_registry_, RegisterObserver(&media_sink_service_));
113 media_sink_service()->Start();
114
115 DialRegistry::DeviceList deviceList;
116 DialDeviceData first_device("first", GURL("http://127.0.0.1/dd.xml"),
117 base::Time::Now());
118 DialDeviceData second_device("second", GURL("http://127.0.0.2/dd.xml"),
119 base::Time::Now());
120 DialDeviceData third_device("third", GURL("http://127.0.0.3/dd.xml"),
121 base::Time::Now());
122 deviceList.push_back(first_device);
123 deviceList.push_back(second_device);
124 deviceList.push_back(third_device);
125
126 EXPECT_CALL(mock_description_service_, GetDeviceDescriptions(deviceList, _));
127
128 media_sink_service()->OnDialDeviceEvent(deviceList);
129 EXPECT_TRUE(media_sink_service_.finish_timer_->IsRunning());
130 }
131
132 TEST_F(DialMediaSinkServiceTest, TestFetchCompleted) {
133 std::vector<MediaSinkInternal> old_sinks;
134 std::vector<MediaSinkInternal> new_sinks = CreateDialMediaSinks();
135 TestFetchCompleted(old_sinks, new_sinks);
136
137 // Same sink
138 EXPECT_CALL(mock_sink_discovered_cb_, Run(new_sinks)).Times(0);
139 media_sink_service()->OnFetchCompleted();
140 }
141
142 TEST_F(DialMediaSinkServiceTest, TestFetchCompleted_OneNewSink) {
143 std::vector<MediaSinkInternal> old_sinks = CreateDialMediaSinks();
144 std::vector<MediaSinkInternal> new_sinks = CreateDialMediaSinks();
145 MediaSink sink3("sink3", "sink_name_3", MediaSink::IconType::CAST);
146 DialSinkExtraData extra_data3 =
147 MediaSinkInternalTest::CreateDialSinkExtraData(
148 "model_name3", "192.168.1.3", "https://example3.com");
149 new_sinks.push_back(MediaSinkInternal(sink3, extra_data3));
150 TestFetchCompleted(old_sinks, new_sinks);
151 }
152
153 TEST_F(DialMediaSinkServiceTest, TestFetchCompleted_RemovedOneSink) {
154 std::vector<MediaSinkInternal> old_sinks = CreateDialMediaSinks();
155 std::vector<MediaSinkInternal> new_sinks = CreateDialMediaSinks();
156 new_sinks.erase(new_sinks.begin());
157 TestFetchCompleted(old_sinks, new_sinks);
158 }
159
160 TEST_F(DialMediaSinkServiceTest, TestFetchCompleted_UpdatedOneSink) {
161 std::vector<MediaSinkInternal> old_sinks = CreateDialMediaSinks();
162 std::vector<MediaSinkInternal> new_sinks = CreateDialMediaSinks();
163 new_sinks[0].set_name("sink_name_4");
164 TestFetchCompleted(old_sinks, new_sinks);
165 }
166
167 TEST_F(DialMediaSinkServiceTest, TestFetchCompleted_Mixed) {
168 std::vector<MediaSinkInternal> old_sinks = CreateDialMediaSinks();
169
170 MediaSink sink1("sink1", "sink_name_1", MediaSink::IconType::CAST);
171 DialSinkExtraData extra_data2 =
172 MediaSinkInternalTest::CreateDialSinkExtraData(
173 "model_name2", "192.168.1.2", "https://example2.com");
174
175 MediaSink sink3("sink3", "sink_name_3", MediaSink::IconType::CAST);
176 DialSinkExtraData extra_data3 =
177 MediaSinkInternalTest::CreateDialSinkExtraData(
178 "model_name3", "192.168.1.3", "https://example3.com");
179
180 std::vector<MediaSinkInternal> new_sinks;
181 new_sinks.push_back(MediaSinkInternal(sink1, extra_data2));
182 new_sinks.push_back(MediaSinkInternal(sink3, extra_data3));
183
184 TestFetchCompleted(old_sinks, new_sinks);
185 }
186
187 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698