Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / mdns / dns_sd_registry_unittest.cc
index ee9bbe5..de44197 100644 (file)
@@ -5,7 +5,6 @@
 #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"
 
@@ -14,15 +13,15 @@ namespace extensions {
 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];
@@ -40,11 +39,11 @@ class TestDnsSdRegistry : public DnsSdRegistry {
   }
 
  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;
@@ -66,9 +65,9 @@ class MockDnsSdObserver : public DnsSdRegistry::DnsSdObserver {
 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_);
   }
@@ -201,5 +200,38 @@ TEST_F(DnsSdRegistryTest, FlushCache) {
   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