1 // Copyright 2015 The Chromium Authors
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 "net/quic/network_connection.h"
6
7 #include "base/memory/raw_ptr.h"
8 #include "base/run_loop.h"
9 #include "net/base/mock_network_change_notifier.h"
10 #include "net/test/test_with_task_environment.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace net::test {
14
15 constexpr auto CONNECTION_3G = NetworkChangeNotifier::CONNECTION_3G;
16 constexpr auto CONNECTION_2G = NetworkChangeNotifier::CONNECTION_2G;
17 constexpr auto CONNECTION_ETHERNET = NetworkChangeNotifier::CONNECTION_ETHERNET;
18 constexpr auto CONNECTION_WIFI = NetworkChangeNotifier::CONNECTION_WIFI;
19
20 // TestWithTaskEnvironment needed to instantiate a
21 // net::NetworkChangeNotifier::NetworkChangeNotifier via
22 // ScopedMockNetworkChangeNotifier.
23 class NetworkConnectionTest : public TestWithTaskEnvironment {
24 protected:
NetworkConnectionTest()25 NetworkConnectionTest()
26 : notifier_(scoped_notifier_.mock_network_change_notifier()) {}
27
28 ScopedMockNetworkChangeNotifier scoped_notifier_;
29 raw_ptr<MockNetworkChangeNotifier> notifier_;
30 };
31
TEST_F(NetworkConnectionTest,Connection2G)32 TEST_F(NetworkConnectionTest, Connection2G) {
33 notifier_->SetConnectionType(CONNECTION_2G);
34
35 NetworkConnection network_connection;
36 EXPECT_EQ(CONNECTION_2G, network_connection.connection_type());
37 }
38
TEST_F(NetworkConnectionTest,Connection3G)39 TEST_F(NetworkConnectionTest, Connection3G) {
40 notifier_->SetConnectionType(CONNECTION_3G);
41
42 NetworkConnection network_connection;
43 EXPECT_EQ(CONNECTION_3G, network_connection.connection_type());
44 }
45
TEST_F(NetworkConnectionTest,ConnectionEthnernet)46 TEST_F(NetworkConnectionTest, ConnectionEthnernet) {
47 notifier_->SetConnectionType(CONNECTION_ETHERNET);
48
49 NetworkConnection network_connection;
50 EXPECT_EQ(CONNECTION_ETHERNET, network_connection.connection_type());
51 }
52
TEST_F(NetworkConnectionTest,ConnectionWifi)53 TEST_F(NetworkConnectionTest, ConnectionWifi) {
54 notifier_->SetConnectionType(CONNECTION_WIFI);
55
56 NetworkConnection network_connection;
57 EXPECT_EQ(CONNECTION_WIFI, network_connection.connection_type());
58 }
59
TEST_F(NetworkConnectionTest,ConnectionChange)60 TEST_F(NetworkConnectionTest, ConnectionChange) {
61 notifier_->SetConnectionType(CONNECTION_2G);
62
63 NetworkConnection network_connection;
64
65 notifier_->SetConnectionType(CONNECTION_3G);
66 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
67 // Spin the message loop so the notification is delivered.
68 base::RunLoop().RunUntilIdle();
69 EXPECT_EQ(CONNECTION_3G, network_connection.connection_type());
70
71 NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests(
72 CONNECTION_ETHERNET);
73 // Spin the message loop so the notification is delivered.
74 base::RunLoop().RunUntilIdle();
75 EXPECT_EQ(CONNECTION_ETHERNET, network_connection.connection_type());
76
77 NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests(
78 CONNECTION_WIFI);
79 // Spin the message loop so the notification is delivered.
80 base::RunLoop().RunUntilIdle();
81 EXPECT_EQ(CONNECTION_WIFI, network_connection.connection_type());
82 }
83
84 } // namespace net::test
85