1 /*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <string>
16
17 #include <gtest/gtest.h>
18
19 #include "ipc_unix_socket.h"
20
21 using namespace testing::ext;
22
23 namespace OHOS {
24 namespace Developtools {
25 namespace Hiebpf {
26 class IpcUnicSocketTest : public ::testing::Test {
27 public:
SetUpTestCase()28 static void SetUpTestCase() {};
TearDownTestCase()29 static void TearDownTestCase() {};
30
SetUp()31 void SetUp() {}
TearDown()32 void TearDown() {}
33
34 const std::string TEST_PATH_NAME = "/data/test/unix_socket_hiebpf";
35 };
36
37 /**
38 * @tc.name: ServerStartStop
39 * @tc.desc: Test framework
40 * @tc.type: FUNC
41 */
HWTEST_F(IpcUnicSocketTest, ServerStartStop, TestSize.Level1)42 HWTEST_F(IpcUnicSocketTest, ServerStartStop, TestSize.Level1)
43 {
44 IpcUnixSocketServer server;
45 ASSERT_TRUE(server.Start(TEST_PATH_NAME));
46 sleep(2);
47 ASSERT_TRUE(server.Stop());
48 }
49
HWTEST_F(IpcUnicSocketTest, ClientConnectFailed, TestSize.Level1)50 HWTEST_F(IpcUnicSocketTest, ClientConnectFailed, TestSize.Level1)
51 {
52 IpcUnixSocketClient client;
53 ASSERT_FALSE(client.Connect(TEST_PATH_NAME));
54 }
55
HWTEST_F(IpcUnicSocketTest, ServerClientCommunicate, TestSize.Level1)56 HWTEST_F(IpcUnicSocketTest, ServerClientCommunicate, TestSize.Level1)
57 {
58 IpcUnixSocketServer server;
59 ASSERT_TRUE(server.Start(TEST_PATH_NAME));
60
61 IpcUnixSocketClient client;
62 ASSERT_TRUE(client.Connect(TEST_PATH_NAME));
63 std::string cmd = "test command";
64 ASSERT_TRUE(client.SendMessage(cmd.data(), cmd.size()));
65 const int bufSize = 1024;
66 std::string buf;
67 size_t size = bufSize;
68 buf.resize(size);
69 const uint32_t timeout = 1000;
70 ASSERT_TRUE(client.RecvMessage(buf.data(), size, timeout));
71 ASSERT_EQ(size, 0);
72
73 size = bufSize;
74 server.SetHandleCallback([&](const void *buf, size_t size) {
75 server.SendMessage(buf, size);
76 });
77 ASSERT_TRUE(client.SendMessage(cmd.data(), cmd.size()));
78 ASSERT_TRUE(client.RecvMessage(buf.data(), size, timeout));
79 buf.resize(size);
80 ASSERT_EQ(buf, cmd);
81
82 client.Disconnect();
83 ASSERT_TRUE(server.Stop());
84 }
85
HWTEST_F(IpcUnicSocketTest, ServerClientException, TestSize.Level1)86 HWTEST_F(IpcUnicSocketTest, ServerClientException, TestSize.Level1)
87 {
88 IpcUnixSocketServer server;
89 std::string cmd = "test command";
90 ASSERT_FALSE(server.SendMessage(cmd.data(), cmd.size()));
91
92 ASSERT_TRUE(server.Start(TEST_PATH_NAME));
93 ASSERT_FALSE(server.Start(TEST_PATH_NAME));
94
95 IpcUnixSocketClient client;
96 ASSERT_FALSE(client.SendMessage(cmd.data(), cmd.size()));
97 const uint32_t timeout = 1000;
98 const int bufSize = 1024;
99 size_t size = bufSize;
100 std::string buf;
101 buf.resize(size);
102 ASSERT_FALSE(client.RecvMessage(buf.data(), size, timeout));
103 ASSERT_TRUE(client.Connect(TEST_PATH_NAME));
104 ASSERT_FALSE(client.Connect(TEST_PATH_NAME));
105 }
106 } // namespace Hiebpf
107 } // namespace Developtools
108 } // namespace OHOS
109