apmanager: add ProcessFactory for better unittesting

Use ProcessMock instead of real process when starting hostapd and
dnsmasq during unittest.

BUG=chromium:431759
TEST=USE="asan clang" FEATURES=test emerge-$BOARD apmanager
     Start AP service using apmanager and verify client can connect
     to it.

Change-Id: Ifea32a2dd08247db9ea4306ecef5947b305a3c8d
Reviewed-on: https://chromium-review.googlesource.com/239975
Trybot-Ready: Zeping Qiu <zqiu@chromium.org>
Tested-by: Zeping Qiu <zqiu@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Commit-Queue: Zeping Qiu <zqiu@chromium.org>
diff --git a/dhcp_server.cc b/dhcp_server.cc
index 99c74d3..1b3bcf2 100644
--- a/dhcp_server.cc
+++ b/dhcp_server.cc
@@ -33,7 +33,8 @@
       interface_name_(interface_name),
       server_address_(shill::IPAddress::kFamilyIPv4),
       rtnl_handler_(shill::RTNLHandler::GetInstance()),
-      file_writer_(FileWriter::GetInstance()) {}
+      file_writer_(FileWriter::GetInstance()),
+      process_factory_(ProcessFactory::GetInstance()) {}
 
 DHCPServer::~DHCPServer() {
   if (dnsmasq_process_) {
@@ -73,9 +74,8 @@
       shill::IPAddress(shill::IPAddress::kFamilyIPv4));
   rtnl_handler_->SetInterfaceFlags(interface_index, IFF_UP, IFF_UP);
 
-  // TODO(zqiu): use ProcessFactory for better unit testing.
   // Start a dnsmasq process.
-  dnsmasq_process_.reset(new chromeos::ProcessImpl());
+  dnsmasq_process_.reset(process_factory_->CreateProcess());
   dnsmasq_process_->AddArg(kDnsmasqPath);
   dnsmasq_process_->AddArg(base::StringPrintf("--conf-file=%s",
                                               file_name.c_str()));