shill: Start a mockable GLib interface.
Use the interface to test DHCPConfig::Start.
BUG=chromium-os:16319,chromium-os:16013
TEST=unit test, tested on device
Change-Id: Ice6c65b0cc2ac2dd738cb6aacb426703cce48a3f
Reviewed-on: http://gerrit.chromium.org/gerrit/2356
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Chris Masone <cmasone@chromium.org>
diff --git a/dhcp_config.cc b/dhcp_config.cc
index 9ca6eed..13d9325 100644
--- a/dhcp_config.cc
+++ b/dhcp_config.cc
@@ -7,10 +7,10 @@
#include <arpa/inet.h>
#include <base/logging.h>
-#include <glib.h>
#include "shill/dhcpcd_proxy.h"
#include "shill/dhcp_provider.h"
+#include "shill/glib_interface.h"
using std::string;
using std::vector;
@@ -28,10 +28,13 @@
const char DHCPConfig::kDHCPCDPath[] = "/sbin/dhcpcd";
-DHCPConfig::DHCPConfig(DHCPProvider *provider, DeviceConstRefPtr device)
+DHCPConfig::DHCPConfig(DHCPProvider *provider,
+ DeviceConstRefPtr device,
+ GLibInterface *glib)
: IPConfig(device),
provider_(provider),
- pid_(0) {
+ pid_(0),
+ glib_(glib) {
VLOG(2) << __func__ << ": " << GetDeviceName();
}
@@ -91,20 +94,20 @@
envp[0] = NULL;
GPid pid = 0;
- if (!g_spawn_async(NULL,
- argv,
- envp,
- G_SPAWN_DO_NOT_REAP_CHILD,
- NULL,
- NULL,
- &pid,
- NULL)) {
+ if (!glib_->SpawnAsync(NULL,
+ argv,
+ envp,
+ G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL,
+ NULL,
+ &pid,
+ NULL)) {
LOG(ERROR) << "Unable to spawn " << kDHCPCDPath;
return false;
}
pid_ = pid;
LOG(INFO) << "Spawned " << kDHCPCDPath << " with pid: " << pid_;
- provider_->BindPID(pid_, DHCPConfigRefPtr(this));
+ provider_->BindPID(pid_, this);
// TODO(petkov): Add an exit watch to cleanup w/ g_spawn_close_pid.
return true;
}
@@ -140,9 +143,7 @@
return false;
}
} else if (key == kConfigurationKeyRouters) {
- vector<unsigned int> routers;
- DBus::MessageIter reader = value.reader();
- reader >> routers;
+ vector<unsigned int> routers = value.operator vector<unsigned int>();
if (routers.empty()) {
LOG(ERROR) << "No routers provided.";
return false;
@@ -152,10 +153,7 @@
return false;
}
} else if (key == kConfigurationKeyDNS) {
- vector<unsigned int> servers;
- DBus::MessageIter reader = value.reader();
- reader >> servers;
- vector<string> dns_servers;
+ vector<unsigned int> servers = value.operator vector<unsigned int>();
for (vector<unsigned int>::const_iterator it = servers.begin();
it != servers.end(); ++it) {
string server = GetIPv4AddressString(*it);
@@ -167,8 +165,7 @@
} else if (key == kConfigurationKeyDomainName) {
properties->domain_name = value.reader().get_string();
} else if (key == kConfigurationKeyDomainSearch) {
- DBus::MessageIter reader = value.reader();
- reader >> properties->domain_search;
+ properties->domain_search = value.operator vector<string>();
} else if (key == kConfigurationKeyMTU) {
int mtu = value.reader().get_uint16();
if (mtu >= 576) {