arc: Move platform2/arc/network/ to platform2/patchpanel

Next step in the arc-networkd -> patchpanel rename, this patch moves the
location of the code.

BUG=b:151879931
TEST=units,flashed image to atlas
TEST=tasts arc.PlayStore, crostini.LaunchTerminal.download

Change-Id: I1b5cf8d670e1631d46f6449b725395157bf88dde
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2115863
Tested-by: Garrick Evans <garrick@chromium.org>
Commit-Queue: Garrick Evans <garrick@chromium.org>
Reviewed-by: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: Eric Caruso <ejcaruso@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Reviewed-by: Hugo Benichi <hugobenichi@google.com>
diff --git a/patchpanel/client_test.cc b/patchpanel/client_test.cc
new file mode 100644
index 0000000..5be67c1
--- /dev/null
+++ b/patchpanel/client_test.cc
@@ -0,0 +1,74 @@
+// Copyright 2020 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 "patchpanel/client.h"
+
+#include <chromeos/dbus/service_constants.h>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <dbus/message.h>
+#include <dbus/object_path.h>
+#include <dbus/mock_bus.h>
+#include <dbus/mock_object_proxy.h>
+
+#include "patchpanel/net_util.h"
+
+namespace patchpanel {
+
+using ::testing::_;
+using ::testing::ByMove;
+using ::testing::Return;
+
+namespace {
+
+scoped_refptr<dbus::MockBus> MockDBus() {
+  return new dbus::MockBus{dbus::Bus::Options{}};
+}
+
+scoped_refptr<dbus::MockObjectProxy> PatchPanelMockProxy(dbus::MockBus* dbus) {
+  return new dbus::MockObjectProxy(dbus, kPatchPanelServiceName,
+                                   dbus::ObjectPath(kPatchPanelServicePath));
+}
+
+}  // namespace
+
+TEST(ClientTest, ConnectNamespace) {
+  auto dbus = MockDBus();
+  auto proxy = PatchPanelMockProxy(dbus.get());
+  pid_t pid = 3456;
+  std::string outboud_ifname = "";
+
+  Client client(dbus, proxy.get());
+
+  // Failure case
+  auto result = client.ConnectNamespace(pid, outboud_ifname, false);
+  EXPECT_FALSE(result.first.is_valid());
+  EXPECT_TRUE(result.second.ifname().empty());
+  EXPECT_EQ(0, result.second.ipv4_subnet().base_addr());
+  EXPECT_EQ(0, result.second.ipv4_subnet().prefix_len());
+  EXPECT_EQ(0, result.second.ipv4_address());
+
+  // Success case
+  patchpanel::ConnectNamespaceResponse response_proto;
+  response_proto.set_ifname("arc_ns0");
+  auto* response_subnet = response_proto.mutable_ipv4_subnet();
+  response_subnet->set_prefix_len(30);
+  response_subnet->set_base_addr(Ipv4Addr(100, 115, 92, 128));
+  response_proto.set_ipv4_address(Ipv4Addr(100, 115, 92, 130));
+  std::unique_ptr<dbus::Response> response = dbus::Response::CreateEmpty();
+  dbus::MessageWriter response_writer(response.get());
+  response_writer.AppendProtoAsArrayOfBytes(response_proto);
+  EXPECT_CALL(*proxy, CallMethodAndBlock(_, _))
+      .WillOnce(Return(ByMove(std::move(response))));
+
+  result = client.ConnectNamespace(pid, outboud_ifname, false);
+  EXPECT_TRUE(result.first.is_valid());
+  EXPECT_EQ("arc_ns0", result.second.ifname());
+  EXPECT_EQ(30, result.second.ipv4_subnet().prefix_len());
+  EXPECT_EQ(Ipv4Addr(100, 115, 92, 128),
+            result.second.ipv4_subnet().base_addr());
+  EXPECT_EQ(Ipv4Addr(100, 115, 92, 130), result.second.ipv4_address());
+}
+
+}  // namespace patchpanel