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

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

Issue 2750453002: Add DiscoveryNetworkMonitor implementation (Closed)
Patch Set: Temporarily fix Windows and Mac compilation Created 3 years, 6 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 (c) 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/discovery_network_monitor.h"
6
7 #include <memory>
8
9 #include "base/run_loop.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/test/test_browser_thread_bundle.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace {
16
17 using content::BrowserThread;
18
19 using testing::_;
20 using testing::Invoke;
21
22 class MockDiscoveryObserver : public DiscoveryNetworkMonitor::Observer {
23 public:
24 MOCK_METHOD1(OnNetworksChanged, void(const DiscoveryNetworkMonitor&));
25 };
26
27 } // namespace
28
29 class DiscoveryNetworkMonitorTest : public testing::Test {
30 protected:
31 void SetUp() override {
32 fake_network_info.clear();
33 discovery_network_monitor->SetNetworkInfoFunctionForTest(
34 &FakeGetNetworkInfo);
35 }
36
37 void TearDown() override { delete discovery_network_monitor; }
38
39 static std::vector<DiscoveryNetworkInfo> FakeGetNetworkInfo() {
40 return fake_network_info;
41 }
42
43 content::TestBrowserThreadBundle test_browser_thread_bundle;
44 MockDiscoveryObserver mock_observer;
45
46 std::vector<DiscoveryNetworkInfo> fake_ethernet_info{
47 {{std::string("enp0s2"), std::string("ethernet1")}}};
48 std::vector<DiscoveryNetworkInfo> fake_wifi_info{
49 {DiscoveryNetworkInfo{std::string("wlp3s0"), std::string("wifi1")},
50 DiscoveryNetworkInfo{std::string("wlp3s1"), std::string("wifi2")}}};
51
52 std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier =
53 base::WrapUnique(net::NetworkChangeNotifier::CreateMock());
54
55 static std::vector<DiscoveryNetworkInfo> fake_network_info;
56 // A raw pointer is used here with the delete in TearDown to avoid making the
57 // destructor public.
58 DiscoveryNetworkMonitor* discovery_network_monitor =
59 new DiscoveryNetworkMonitor();
60 };
61
62 // static
63 std::vector<DiscoveryNetworkInfo>
64 DiscoveryNetworkMonitorTest::fake_network_info;
65
66 TEST_F(DiscoveryNetworkMonitorTest, NetworkIdIsConsistent) {
67 fake_network_info = fake_ethernet_info;
68 std::string current_network_id;
69
70 auto capture_network_id =
71 [&current_network_id](const DiscoveryNetworkMonitor& monitor) {
72 DCHECK_CURRENTLY_ON(BrowserThread::IO);
73 current_network_id = monitor.GetNetworkId();
74 };
75 discovery_network_monitor->AddObserver(&mock_observer);
76 EXPECT_CALL(mock_observer, OnNetworksChanged(_))
77 .WillOnce(Invoke(capture_network_id));
78
79 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
80 net::NetworkChangeNotifier::CONNECTION_ETHERNET);
81 base::RunLoop().RunUntilIdle();
82
83 std::string ethernet_network_id = current_network_id;
84
85 fake_network_info.clear();
86 EXPECT_CALL(mock_observer, OnNetworksChanged(_))
87 .WillOnce(Invoke(capture_network_id));
88
89 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
90 net::NetworkChangeNotifier::CONNECTION_NONE);
91 base::RunLoop().RunUntilIdle();
92
93 fake_network_info = fake_wifi_info;
94 EXPECT_CALL(mock_observer, OnNetworksChanged(_))
95 .WillOnce(Invoke(capture_network_id));
96
97 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
98 net::NetworkChangeNotifier::CONNECTION_WIFI);
99 base::RunLoop().RunUntilIdle();
100
101 std::string wifi_network_id = current_network_id;
102 fake_network_info = fake_ethernet_info;
103 EXPECT_CALL(mock_observer, OnNetworksChanged(_))
104 .WillOnce(Invoke(capture_network_id));
105
106 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
107 net::NetworkChangeNotifier::CONNECTION_ETHERNET);
108 base::RunLoop().RunUntilIdle();
109
110 EXPECT_EQ(ethernet_network_id, current_network_id);
111 EXPECT_NE(ethernet_network_id, wifi_network_id);
112
113 discovery_network_monitor->RemoveObserver(&mock_observer);
114 }
115
116 TEST_F(DiscoveryNetworkMonitorTest, RemoveObserverStopsNotifications) {
117 fake_network_info = fake_ethernet_info;
118
119 discovery_network_monitor->AddObserver(&mock_observer);
120 EXPECT_CALL(mock_observer, OnNetworksChanged(_))
121 .WillOnce(Invoke([](const DiscoveryNetworkMonitor& monitor) {
122 DCHECK_CURRENTLY_ON(BrowserThread::IO);
123 }));
124
125 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
126 net::NetworkChangeNotifier::CONNECTION_ETHERNET);
127 base::RunLoop().RunUntilIdle();
128
129 discovery_network_monitor->RemoveObserver(&mock_observer);
130 fake_network_info.clear();
131
132 net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests(
133 net::NetworkChangeNotifier::CONNECTION_NONE);
134 base::RunLoop().RunUntilIdle();
135 }
136
137 TEST_F(DiscoveryNetworkMonitorTest, RefreshIndependentOfChangeObserver) {
138 fake_network_info = fake_ethernet_info;
139
140 discovery_network_monitor->AddObserver(&mock_observer);
141 auto force_refresh_callback = [](const DiscoveryNetworkMonitor* monitor) {
142 EXPECT_NE(std::string(DiscoveryNetworkMonitor::kNetworkIdDisconnected),
143 monitor->GetNetworkId());
144 EXPECT_NE(std::string(DiscoveryNetworkMonitor::kNetworkIdUnknown),
145 monitor->GetNetworkId());
146 };
147
148 EXPECT_EQ(std::string(DiscoveryNetworkMonitor::kNetworkIdDisconnected),
149 discovery_network_monitor->GetNetworkId());
150 discovery_network_monitor->Refresh(base::Bind(
151 force_refresh_callback, base::Unretained(discovery_network_monitor)));
152 base::RunLoop().RunUntilIdle();
153 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698