shill: teach dbus_adaptor (and appropriate subclasses) how
to clear properties

BUG=chromium-os:24814
TEST=new unit tests

Change-Id: Ifad5ad0ad6c00d906bade7e1293540a58ac15625
Reviewed-on: https://gerrit.chromium.org/gerrit/15291
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: mukesh agrawal <quiche@chromium.org>
diff --git a/device_unittest.cc b/device_unittest.cc
index c0c426b..8378f3f 100644
--- a/device_unittest.cc
+++ b/device_unittest.cc
@@ -120,6 +120,38 @@
   EXPECT_EQ(invalid_args(), error.name());
 }
 
+TEST_F(DeviceTest, ClearProperty) {
+  ::DBus::Error error;
+  EXPECT_TRUE(device_->powered());
+
+  EXPECT_TRUE(DBusAdaptor::DispatchOnType(device_->mutable_store(),
+                                          flimflam::kPoweredProperty,
+                                          PropertyStoreTest::kBoolV,
+                                          &error));
+  EXPECT_FALSE(device_->powered());
+
+  EXPECT_TRUE(DBusAdaptor::ClearProperty(device_->mutable_store(),
+                                         flimflam::kPoweredProperty,
+                                         &error));
+  EXPECT_TRUE(device_->powered());
+}
+
+TEST_F(DeviceTest, ClearReadOnlyProperty) {
+  ::DBus::Error error;
+  EXPECT_FALSE(DBusAdaptor::DispatchOnType(device_->mutable_store(),
+                                           flimflam::kAddressProperty,
+                                           PropertyStoreTest::kStringV,
+                                           &error));
+}
+
+TEST_F(DeviceTest, ClearReadOnlyDerivedProperty) {
+  ::DBus::Error error;
+  EXPECT_FALSE(DBusAdaptor::DispatchOnType(device_->mutable_store(),
+                                           flimflam::kIPConfigsProperty,
+                                           PropertyStoreTest::kStringsV,
+                                           &error));
+}
+
 TEST_F(DeviceTest, TechnologyIs) {
   EXPECT_FALSE(device_->TechnologyIs(Technology::kEthernet));
 }