1 /*
2  * Copyright (c) 2023 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 <gtest/gtest.h>
17 #include "session_manager/include/extension_session_manager.h"
18 #include "session/host/include/extension_session.h"
19 #include "window_manager_hilog.h"
20 
21 using namespace testing;
22 using namespace testing::ext;
23 
24 namespace OHOS {
25 namespace Rosen {
26 class ExtensionSessionManagerTest : public testing::Test {
27 public:
28     static void SetUpTestCase();
29     static void TearDownTestCase();
30     void SetUp() override;
31     void TearDown() override;
32 private:
33     static constexpr uint32_t WAIT_SYNC_IN_NS = 200000;
34 };
35 
SetUpTestCase()36 void ExtensionSessionManagerTest::SetUpTestCase()
37 {
38 }
39 
TearDownTestCase()40 void ExtensionSessionManagerTest::TearDownTestCase()
41 {
42 }
43 
SetUp()44 void ExtensionSessionManagerTest::SetUp()
45 {
46 }
47 
TearDown()48 void ExtensionSessionManagerTest::TearDown()
49 {
50 }
51 
52 namespace {
53 /**
54  * @tc.name: RequestExtensionSession
55  * @tc.desc: RequestExtensionSession Test
56  * @tc.type: FUNC
57  */
58 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSession, Function | MediumTest | Level2)
59 {
60     SessionInfo sessionInfo;
61     sessionInfo.abilityName_ = "RequestExtensionSession";
62     ASSERT_NE(nullptr, ExtensionSessionManager::GetInstance().RequestExtensionSession(sessionInfo));
63 }
64 
65 /**
66  * @tc.name: RequestExtensionSessionActivation01
67  * @tc.desc: RequestExtensionSessionActivation Test
68  * @tc.type: FUNC
69  */
70 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionActivation01, Function | MediumTest | Level2)
71 {
72     SessionInfo info;
73     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
74     ASSERT_EQ(WSError::WS_OK,
75                 ExtensionSessionManager::GetInstance().RequestExtensionSessionBackground(extensionSession, nullptr));
76 }
77 
func(WSError we)78 void func(WSError we)
79 {}
80 
81 /**
82  * @tc.name: RequestExtensionSessionActivation02
83  * @tc.desc: RequestExtensionSessionActivation Test
84  * @tc.type: FUNC
85  */
86 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionActivation02, Function | MediumTest | Level2)
87 {
88     SessionInfo info;
89     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
90     ExtensionSessionManager *instance = &ExtensionSessionManager::GetInstance();
91     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionActivation(extensionSession, 1, nullptr));
92     usleep(WAIT_SYNC_IN_NS);
93 
94     instance->extensionSessionMap_[extensionSession->GetPersistentId()] = extensionSession;
95     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionActivation(extensionSession, 1, nullptr));
96     usleep(WAIT_SYNC_IN_NS);
97 
98     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionActivation(extensionSession, 1, (func)));
99     usleep(WAIT_SYNC_IN_NS);
100 }
101 
102 /**
103  * @tc.name: RequestExtensionSessionBackground01
104  * @tc.desc: RequestExtensionSessionBackground Test
105  * @tc.type: FUNC
106  */
107 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionBackground01, Function | MediumTest | Level2)
108 {
109     SessionInfo info;
110     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
111     ASSERT_EQ(WSError::WS_OK,
112                 ExtensionSessionManager::GetInstance().RequestExtensionSessionBackground(extensionSession, nullptr));
113 }
114 
115 /**
116  * @tc.name: RequestExtensionSessionBackground02
117  * @tc.desc: RequestExtensionSessionBackground Test
118  * @tc.type: FUNC
119  */
120 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionBackground02, Function | MediumTest | Level2)
121 {
122     SessionInfo info;
123     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
124     ExtensionSessionManager *instance = &ExtensionSessionManager::GetInstance();
125     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionBackground(extensionSession, nullptr));
126     usleep(WAIT_SYNC_IN_NS);
127 
128     instance->extensionSessionMap_[extensionSession->GetPersistentId()] = extensionSession;
129     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionBackground(extensionSession, nullptr));
130     usleep(WAIT_SYNC_IN_NS);
131 
132     instance->extensionSessionMap_[extensionSession->GetPersistentId()] = extensionSession;
133     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionBackground(extensionSession, func));
134     usleep(WAIT_SYNC_IN_NS);
135 }
136 
137 /**
138  * @tc.name: RequestExtensionSessionDestruction01
139  * @tc.desc: RequestExtensionSessionDestruction Test
140  * @tc.type: FUNC
141  */
142 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionDestruction01, Function | MediumTest | Level2)
143 {
144     SessionInfo info;
145     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
146     ASSERT_EQ(WSError::WS_OK,
147                 ExtensionSessionManager::GetInstance().RequestExtensionSessionDestruction(extensionSession, nullptr));
148 }
149 
150 /**
151  * @tc.name: RequestExtensionSessionDestructionDone01
152  * @tc.desc: RequestExtensionSessionDestructionDone Test
153  * @tc.type: FUNC
154  */
155 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionDestructionDone01, Function | MediumTest | Level2)
156 {
157     SessionInfo info;
158     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
159     ASSERT_EQ(WSError::WS_OK,
160               ExtensionSessionManager::GetInstance().RequestExtensionSessionDestructionDone(extensionSession));
161 }
162 
163 /**
164  * @tc.name: RequestExtensionSessionDestruction03
165  * @tc.desc: RequestExtensionSessionDestruction Test
166  * @tc.type: FUNC
167  */
168 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionDestruction03, Function | MediumTest | Level2)
169 {
170     SessionInfo info;
171     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
172     ExtensionSessionManager *instance = &ExtensionSessionManager::GetInstance();
173     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionDestruction(extensionSession, nullptr));
174     usleep(WAIT_SYNC_IN_NS);
175 
176     instance->extensionSessionMap_[extensionSession->GetPersistentId()] = extensionSession;
177     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionDestruction(extensionSession, nullptr));
178     usleep(WAIT_SYNC_IN_NS);
179 
180     instance->extensionSessionMap_[extensionSession->GetPersistentId()] = extensionSession;
181     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionDestruction(extensionSession, func));
182     usleep(WAIT_SYNC_IN_NS);
183 }
184 
185 /**
186  * @tc.name: RequestExtensionSessionDestructionDone03
187  * @tc.desc: RequestExtensionSessionDestructionDone Test
188  * @tc.type: FUNC
189  */
190 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionDestructionDone03, Function | MediumTest | Level2)
191 {
192     SessionInfo info;
193     sptr<ExtensionSession> extensionSession = new ExtensionSession(info);
194     ExtensionSessionManager* instance = &ExtensionSessionManager::GetInstance();
195     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionDestructionDone(extensionSession));
196     usleep(WAIT_SYNC_IN_NS);
197 
198     instance->extensionSessionMap_[extensionSession->GetPersistentId()] = extensionSession;
199     ASSERT_EQ(WSError::WS_OK, instance->RequestExtensionSessionDestructionDone(extensionSession));
200     usleep(WAIT_SYNC_IN_NS);
201 }
202 
203 /**
204  * @tc.name: GetInstance
205  * @tc.desc: ExtensionSessionManager get instance and init
206  * @tc.type: FUNC
207  */
208 HWTEST_F(ExtensionSessionManagerTest, GetInstance, Function | MediumTest | Level2)
209 {
210     ExtensionSessionManager *instance = &ExtensionSessionManager::GetInstance();
211     ASSERT_NE(nullptr, instance);
212 }
213 
214 /**
215  * @tc.name: SetAbilitySessionInfo
216  * @tc.desc: ExtensionSessionManager set ability session info
217  * @tc.type: FUNC
218  */
219 HWTEST_F(ExtensionSessionManagerTest, SetAbilitySessionInfo, Function | MediumTest | Level2)
220 {
221     AAFwk::Want want;
222     SessionInfo infoInput;
223     infoInput.want = std::make_shared<AAFwk::Want>(want);
224     sptr<ExtensionSession> extSession = new ExtensionSession(infoInput);
225     ExtensionSessionManager *instance = &ExtensionSessionManager::GetInstance();
226     sptr<AAFwk::SessionInfo> result = instance->SetAbilitySessionInfo(extSession);
227     int32_t persistentId = extSession->GetPersistentId();
228     ASSERT_EQ(result->persistentId, persistentId);
229 
230     result = instance->SetAbilitySessionInfo(extSession);
231     extSession->sessionInfo_.want = nullptr;
232     ASSERT_EQ(result->persistentId, persistentId);
233 }
234 
235 /**
236  * @tc.name: RequestExtensionSessionDestruction02
237  * @tc.desc: RequestExtensionSessionDestruction Test
238  * @tc.type: FUNC
239  */
240 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionDestruction02, Function | MediumTest | Level2)
241 {
242     AAFwk::Want want;
243     SessionInfo infoInput;
244     infoInput.want = std::make_shared<AAFwk::Want>(want);
245     sptr<ExtensionSession> extSession = nullptr;
246     ExtensionSessionManager *instance = &ExtensionSessionManager::GetInstance();
247     WSError result01 = instance->RequestExtensionSessionDestruction(extSession, nullptr);
248     EXPECT_EQ(result01, WSError::WS_OK);
249 }
250 
251 /**
252  * @tc.name: RequestExtensionSessionDestructionDone02
253  * @tc.desc: RequestExtensionSessionDestructionDone Test
254  * @tc.type: FUNC
255  */
256 HWTEST_F(ExtensionSessionManagerTest, RequestExtensionSessionDestructionDone02, Function | MediumTest | Level2)
257 {
258     AAFwk::Want want;
259     SessionInfo infoInput;
260     infoInput.want = std::make_shared<AAFwk::Want>(want);
261     sptr<ExtensionSession> extSession = nullptr;
262     ExtensionSessionManager* instance = &ExtensionSessionManager::GetInstance();
263     WSError result01 = instance->RequestExtensionSessionDestructionDone(extSession);
264     EXPECT_EQ(result01, WSError::WS_OK);
265 }
266 } // namespace
267 } // namespace Rosen
268 } // namespace OHOS
269