1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
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 
16 #include <memory>
17 #include <unistd.h>
18 
19 #include "gtest/gtest.h"
20 #include "network/softbus/softbus_session_pool.h"
21 #include "utils_log.h"
22 
23 namespace OHOS {
24 namespace Storage {
25 namespace DistributedFile {
26 namespace Test {
27 using namespace testing::ext;
28 using namespace std;
29 
30 constexpr int SESSION_ID_ONE = 1;
31 constexpr int SESSION_ID_TWO = 2;
32 constexpr int UID_ONE = 1;
33 constexpr int UID_TWO = 2;
34 constexpr int32_t SESSION_COUNT = 10;
35 const string SESSION_NAME_PREFIX = "DistributedFileService";
36 
37 class SoftbusSessionPoolTest : public testing::Test {
38 public:
SetUpTestCase(void)39     static void SetUpTestCase(void) {};
TearDownTestCase(void)40     static void TearDownTestCase(void) {};
SetUp()41     void SetUp() {};
TearDown()42     void TearDown() {};
43 };
44 /**
45  * @tc.name: SoftbusSessionPoolTest_SessionInfo_0100
46  * @tc.desc: test SoftBusSessionPool function.
47  * @tc.type: FUNC
48  * @tc.require: I9JKYU
49  */
50 HWTEST_F(SoftbusSessionPoolTest, SoftbusSessionPoolTest_SessionInfo_0100, TestSize.Level1)
51 {
52     GTEST_LOG_(INFO) << "SoftbusSessionPoolTest_SessionInfo_0100 start";
53     string sessionName1 = "DistributedFileService0";
54     string sessionName2 = "DistributedFileService1";
55     SoftBusSessionPool::SessionInfo sessionInfo1{.sessionId = SESSION_ID_ONE,
56                                                  .srcUri = "file://com.demo.a/test/1",
57                                                  .dstPath = "/data/test/1",
58                                                  .uid = UID_ONE};
59     SoftBusSessionPool::SessionInfo sessionInfo2{.sessionId = SESSION_ID_TWO,
60                                                  .srcUri = "file://com.demo.a/test/2",
61                                                  .dstPath = "/data/test/2",
62                                                  .uid = UID_TWO};
63     string sessionName = SoftBusSessionPool::GetInstance().GenerateSessionName(sessionInfo1);
64     EXPECT_EQ(sessionName, sessionName1);
65     sessionName = SoftBusSessionPool::GetInstance().GenerateSessionName(sessionInfo2);
66     EXPECT_EQ(sessionName, sessionName2);
67     SoftBusSessionPool::SessionInfo sessionInfo;
68     bool flag = SoftBusSessionPool::GetInstance().GetSessionInfo(sessionName1, sessionInfo);
69     EXPECT_EQ(flag, true);
70     EXPECT_EQ(sessionInfo.sessionId, sessionInfo1.sessionId);
71     EXPECT_EQ(sessionInfo.dstPath, sessionInfo1.dstPath);
72     EXPECT_EQ(sessionInfo.srcUri, sessionInfo1.srcUri);
73     EXPECT_EQ(sessionInfo.uid, sessionInfo1.uid);
74     flag = SoftBusSessionPool::GetInstance().GetSessionInfo(sessionName2, sessionInfo);
75     EXPECT_EQ(flag, true);
76     EXPECT_EQ(sessionInfo.sessionId, sessionInfo2.sessionId);
77     EXPECT_EQ(sessionInfo.dstPath, sessionInfo2.dstPath);
78     EXPECT_EQ(sessionInfo.srcUri, sessionInfo2.srcUri);
79     EXPECT_EQ(sessionInfo.uid, sessionInfo2.uid);
80     SoftBusSessionPool::GetInstance().DeleteSessionInfo(sessionName1);
81     flag = SoftBusSessionPool::GetInstance().GetSessionInfo(sessionName1, sessionInfo);
82     EXPECT_EQ(flag, false);
83     SoftBusSessionPool::GetInstance().DeleteSessionInfo(sessionName2);
84     flag = SoftBusSessionPool::GetInstance().GetSessionInfo(sessionName2, sessionInfo);
85     EXPECT_EQ(flag, false);
86     GTEST_LOG_(INFO) << "SoftbusSessionPoolTest_SessionInfo_0100 end";
87 }
88 
89 /**
90  * @tc.name: SoftbusSessionPoolTest_GenerateSessionName_0100
91  * @tc.desc: test GenerateSessionName function.
92  * @tc.type: FUNC
93  * @tc.require: I9JKYU
94  */
95 HWTEST_F(SoftbusSessionPoolTest, SoftbusSessionPoolTest_GenerateSessionName_0100, TestSize.Level1)
96 {
97     GTEST_LOG_(INFO) << "SoftbusSessionPoolTest_GenerateSessionName_0100 start";
98     SoftBusSessionPool::SessionInfo sessionInfo;
99     string sessionName = SoftBusSessionPool::GetInstance().GenerateSessionName(sessionInfo);
100     EXPECT_EQ(sessionName, "DistributedFileService0");
101     SoftBusSessionPool::SessionInfo sessionInfo1{.sessionId = SESSION_ID_ONE,
102                                                  .srcUri = "file://com.demo.a/test/1",
103                                                  .dstPath = "/data/test/1",
104                                                  .uid = UID_ONE};
105     for (int32_t i = 1; i < SESSION_COUNT - 1; i++) {
106         std::string testName = std::string(SESSION_NAME_PREFIX) + std::to_string(i);
107         SoftBusSessionPool::GetInstance().AddSessionInfo(testName, sessionInfo1);
108     }
109 
110     sessionName = SoftBusSessionPool::GetInstance().GenerateSessionName(sessionInfo1);
111     EXPECT_EQ(sessionName, "DistributedFileService9");
112     SoftBusSessionPool::GetInstance().AddSessionInfo(sessionName, sessionInfo1);
113     sessionName = SoftBusSessionPool::GetInstance().GenerateSessionName(sessionInfo1);
114     EXPECT_EQ(sessionName, "");
115 
116     for (int32_t i = 0; i < SESSION_COUNT; i++) {
117         std::string testName = std::string(SESSION_NAME_PREFIX) + std::to_string(i);
118         SoftBusSessionPool::GetInstance().DeleteSessionInfo(testName);
119     }
120 
121     sessionName = SoftBusSessionPool::GetInstance().GenerateSessionName(sessionInfo1);
122     EXPECT_EQ(sessionName, "DistributedFileService0");
123     GTEST_LOG_(INFO) << "SoftbusSessionPoolTest_GenerateSessionName_0100 end";
124 }
125 } // namespace Test
126 } // namespace DistributedFile
127 } // namespace Storage
128 } // namespace OHOS
129