| Index: net/base/network_change_notifier_win_unittest.cc
|
| diff --git a/net/base/network_change_notifier_win_unittest.cc b/net/base/network_change_notifier_win_unittest.cc
|
| deleted file mode 100644
|
| index 25873c37f2003300c666690877517b8e70bae205..0000000000000000000000000000000000000000
|
| --- a/net/base/network_change_notifier_win_unittest.cc
|
| +++ /dev/null
|
| @@ -1,260 +0,0 @@
|
| -// Copyright (c) 2012 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 "base/message_loop/message_loop.h"
|
| -#include "net/base/network_change_notifier.h"
|
| -#include "net/base/network_change_notifier_factory.h"
|
| -#include "net/base/network_change_notifier_win.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::AtLeast;
|
| -using ::testing::Invoke;
|
| -using ::testing::Return;
|
| -using ::testing::StrictMock;
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -// Subclass of NetworkChangeNotifierWin that overrides functions so that no
|
| -// Windows API networking functions are ever called.
|
| -class TestNetworkChangeNotifierWin : public NetworkChangeNotifierWin {
|
| - public:
|
| - TestNetworkChangeNotifierWin() {}
|
| -
|
| - virtual ~TestNetworkChangeNotifierWin() {
|
| - // This is needed so we don't try to stop watching for IP address changes,
|
| - // as we never actually started.
|
| - set_is_watching(false);
|
| - }
|
| -
|
| - // From NetworkChangeNotifierWin.
|
| - virtual NetworkChangeNotifier::ConnectionType
|
| - RecomputeCurrentConnectionType() const override {
|
| - return NetworkChangeNotifier::CONNECTION_UNKNOWN;
|
| - }
|
| -
|
| - // From NetworkChangeNotifierWin.
|
| - MOCK_METHOD0(WatchForAddressChangeInternal, bool());
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(TestNetworkChangeNotifierWin);
|
| -};
|
| -
|
| -class TestIPAddressObserver
|
| - : public net::NetworkChangeNotifier::IPAddressObserver {
|
| - public:
|
| - TestIPAddressObserver() {
|
| - NetworkChangeNotifier::AddIPAddressObserver(this);
|
| - }
|
| -
|
| - ~TestIPAddressObserver() {
|
| - NetworkChangeNotifier::RemoveIPAddressObserver(this);
|
| - }
|
| -
|
| - MOCK_METHOD0(OnIPAddressChanged, void());
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(TestIPAddressObserver);
|
| -};
|
| -
|
| -bool ExitMessageLoopAndReturnFalse() {
|
| - base::MessageLoop::current()->Quit();
|
| - return false;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class NetworkChangeNotifierWinTest : public testing::Test {
|
| - public:
|
| - // Calls WatchForAddressChange, and simulates a WatchForAddressChangeInternal
|
| - // success. Expects that |network_change_notifier_| has just been created, so
|
| - // it's not watching anything yet, and there have been no previous
|
| - // WatchForAddressChangeInternal failures.
|
| - void StartWatchingAndSucceed() {
|
| - EXPECT_FALSE(network_change_notifier_.is_watching());
|
| - EXPECT_EQ(0, network_change_notifier_.sequential_failures());
|
| -
|
| - EXPECT_CALL(test_ip_address_observer_, OnIPAddressChanged()).Times(0);
|
| - EXPECT_CALL(network_change_notifier_, WatchForAddressChangeInternal())
|
| - .Times(1)
|
| - .WillOnce(Return(true));
|
| -
|
| - network_change_notifier_.WatchForAddressChange();
|
| -
|
| - EXPECT_TRUE(network_change_notifier_.is_watching());
|
| - EXPECT_EQ(0, network_change_notifier_.sequential_failures());
|
| -
|
| - // If a task to notify observers of the IP address change event was
|
| - // incorrectly posted, make sure it gets run to trigger a failure.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| - // Calls WatchForAddressChange, and simulates a WatchForAddressChangeInternal
|
| - // failure.
|
| - void StartWatchingAndFail() {
|
| - EXPECT_FALSE(network_change_notifier_.is_watching());
|
| - EXPECT_EQ(0, network_change_notifier_.sequential_failures());
|
| -
|
| - EXPECT_CALL(test_ip_address_observer_, OnIPAddressChanged()).Times(0);
|
| - EXPECT_CALL(network_change_notifier_, WatchForAddressChangeInternal())
|
| - // Due to an expected race, it's theoretically possible for more than
|
| - // one call to occur, though unlikely.
|
| - .Times(AtLeast(1))
|
| - .WillRepeatedly(Return(false));
|
| -
|
| - network_change_notifier_.WatchForAddressChange();
|
| -
|
| - EXPECT_FALSE(network_change_notifier_.is_watching());
|
| - EXPECT_LT(0, network_change_notifier_.sequential_failures());
|
| -
|
| - // If a task to notify observers of the IP address change event was
|
| - // incorrectly posted, make sure it gets run.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| - // Simulates a network change event, resulting in a call to OnObjectSignaled.
|
| - // The resulting call to WatchForAddressChangeInternal then succeeds.
|
| - void SignalAndSucceed() {
|
| - EXPECT_TRUE(network_change_notifier_.is_watching());
|
| - EXPECT_EQ(0, network_change_notifier_.sequential_failures());
|
| -
|
| - EXPECT_CALL(test_ip_address_observer_, OnIPAddressChanged()).Times(1);
|
| - EXPECT_CALL(network_change_notifier_, WatchForAddressChangeInternal())
|
| - .Times(1)
|
| - .WillOnce(Return(true));
|
| -
|
| - network_change_notifier_.OnObjectSignaled(INVALID_HANDLE_VALUE);
|
| -
|
| - EXPECT_TRUE(network_change_notifier_.is_watching());
|
| - EXPECT_EQ(0, network_change_notifier_.sequential_failures());
|
| -
|
| - // Run the task to notify observers of the IP address change event.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| - // Simulates a network change event, resulting in a call to OnObjectSignaled.
|
| - // The resulting call to WatchForAddressChangeInternal then fails.
|
| - void SignalAndFail() {
|
| - EXPECT_TRUE(network_change_notifier_.is_watching());
|
| - EXPECT_EQ(0, network_change_notifier_.sequential_failures());
|
| -
|
| - EXPECT_CALL(test_ip_address_observer_, OnIPAddressChanged()).Times(1);
|
| - EXPECT_CALL(network_change_notifier_, WatchForAddressChangeInternal())
|
| - // Due to an expected race, it's theoretically possible for more than
|
| - // one call to occur, though unlikely.
|
| - .Times(AtLeast(1))
|
| - .WillRepeatedly(Return(false));
|
| -
|
| - network_change_notifier_.OnObjectSignaled(INVALID_HANDLE_VALUE);
|
| -
|
| - EXPECT_FALSE(network_change_notifier_.is_watching());
|
| - EXPECT_LT(0, network_change_notifier_.sequential_failures());
|
| -
|
| - // Run the task to notify observers of the IP address change event.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| - // Runs the message loop until WatchForAddressChange is called again, as a
|
| - // result of the already posted task after a WatchForAddressChangeInternal
|
| - // failure. Simulates a success on the resulting call to
|
| - // WatchForAddressChangeInternal.
|
| - void RetryAndSucceed() {
|
| - EXPECT_FALSE(network_change_notifier_.is_watching());
|
| - EXPECT_LT(0, network_change_notifier_.sequential_failures());
|
| -
|
| - EXPECT_CALL(test_ip_address_observer_, OnIPAddressChanged()).Times(1)
|
| - .WillOnce(
|
| - Invoke(base::MessageLoop::current(), &base::MessageLoop::Quit));
|
| - EXPECT_CALL(network_change_notifier_, WatchForAddressChangeInternal())
|
| - .Times(1).WillOnce(Return(true));
|
| -
|
| - base::MessageLoop::current()->Run();
|
| -
|
| - EXPECT_TRUE(network_change_notifier_.is_watching());
|
| - EXPECT_EQ(0, network_change_notifier_.sequential_failures());
|
| - }
|
| -
|
| - // Runs the message loop until WatchForAddressChange is called again, as a
|
| - // result of the already posted task after a WatchForAddressChangeInternal
|
| - // failure. Simulates a failure on the resulting call to
|
| - // WatchForAddressChangeInternal.
|
| - void RetryAndFail() {
|
| - EXPECT_FALSE(network_change_notifier_.is_watching());
|
| - EXPECT_LT(0, network_change_notifier_.sequential_failures());
|
| -
|
| - int initial_sequential_failures =
|
| - network_change_notifier_.sequential_failures();
|
| -
|
| - EXPECT_CALL(test_ip_address_observer_, OnIPAddressChanged()).Times(0);
|
| - EXPECT_CALL(network_change_notifier_, WatchForAddressChangeInternal())
|
| - // Due to an expected race, it's theoretically possible for more than
|
| - // one call to occur, though unlikely.
|
| - .Times(AtLeast(1))
|
| - .WillRepeatedly(Invoke(ExitMessageLoopAndReturnFalse));
|
| -
|
| - base::MessageLoop::current()->Run();
|
| -
|
| - EXPECT_FALSE(network_change_notifier_.is_watching());
|
| - EXPECT_LT(initial_sequential_failures,
|
| - network_change_notifier_.sequential_failures());
|
| -
|
| - // If a task to notify observers of the IP address change event was
|
| - // incorrectly posted, make sure it gets run.
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| - private:
|
| - // Note that the order of declaration here is important.
|
| -
|
| - // Allows creating a new NetworkChangeNotifier. Must be created before
|
| - // |network_change_notifier_| and destroyed after it to avoid DCHECK failures.
|
| - NetworkChangeNotifier::DisableForTest disable_for_test_;
|
| -
|
| - StrictMock<TestNetworkChangeNotifierWin> network_change_notifier_;
|
| -
|
| - // Must be created after |network_change_notifier_|, so it can add itself as
|
| - // an IPAddressObserver.
|
| - StrictMock<TestIPAddressObserver> test_ip_address_observer_;
|
| -};
|
| -
|
| -TEST_F(NetworkChangeNotifierWinTest, NetChangeWinBasic) {
|
| - StartWatchingAndSucceed();
|
| -}
|
| -
|
| -TEST_F(NetworkChangeNotifierWinTest, NetChangeWinFailStart) {
|
| - StartWatchingAndFail();
|
| -}
|
| -
|
| -TEST_F(NetworkChangeNotifierWinTest, NetChangeWinFailStartOnce) {
|
| - StartWatchingAndFail();
|
| - RetryAndSucceed();
|
| -}
|
| -
|
| -TEST_F(NetworkChangeNotifierWinTest, NetChangeWinFailStartTwice) {
|
| - StartWatchingAndFail();
|
| - RetryAndFail();
|
| - RetryAndSucceed();
|
| -}
|
| -
|
| -TEST_F(NetworkChangeNotifierWinTest, NetChangeWinSignal) {
|
| - StartWatchingAndSucceed();
|
| - SignalAndSucceed();
|
| -}
|
| -
|
| -TEST_F(NetworkChangeNotifierWinTest, NetChangeWinFailSignalOnce) {
|
| - StartWatchingAndSucceed();
|
| - SignalAndFail();
|
| - RetryAndSucceed();
|
| -}
|
| -
|
| -TEST_F(NetworkChangeNotifierWinTest, NetChangeWinFailSignalTwice) {
|
| - StartWatchingAndSucceed();
|
| - SignalAndFail();
|
| - RetryAndFail();
|
| - RetryAndSucceed();
|
| -}
|
| -
|
| -} // namespace net
|
|
|