1 /*
2 * Copyright (c) 2025 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
18 #include "account_manager_adapter.h"
19 #include "avsession_users_manager.h"
20 #include "isession_listener.h"
21
22 using namespace testing::ext;
23 using namespace OHOS::AVSession;
24
25 namespace OHOS {
26 namespace AVSession {
27
28 class AVSessionUsersManagerTest : public testing::Test {
29 public:
30 static void SetUpTestCase(void);
31 static void TearDownTestCase(void);
32 void SetUp();
33 void TearDown();
34 };
35
SetUpTestCase()36 void AVSessionUsersManagerTest::SetUpTestCase() {}
37
TearDownTestCase()38 void AVSessionUsersManagerTest::TearDownTestCase() {}
39
SetUp()40 void AVSessionUsersManagerTest::SetUp() {}
41
TearDown()42 void AVSessionUsersManagerTest::TearDown() {}
43
44 class ISessionListenerMock : public ISessionListener {
45 public:
OnSessionCreate(const AVSessionDescriptor & descriptor)46 ErrCode OnSessionCreate(const AVSessionDescriptor& descriptor) override{ return AVSESSION_SUCCESS; };
OnSessionRelease(const AVSessionDescriptor & descriptor)47 ErrCode OnSessionRelease(const AVSessionDescriptor& descriptor) override { return AVSESSION_SUCCESS; };
OnTopSessionChange(const AVSessionDescriptor & descriptor)48 ErrCode OnTopSessionChange(const AVSessionDescriptor& descriptor) override { return AVSESSION_SUCCESS; };
OnAudioSessionChecked(const int32_t uid)49 ErrCode OnAudioSessionChecked(const int32_t uid) override { return AVSESSION_SUCCESS; };
OnDeviceAvailable(const OutputDeviceInfo & castOutputDeviceInfo)50 ErrCode OnDeviceAvailable(const OutputDeviceInfo& castOutputDeviceInfo) override { return AVSESSION_SUCCESS; };
OnDeviceLogEvent(const int32_t eventId,const int64_t param)51 ErrCode OnDeviceLogEvent(
52 const int32_t eventId, const int64_t param) override { return AVSESSION_SUCCESS; };
OnDeviceOffline(const std::string & deviceId)53 ErrCode OnDeviceOffline(const std::string& deviceId) override { return AVSESSION_SUCCESS; };
OnDeviceStateChange(const DeviceState & deviceState)54 ErrCode OnDeviceStateChange(const DeviceState& deviceState) override { return AVSESSION_SUCCESS; };
OnRemoteDistributedSessionChange(const std::vector<OHOS::sptr<IRemoteObject>> & sessionControllers)55 ErrCode OnRemoteDistributedSessionChange(
56 const std::vector<OHOS::sptr<IRemoteObject>>& sessionControllers) override { return AVSESSION_SUCCESS; };
AsObject()57 OHOS::sptr<IRemoteObject> AsObject() override { return nullptr; };
58 };
59
60 HWTEST_F(AVSessionUsersManagerTest, HandleUserRemoved001, TestSize.Level0)
61 {
62 auto& manager = AVSessionUsersManager::GetInstance();
63 int32_t userId = 0;
64 manager.HandleUserRemoved(userId);
65 EXPECT_TRUE(manager.sessionStackMapByUserId_.size() == 0);
66 }
67
68 HWTEST_F(AVSessionUsersManagerTest, HandleUserRemoved002, TestSize.Level0)
69 {
70 auto& manager = AVSessionUsersManager::GetInstance();
71 int32_t userId = 0;
72 std::shared_ptr<SessionStack> stack = std::make_shared<SessionStack>();
73 manager.sessionStackMapByUserId_.insert({userId, stack});
74 manager.HandleUserRemoved(userId);
75 EXPECT_TRUE(manager.sessionStackMapByUserId_.size() == 0);
76 }
77
78 HWTEST_F(AVSessionUsersManagerTest, HandleUserRemoved003, TestSize.Level0)
79 {
80 auto& manager = AVSessionUsersManager::GetInstance();
81 int32_t userId = 0;
82 std::shared_ptr<SessionStack> stack = std::make_shared<SessionStack>();
83 manager.sessionStackMapByUserId_.insert({userId, stack});
84 manager.frontSessionListMapByUserId_.insert({userId, std::make_shared<std::list<OHOS::sptr<AVSessionItem>>>()});
85 manager.sessionListenersMapByUserId_.insert({userId, std::map<pid_t, OHOS::sptr<ISessionListener>>()});
86 manager.topSessionsMapByUserId_.insert({userId, OHOS::sptr<AVSessionItem>(nullptr)});
87 manager.HandleUserRemoved(userId);
88 EXPECT_TRUE(manager.sessionStackMapByUserId_.size() == 0);
89 }
90
91 HWTEST_F(AVSessionUsersManagerTest, AddSessionListener001, TestSize.Level0)
92 {
93 auto& manager = AVSessionUsersManager::GetInstance();
94 pid_t pid = 0;
95 OHOS::sptr<ISessionListener> listener = new ISessionListenerMock();
96 manager.sessionListenersMapByUserId_.clear();
97 manager.AddSessionListener(pid, listener);
98 auto iterForListenerMap = manager.sessionListenersMapByUserId_.find(manager.curUserId_);
99 EXPECT_TRUE(iterForListenerMap != manager.sessionListenersMapByUserId_.end());
100 }
101
102 HWTEST_F(AVSessionUsersManagerTest, RemoveSessionListener001, TestSize.Level0)
103 {
104 auto& manager = AVSessionUsersManager::GetInstance();
105 pid_t pid = 0;
106 OHOS::sptr<ISessionListener> listener = new ISessionListenerMock();
107 std::map<pid_t, OHOS::sptr<ISessionListener>> listenerMap;
108 listenerMap.insert({pid, listener});
109 int32_t userId = 0;
110 manager.sessionListenersMapByUserId_.insert({userId, listenerMap});
111 manager.sessionListenersMap_[pid] = listener;
112 manager.RemoveSessionListener(pid);
113 EXPECT_TRUE(manager.sessionListenersMapByUserId_.size() > 0);
114 }
115
116 HWTEST_F(AVSessionUsersManagerTest, GetContainerFromUser001, TestSize.Level0)
117 {
118 auto& manager = AVSessionUsersManager::GetInstance();
119 int32_t userId = 0;
120 manager.sessionStackMapByUserId_.insert({userId, nullptr});
121 manager.GetContainerFromUser(userId);
122 auto iter = manager.sessionStackMapByUserId_.find(userId);
123 EXPECT_TRUE(iter != manager.sessionStackMapByUserId_.end());
124 }
125
126 HWTEST_F(AVSessionUsersManagerTest, GetDirForCurrentUser001, TestSize.Level0)
127 {
128 auto& manager = AVSessionUsersManager::GetInstance();
129 manager.curUserId_ = -1;
130 int32_t userId = 0;
131 std::string ret = manager.GetDirForCurrentUser(userId);
132 EXPECT_TRUE(ret == "/data/service/el2/public/av_session/");
133 }
134
135 HWTEST_F(AVSessionUsersManagerTest, Init001, TestSize.Level0)
136 {
137 int32_t userId = 1;
138 AVSessionUsersManager::GetInstance().Init();
139 for (const auto& listener : AccountManagerAdapter::GetInstance().accountEventsListenerList_) {
140 if (listener) {
141 listener(AccountManagerAdapter::accountEventSwitched, userId);
142 }
143 }
144 EXPECT_EQ(AVSessionUsersManager::GetInstance().curUserId_, userId);
145 }
146
147 HWTEST_F(AVSessionUsersManagerTest, Init002, TestSize.Level0)
148 {
149 int32_t userId = 1;
150 int32_t newUserId = 100;
151 AVSessionUsersManager::GetInstance().Init();
152 for (const auto& listener : AccountManagerAdapter::GetInstance().accountEventsListenerList_) {
153 if (listener) {
154 listener(AccountManagerAdapter::accountEventRemoved, userId);
155 }
156 }
157 EXPECT_EQ(AVSessionUsersManager::GetInstance().curUserId_, newUserId);
158 }
159
160 HWTEST_F(AVSessionUsersManagerTest, Init003, TestSize.Level0)
161 {
162 int32_t userId = 100;
163 AVSessionUsersManager::GetInstance().Init();
164 for (const auto& listener : AccountManagerAdapter::GetInstance().accountEventsListenerList_) {
165 if (listener) {
166 listener("other", 1);
167 }
168 }
169 EXPECT_EQ(AVSessionUsersManager::GetInstance().curUserId_, userId);
170 }
171
172 HWTEST_F(AVSessionUsersManagerTest, Init004, TestSize.Level0)
173 {
174 int32_t userId = 1;
175 AVSessionUsersManager::GetInstance().Init();
176 AVSessionUsersManager::GetInstance().aliveUsers_.push_back(userId);
177 for (const auto& listener : AccountManagerAdapter::GetInstance().accountEventsListenerList_) {
178 if (listener) {
179 listener(AccountManagerAdapter::accountEventSwitched, userId);
180 }
181 }
182 EXPECT_EQ(AVSessionUsersManager::GetInstance().curUserId_, userId);
183 }
184
185 HWTEST_F(AVSessionUsersManagerTest, GetCurSessionListForKeyEvent001, TestSize.Level0)
186 {
187 int32_t userId = 1;
188 AVSessionUsersManager::GetInstance().GetCurSessionListForKeyEvent(userId);
189 EXPECT_EQ(AVSessionUsersManager::GetInstance().curUserId_, userId);
190 }
191
192 HWTEST_F(AVSessionUsersManagerTest, UpdateSessionForCurrentUser001, TestSize.Level1)
193 {
194 auto& manager = AVSessionUsersManager::GetInstance();
195 AVSessionDescriptor descriptor;
196 descriptor.sessionId_ = "SessionId";
197 descriptor.userId_ = 0;
198 sptr<AVSessionItem> item = new(std::nothrow) AVSessionItem(descriptor, descriptor.userId_);
199 int32_t pid = 1;
200 std::string oldAbility = "oldAbilityName";
201 std::string newAbility = "newAbilityName";
202 auto res = manager.AddSessionForCurrentUser(pid, oldAbility, item);
203 EXPECT_EQ(res, 0);
204 res = manager.UpdateSessionForCurrentUser(pid, oldAbility, newAbility, item);
205 EXPECT_EQ(res, 0);
206
207 sptr<AVSessionItem> result;
208 result = manager.GetContainerFromAll().GetSession(pid, newAbility);
209 EXPECT_NE(result, nullptr);
210 }
211 } //AVSession
212 } //OHOS