blob: 51e26935fc1ce29f42ee8ad37b9f9b5310e78867 [file] [log] [blame]
Hugo Benichicc6850f2020-01-17 13:26:06 +09001// Copyright 2020 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "arc/network/client.h"
6
7#include <chromeos/dbus/service_constants.h>
8#include <gmock/gmock.h>
9#include <gtest/gtest.h>
10#include <dbus/message.h>
11#include <dbus/object_path.h>
12#include <dbus/mock_bus.h>
13#include <dbus/mock_object_proxy.h>
14
15#include "arc/network/net_util.h"
16
17namespace patchpanel {
18
19using ::arc_networkd::Ipv4Addr;
20using ::testing::_;
21using ::testing::ByMove;
22using ::testing::Return;
23
24namespace {
25
26scoped_refptr<dbus::MockBus> MockDBus() {
27 return new dbus::MockBus{dbus::Bus::Options{}};
28}
29
30scoped_refptr<dbus::MockObjectProxy> PatchPanelMockProxy(dbus::MockBus* dbus) {
31 return new dbus::MockObjectProxy(dbus, kPatchPanelServiceName,
32 dbus::ObjectPath(kPatchPanelServicePath));
33}
34
35} // namespace
36
37TEST(ClientTest, ConnectNamespace) {
38 auto dbus = MockDBus();
39 auto proxy = PatchPanelMockProxy(dbus.get());
40 pid_t pid = 3456;
41 std::string outboud_ifname = "";
42
43 Client client(dbus, proxy.get());
44
45 // Failure case
46 auto result = client.ConnectNamespace(pid, outboud_ifname, false);
47 EXPECT_FALSE(result.first.is_valid());
48 EXPECT_TRUE(result.second.ifname().empty());
49 EXPECT_EQ(0, result.second.ipv4_subnet().base_addr());
50 EXPECT_EQ(0, result.second.ipv4_subnet().prefix_len());
51 EXPECT_EQ(0, result.second.ipv4_address());
52
53 // Success case
54 patchpanel::ConnectNamespaceResponse response_proto;
55 response_proto.set_ifname("arc_ns0");
56 auto* response_subnet = response_proto.mutable_ipv4_subnet();
57 response_subnet->set_prefix_len(30);
58 response_subnet->set_base_addr(Ipv4Addr(100, 115, 92, 128));
59 response_proto.set_ipv4_address(Ipv4Addr(100, 115, 92, 130));
60 std::unique_ptr<dbus::Response> response = dbus::Response::CreateEmpty();
61 dbus::MessageWriter response_writer(response.get());
62 response_writer.AppendProtoAsArrayOfBytes(response_proto);
63 EXPECT_CALL(*proxy, CallMethodAndBlock(_, _))
64 .WillOnce(Return(ByMove(std::move(response))));
65
66 result = client.ConnectNamespace(pid, outboud_ifname, false);
67 EXPECT_TRUE(result.first.is_valid());
68 EXPECT_EQ("arc_ns0", result.second.ifname());
69 EXPECT_EQ(30, result.second.ipv4_subnet().prefix_len());
70 EXPECT_EQ(Ipv4Addr(100, 115, 92, 128),
71 result.second.ipv4_subnet().base_addr());
72 EXPECT_EQ(Ipv4Addr(100, 115, 92, 130), result.second.ipv4_address());
73}
74
75} // namespace patchpanel