| Index: chrome/browser/media/router/discovery/dial/dial_registry_unittest.cc
|
| diff --git a/chrome/browser/media/router/discovery/dial/dial_registry_unittest.cc b/chrome/browser/media/router/discovery/dial/dial_registry_unittest.cc
|
| index 734577a6b1e05ad81775fc2be2f83784c174ebb1..63c910227690636f485178df0fd2f5b9127cddca 100644
|
| --- a/chrome/browser/media/router/discovery/dial/dial_registry_unittest.cc
|
| +++ b/chrome/browser/media/router/discovery/dial/dial_registry_unittest.cc
|
| @@ -5,6 +5,7 @@
|
| #include <stddef.h>
|
|
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/test/simple_test_clock.h"
|
| #include "chrome/browser/media/router/discovery/dial/dial_device_data.h"
|
| #include "chrome/browser/media/router/discovery/dial/dial_registry.h"
|
| #include "chrome/browser/media/router/discovery/dial/dial_service.h"
|
| @@ -44,7 +45,10 @@ class MockDialService : public DialService {
|
|
|
| class MockDialRegistry : public DialRegistry {
|
| public:
|
| - MockDialRegistry() : DialRegistry(), time_(Time::Now()) {}
|
| + MockDialRegistry() : DialRegistry(), clock_(new base::SimpleTestClock()) {
|
| + // Takes ownership of |clock|.
|
| + SetClockForTest(base::WrapUnique(clock_));
|
| + }
|
|
|
| ~MockDialRegistry() override {
|
| // Don't let the DialRegistry delete this.
|
| @@ -55,12 +59,9 @@ class MockDialRegistry : public DialRegistry {
|
|
|
| // Returns the mock Dial service.
|
| MockDialService& mock_service() { return mock_service_; }
|
| -
|
| - void set_time(Time time) { time_ = time; }
|
| + base::SimpleTestClock* clock() const { return clock_; }
|
|
|
| protected:
|
| - base::Time Now() const override { return time_; }
|
| -
|
| std::unique_ptr<DialService> CreateDialService() override {
|
| return base::WrapUnique(&mock_service_);
|
| }
|
| @@ -73,21 +74,22 @@ class MockDialRegistry : public DialRegistry {
|
| private:
|
| MockDialService mock_service_;
|
|
|
| - // Set to mock out the current time.
|
| - Time time_;
|
| + // Owned by DialRegistry.
|
| + base::SimpleTestClock* const clock_;
|
| };
|
|
|
| class DialRegistryTest : public testing::Test {
|
| public:
|
| DialRegistryTest()
|
| : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
|
| - first_device_("first", GURL("http://127.0.0.1/dd.xml"), Time::Now()),
|
| - second_device_("second", GURL("http://127.0.0.2/dd.xml"), Time::Now()),
|
| - third_device_("third", GURL("http://127.0.0.3/dd.xml"), Time::Now()) {
|
| - registry_ = base::MakeUnique<MockDialRegistry>();
|
| + registry_(new MockDialRegistry()),
|
| + first_device_("first", GURL("http://127.0.0.1/dd.xml"), Now()),
|
| + second_device_("second", GURL("http://127.0.0.2/dd.xml"), Now()),
|
| + third_device_("third", GURL("http://127.0.0.3/dd.xml"), Now()),
|
| + list_with_first_device_({first_device_}),
|
| + list_with_second_device_({second_device_}),
|
| + list_with_first_second_devices_({first_device_, second_device_}) {
|
| registry_->RegisterObserver(&mock_observer_);
|
| - list_with_first_device_.push_back(first_device_);
|
| - list_with_second_device_.push_back(second_device_);
|
| }
|
|
|
| protected:
|
| @@ -98,7 +100,19 @@ class DialRegistryTest : public testing::Test {
|
| RemoveObserver(A<DialService::Observer*>()));
|
| }
|
|
|
| + void VerifyAndResetMocks() {
|
| + testing::Mock::VerifyAndClearExpectations(®istry_->mock_service());
|
| + testing::Mock::VerifyAndClearExpectations(&mock_observer_);
|
| + }
|
| +
|
| + Time Now() const { return registry_->clock()->Now(); }
|
| +
|
| + void AdvanceTime(base::TimeDelta duration) {
|
| + registry_->clock()->Advance(duration);
|
| + }
|
| +
|
| content::TestBrowserThreadBundle thread_bundle_;
|
| +
|
| std::unique_ptr<MockDialRegistry> registry_;
|
| MockDialObserver mock_observer_;
|
| const DialDeviceData first_device_;
|
| @@ -106,8 +120,9 @@ class DialRegistryTest : public testing::Test {
|
| const DialDeviceData third_device_;
|
|
|
| const DialRegistry::DeviceList empty_list_;
|
| - DialRegistry::DeviceList list_with_first_device_;
|
| - DialRegistry::DeviceList list_with_second_device_;
|
| + const DialRegistry::DeviceList list_with_first_device_;
|
| + const DialRegistry::DeviceList list_with_second_device_;
|
| + const DialRegistry::DeviceList list_with_first_second_devices_;
|
| };
|
|
|
| TEST_F(DialRegistryTest, TestAddRemoveListeners) {
|
| @@ -138,17 +153,14 @@ TEST_F(DialRegistryTest, TestNoDevicesDiscovered) {
|
| }
|
|
|
| TEST_F(DialRegistryTest, TestDevicesDiscovered) {
|
| - DialRegistry::DeviceList expected_list2;
|
| - expected_list2.push_back(first_device_);
|
| - expected_list2.push_back(second_device_);
|
| -
|
| SetListenerExpectations();
|
| InSequence s;
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| EXPECT_CALL(mock_observer_, OnDialDeviceEvent(empty_list_));
|
| EXPECT_CALL(mock_observer_, OnDialDeviceEvent(list_with_first_device_));
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| - EXPECT_CALL(mock_observer_, OnDialDeviceEvent(expected_list2));
|
| + EXPECT_CALL(mock_observer_,
|
| + OnDialDeviceEvent(list_with_first_second_devices_));
|
|
|
| registry_->OnListenerAdded();
|
| registry_->OnDiscoveryRequest(nullptr);
|
| @@ -163,10 +175,6 @@ TEST_F(DialRegistryTest, TestDevicesDiscovered) {
|
| }
|
|
|
| TEST_F(DialRegistryTest, TestDevicesDiscoveredWithTwoListeners) {
|
| - DialRegistry::DeviceList expected_list2;
|
| - expected_list2.push_back(first_device_);
|
| - expected_list2.push_back(second_device_);
|
| -
|
| SetListenerExpectations();
|
| InSequence s;
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| @@ -174,7 +182,8 @@ TEST_F(DialRegistryTest, TestDevicesDiscoveredWithTwoListeners) {
|
| EXPECT_CALL(mock_observer_, OnDialDeviceEvent(list_with_first_device_))
|
| .Times(2);
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| - EXPECT_CALL(mock_observer_, OnDialDeviceEvent(expected_list2));
|
| + EXPECT_CALL(mock_observer_,
|
| + OnDialDeviceEvent(list_with_first_second_devices_));
|
|
|
| registry_->OnListenerAdded();
|
| registry_->OnDiscoveryRequest(nullptr);
|
| @@ -192,36 +201,61 @@ TEST_F(DialRegistryTest, TestDevicesDiscoveredWithTwoListeners) {
|
| }
|
|
|
| TEST_F(DialRegistryTest, TestDeviceExpires) {
|
| - SetListenerExpectations();
|
| InSequence s;
|
| +
|
| + EXPECT_CALL(registry_->mock_service(),
|
| + AddObserver(A<DialService::Observer*>()));
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| EXPECT_CALL(mock_observer_, OnDialDeviceEvent(empty_list_));
|
| EXPECT_CALL(mock_observer_, OnDialDeviceEvent(list_with_first_device_));
|
| - EXPECT_CALL(registry_->mock_service(), Discover());
|
| - EXPECT_CALL(mock_observer_, OnDialDeviceEvent(empty_list_));
|
|
|
| registry_->OnListenerAdded();
|
| registry_->OnDiscoveryRequest(nullptr);
|
| registry_->OnDeviceDiscovered(nullptr, first_device_);
|
| registry_->OnDiscoveryFinished(nullptr);
|
| + VerifyAndResetMocks();
|
|
|
| - registry_->set_time(Time::Now() + TimeDelta::FromSeconds(300));
|
| + // First device has not expired yet.
|
| + EXPECT_CALL(registry_->mock_service(), Discover());
|
| + EXPECT_CALL(mock_observer_,
|
| + OnDialDeviceEvent(list_with_first_second_devices_));
|
| +
|
| + AdvanceTime(TimeDelta::FromSeconds(100));
|
| + DialDeviceData second_device_discovered_later = second_device_;
|
| + second_device_discovered_later.set_response_time(Now());
|
|
|
| registry_->DoDiscovery();
|
| registry_->OnDiscoveryRequest(nullptr);
|
| + registry_->OnDeviceDiscovered(nullptr, second_device_discovered_later);
|
| registry_->OnDiscoveryFinished(nullptr);
|
| + VerifyAndResetMocks();
|
| +
|
| + // First device has expired, second device has not expired yet.
|
| + EXPECT_CALL(registry_->mock_service(), Discover());
|
| + EXPECT_CALL(mock_observer_, OnDialDeviceEvent(list_with_second_device_));
|
| +
|
| + AdvanceTime(TimeDelta::FromSeconds(200));
|
| + registry_->DoDiscovery();
|
| + registry_->OnDiscoveryRequest(nullptr);
|
| + registry_->OnDiscoveryFinished(nullptr);
|
| + VerifyAndResetMocks();
|
| +
|
| + // Second device has expired.
|
| + EXPECT_CALL(registry_->mock_service(), Discover());
|
| + EXPECT_CALL(mock_observer_, OnDialDeviceEvent(empty_list_));
|
| +
|
| + AdvanceTime(TimeDelta::FromSeconds(200));
|
| + registry_->DoDiscovery();
|
| + registry_->OnDiscoveryRequest(nullptr);
|
| + registry_->OnDiscoveryFinished(nullptr);
|
| + VerifyAndResetMocks();
|
| +
|
| + EXPECT_CALL(registry_->mock_service(),
|
| + RemoveObserver(A<DialService::Observer*>()));
|
| registry_->OnListenerRemoved();
|
| }
|
|
|
| TEST_F(DialRegistryTest, TestExpiredDeviceIsRediscovered) {
|
| - std::vector<Time> discovery_times;
|
| - discovery_times.push_back(Time::Now());
|
| - discovery_times.push_back(discovery_times[0] + TimeDelta::FromSeconds(300));
|
| - discovery_times.push_back(discovery_times[1] + TimeDelta::FromSeconds(300));
|
| -
|
| - DialDeviceData rediscovered_device("first", GURL("http://127.0.0.1/dd.xml"),
|
| - discovery_times[2]);
|
| -
|
| SetListenerExpectations();
|
|
|
| InSequence s;
|
| @@ -233,21 +267,23 @@ TEST_F(DialRegistryTest, TestExpiredDeviceIsRediscovered) {
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| EXPECT_CALL(mock_observer_, OnDialDeviceEvent(list_with_first_device_));
|
|
|
| - registry_->set_time(discovery_times[0]);
|
| registry_->OnListenerAdded();
|
| registry_->OnDiscoveryRequest(nullptr);
|
| registry_->OnDeviceDiscovered(nullptr, first_device_);
|
| registry_->OnDiscoveryFinished(nullptr);
|
|
|
| // Will expire "first" device as it is not discovered this time.
|
| - registry_->set_time(discovery_times[1]);
|
| + AdvanceTime(TimeDelta::FromSeconds(300));
|
| registry_->DoDiscovery();
|
| registry_->OnDiscoveryRequest(nullptr);
|
| registry_->OnDiscoveryFinished(nullptr);
|
|
|
| - // "first" device is rediscovered 30 seconds later. We pass a device object
|
| + // "first" device is rediscovered 300 seconds later. We pass a device object
|
| // with a newer discovery time so it is not pruned immediately.
|
| - registry_->set_time(discovery_times[2]);
|
| + AdvanceTime(TimeDelta::FromSeconds(300));
|
| + DialDeviceData rediscovered_device = first_device_;
|
| + rediscovered_device.set_response_time(Now());
|
| +
|
| registry_->DoDiscovery();
|
| registry_->OnDiscoveryRequest(nullptr);
|
| registry_->OnDeviceDiscovered(nullptr, rediscovered_device);
|
| @@ -257,16 +293,13 @@ TEST_F(DialRegistryTest, TestExpiredDeviceIsRediscovered) {
|
| }
|
|
|
| TEST_F(DialRegistryTest, TestRemovingListenerDoesNotClearList) {
|
| - DialRegistry::DeviceList expected_list2;
|
| - expected_list2.push_back(first_device_);
|
| - expected_list2.push_back(second_device_);
|
| -
|
| InSequence s;
|
| EXPECT_CALL(registry_->mock_service(),
|
| AddObserver(A<DialService::Observer*>()));
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| EXPECT_CALL(mock_observer_, OnDialDeviceEvent(empty_list_));
|
| - EXPECT_CALL(mock_observer_, OnDialDeviceEvent(expected_list2));
|
| + EXPECT_CALL(mock_observer_,
|
| + OnDialDeviceEvent(list_with_first_second_devices_));
|
| EXPECT_CALL(registry_->mock_service(),
|
| RemoveObserver(A<DialService::Observer*>()));
|
|
|
| @@ -282,7 +315,8 @@ TEST_F(DialRegistryTest, TestRemovingListenerDoesNotClearList) {
|
| EXPECT_CALL(registry_->mock_service(),
|
| AddObserver(A<DialService::Observer*>()));
|
| EXPECT_CALL(registry_->mock_service(), Discover());
|
| - EXPECT_CALL(mock_observer_, OnDialDeviceEvent(expected_list2));
|
| + EXPECT_CALL(mock_observer_,
|
| + OnDialDeviceEvent(list_with_first_second_devices_));
|
| EXPECT_CALL(registry_->mock_service(),
|
| RemoveObserver(A<DialService::Observer*>()));
|
|
|
|
|