#include "chrome/browser/extensions/api/mdns/dns_sd_registry.h"
#include "chrome/browser/extensions/api/mdns/dns_sd_delegate.h"
#include "chrome/browser/extensions/api/mdns/dns_sd_device_lister.h"
-#include "chrome/browser/local_discovery/service_discovery_host_client.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
class MockDnsSdDeviceLister : public DnsSdDeviceLister {
public:
MockDnsSdDeviceLister() : DnsSdDeviceLister(NULL, NULL, "") {}
- virtual ~MockDnsSdDeviceLister() {}
+ ~MockDnsSdDeviceLister() override {}
- virtual void Discover(bool force_update) OVERRIDE {}
+ void Discover(bool force_update) override {}
};
class TestDnsSdRegistry : public DnsSdRegistry {
public:
TestDnsSdRegistry() : DnsSdRegistry(NULL), delegate_(NULL) {}
- virtual ~TestDnsSdRegistry() {}
+ ~TestDnsSdRegistry() override {}
MockDnsSdDeviceLister* GetListerForService(const std::string& service_type) {
return listers_[service_type];
}
protected:
- virtual DnsSdDeviceLister* CreateDnsSdDeviceLister(
+ DnsSdDeviceLister* CreateDnsSdDeviceLister(
DnsSdDelegate* delegate,
const std::string& service_type,
local_discovery::ServiceDiscoverySharedClient* discovery_client)
- OVERRIDE {
+ override {
delegate_ = delegate;
MockDnsSdDeviceLister* lister = new MockDnsSdDeviceLister();
listers_[service_type] = lister;
class DnsSdRegistryTest : public testing::Test {
public:
DnsSdRegistryTest() {}
- virtual ~DnsSdRegistryTest() {}
+ ~DnsSdRegistryTest() override {}
- virtual void SetUp() OVERRIDE {
+ void SetUp() override {
registry_.reset(new TestDnsSdRegistry());
registry_->AddObserver(&observer_);
}
registry_->GetDelegate()->ServicesFlushed(service_type);
}
+// Tests receiving an update from the DnsSdDelegate that does not change the
+// service object does not notify the observer.
+TEST_F(DnsSdRegistryTest, UpdateOnlyIfChanged) {
+ const std::string service_type = "_testing._tcp.local";
+ const std::string ip_address = "192.168.0.100";
+
+ DnsSdService service;
+ service.service_name = "_myDevice." + service_type;
+ service.ip_address = ip_address;
+
+ DnsSdRegistry::DnsSdServiceList service_list;
+ EXPECT_CALL(observer_, OnDnsSdEvent(service_type, service_list));
+
+ // Expect service_list with initial service.
+ service_list.push_back(service);
+ EXPECT_CALL(observer_, OnDnsSdEvent(service_type, service_list));
+
+ // Expect service_list with updated service.
+ service_list.clear();
+ service.ip_address = "192.168.0.101";
+ service_list.push_back(service);
+ EXPECT_CALL(observer_, OnDnsSdEvent(service_type, service_list));
+ // No more calls to observer_.
+
+ registry_->RegisterDnsSdListener(service_type);
+ service.ip_address = "192.168.0.100";
+ registry_->GetDelegate()->ServiceChanged(service_type, true, service);
+ // Update with changed ip address.
+ service.ip_address = "192.168.0.101";
+ registry_->GetDelegate()->ServiceChanged(service_type, false, service);
+ // Update with no changes to the service.
+ registry_->GetDelegate()->ServiceChanged(service_type, false, service);
+}
} // namespace extensions