shill: Implement DHCPConfig::ReleaseIP

Also, add some unit tests, and some cleanup.

BUG=chromium-os:16365,chromium-os:16013
TEST=unit tests

Change-Id: I896bce08c6f177c9d5f6c5772c9208e8223c39df
Reviewed-on: http://gerrit.chromium.org/gerrit/2486
Reviewed-by: Chris Masone <cmasone@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/dhcp_provider_unittest.cc b/dhcp_provider_unittest.cc
new file mode 100644
index 0000000..e36643a
--- /dev/null
+++ b/dhcp_provider_unittest.cc
@@ -0,0 +1,45 @@
+// Copyright (c) 2011 The Chromium OS 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 "shill/dhcp_provider.h"
+#include "shill/mock_control.h"
+#include "shill/mock_device.h"
+#include "shill/mock_glib.h"
+
+using testing::Test;
+
+namespace shill {
+
+namespace {
+const char kDeviceName[] = "testdevicename";
+}  // namespace {}
+
+class DHCPProviderTest : public Test {
+ public:
+  DHCPProviderTest()
+      : device_(new MockDevice(&control_interface_,
+                               NULL,
+                               NULL,
+                               kDeviceName,
+                               0)),
+        provider_(DHCPProvider::GetInstance()) {
+    provider_->glib_ = &glib_;
+  }
+
+ protected:
+  MockGLib glib_;
+  MockControl control_interface_;
+  scoped_refptr<MockDevice> device_;
+  DHCPProvider *provider_;
+};
+
+TEST_F(DHCPProviderTest, CreateConfig) {
+  DHCPConfigRefPtr config = provider_->CreateConfig(device_);
+  EXPECT_TRUE(config.get());
+  EXPECT_EQ(&glib_, config->glib_);
+  EXPECT_EQ(kDeviceName, config->GetDeviceName());
+  EXPECT_TRUE(provider_->configs_.empty());
+}
+
+}  // namespace shill