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

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

Issue 2701633002: [Media Router] Add DialMediaSinkService and DeviceDescriptionService (Closed)
Patch Set: Add DialMediaSinkCacheService and unit test Created 3 years, 9 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 #include "chrome/browser/media/router/dial_media_sink_service.h"
5 #include "base/test/mock_callback.h"
6 #include "chrome/browser/extensions/api/dial/dial_device_data.h"
7 #include "chrome/browser/media/router/mock_device_description_service.h"
8 #include "chrome/browser/media/router/test_helper.h"
9 #include "chrome/test/base/testing_profile.h"
10 #include "content/public/test/test_browser_thread_bundle.h"
11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 using ::testing::_;
15 using ::testing::Return;
16
17 using DialRegistry = extensions::api::dial::DialRegistry;
18 using DialDeviceData = extensions::api::dial::DialDeviceData;
19
20 namespace media_router {
21
22 class MockDialRegistry : public DialRegistry {
23 public:
24 MockDialRegistry()
25 : DialRegistry(base::TimeDelta::FromSeconds(2),
26 base::TimeDelta::FromSeconds(5),
27 10) {}
28
29 MOCK_METHOD1(RegisterObserver, void(DialRegistry::Observer* observer));
30 MOCK_METHOD1(UnregisterObserver, void(DialRegistry::Observer* observer));
31 };
32
33 class MockDialMediaSinkCacheService : public DialMediaSinkCacheService {
34 public:
35 MOCK_METHOD0(GetAliveSinks, std::vector<MediaSinkInternal>());
36 };
37
38 class TestDialMediaSinkService : public DialMediaSinkService {
39 public:
40 TestDialMediaSinkService(
41 const MediaSinkService::OnSinksDiscoveredCallback& callback,
42 content::BrowserContext* browser_context,
43 MockDialRegistry* mock_dial_registry,
44 MockDeviceDescriptionService* mock_description_service,
45 MockDialMediaSinkCacheService* mock_cache_service)
46 : DialMediaSinkService(callback, browser_context),
47 mock_dial_registry_(mock_dial_registry),
48 mock_description_service_(mock_description_service),
49 mock_cache_service_(mock_cache_service) {}
50
51 DialRegistry* dial_registry() override { return mock_dial_registry_; }
52
53 DeviceDescriptionService* description_service() override {
54 return mock_description_service_;
55 }
56
57 DialMediaSinkCacheService* cache_service() override {
58 return mock_cache_service_;
59 }
60
61 private:
62 MockDialRegistry* mock_dial_registry_;
63 MockDeviceDescriptionService* mock_description_service_;
64 MockDialMediaSinkCacheService* mock_cache_service_;
65 };
66
67 class DialMediaSinkServiceTest : public ::testing::Test {
68 public:
69 DialMediaSinkServiceTest()
70 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
71 mock_description_service_(&mock_description_service_observer_),
72 media_sink_service_(mock_sink_discovered_cb_.Get(),
73 &profile_,
74 &mock_dial_registry_,
75 &mock_description_service_,
76 &mock_cache_service_) {}
77
78 DialMediaSinkService* media_sink_service() { return &media_sink_service_; }
79
80 protected:
81 const content::TestBrowserThreadBundle thread_bundle_;
82 TestingProfile profile_;
83
84 base::MockCallback<MediaSinkService::OnSinksDiscoveredCallback>
85 mock_sink_discovered_cb_;
86
87 MockDialRegistry mock_dial_registry_;
88 MockDeviceDescriptionServiceObserver mock_description_service_observer_;
89 MockDeviceDescriptionService mock_description_service_;
90 MockDialMediaSinkCacheService mock_cache_service_;
91
92 TestDialMediaSinkService media_sink_service_;
93 };
94
95 TEST_F(DialMediaSinkServiceTest, TestStart) {
96 EXPECT_CALL(mock_dial_registry_, RegisterObserver(&media_sink_service_));
97 media_sink_service()->Start();
98
99 DialRegistry::DeviceList deviceList;
100 DialDeviceData first_device("first", GURL("http://127.0.0.1/dd.xml"),
101 base::Time::Now());
102 DialDeviceData second_device("second", GURL("http://127.0.0.2/dd.xml"),
103 base::Time::Now());
104 DialDeviceData third_device("third", GURL("http://127.0.0.3/dd.xml"),
105 base::Time::Now());
106 deviceList.push_back(first_device);
107 deviceList.push_back(second_device);
108 deviceList.push_back(third_device);
109
110 for (const auto& device : deviceList)
111 EXPECT_CALL(mock_description_service_, GetDeviceDescription(device, _, _));
112
113 media_sink_service()->OnDialDeviceEvent(deviceList);
114 EXPECT_TRUE(media_sink_service_.finish_timer_.IsRunning());
115 }
116
117 TEST_F(DialMediaSinkServiceTest, TestFetchCompleted) {
118 MediaSink sink1("sink1", "sink_name_1", MediaSink::IconType::CAST);
119 DialSinkExtraData extra_data1("192.168.1.1", "model_name1",
120 "https://example1.com");
121
122 MediaSink sink2("sink2", "sink_name_2", MediaSink::IconType::CAST);
123 DialSinkExtraData extra_data2("192.168.1.2", "model_name2",
124 "https://example2.com");
125
126 std::vector<MediaSinkInternal> sinks;
127 sinks.push_back(MediaSinkInternal(sink1, extra_data1));
128 sinks.push_back(MediaSinkInternal(sink2, extra_data2));
129
130 EXPECT_CALL(mock_cache_service_, GetAliveSinks())
131 .WillRepeatedly(Return(sinks));
132 EXPECT_CALL(mock_sink_discovered_cb_, Run(sinks));
133 media_sink_service()->FetchCompleted();
134
135 EXPECT_CALL(mock_sink_discovered_cb_, Run(_)).Times(0);
136 media_sink_service()->FetchCompleted();
137 }
138
139 TEST_F(DialMediaSinkServiceTest, TestIsDifferent) {
140 MediaSink sink1("sink1", "sink_name_1", MediaSink::IconType::CAST);
141 DialSinkExtraData extra_data1("192.168.1.1", "model_name1",
142 "https://example1.com");
143
144 MediaSink sink2("sink2", "sink_name_2", MediaSink::IconType::CAST);
145 DialSinkExtraData extra_data2("192.168.1.2", "model_name2",
146 "https://example2.com");
147
148 std::vector<MediaSinkInternal> old_sinks;
149 old_sinks.push_back(MediaSinkInternal(sink1, extra_data1));
150 old_sinks.push_back(MediaSinkInternal(sink2, extra_data2));
151
152 // The same sinks.
153 std::vector<MediaSinkInternal> new_sinks1(old_sinks);
154 ASSERT_FALSE(media_sink_service()->IsDifferent(new_sinks1, old_sinks));
155
156 // Add a new sink to new_sinks.
157 std::vector<MediaSinkInternal> new_sinks2(old_sinks);
158 MediaSink sink3("sink3", "sink_name_3", MediaSink::IconType::CAST);
159 DialSinkExtraData extra_data3("192.168.1.3", "model_name3",
160 "https://example3.com");
161
162 new_sinks2.push_back(MediaSinkInternal(sink3, extra_data3));
163 ASSERT_TRUE(media_sink_service()->IsDifferent(new_sinks2, old_sinks));
164
165 // Remove a sink from new_sinks.
166 std::vector<MediaSinkInternal> new_sinks3(old_sinks);
167 new_sinks3.erase(new_sinks3.begin());
168 ASSERT_TRUE(media_sink_service()->IsDifferent(new_sinks3, old_sinks));
169
170 // updated a sink from new_sinks
171 std::vector<MediaSinkInternal> new_sinks4(old_sinks);
172 new_sinks4[0].set_name("sink_name_4");
173 ASSERT_TRUE(media_sink_service()->IsDifferent(new_sinks4, old_sinks));
174
175 // Combined add, remove and update
176 std::vector<MediaSinkInternal> new_sinks5;
177 new_sinks5.push_back(MediaSinkInternal(sink1, extra_data2));
178 new_sinks5.push_back(MediaSinkInternal(sink3, extra_data3));
179 ASSERT_TRUE(media_sink_service()->IsDifferent(new_sinks5, old_sinks));
180 }
181
182 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698