1 /*
2  * Copyright (c) 2021-2022 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 "mock_ability_manager_service.h"
17 #include <gtest/gtest.h>
18 
19 #include <functional>
20 #include <memory>
21 #include <string>
22 #include <unistd.h>
23 
24 #include "session_info.h"
25 
26 using OHOS::AppExecFwk::ElementName;
27 
28 namespace OHOS {
29 namespace AAFwk {
MockAbilityManagerService()30 MockAbilityManagerService::MockAbilityManagerService() : abilityScheduler_(nullptr)
31 {
32     abilityScheduler_ = nullptr;
33 }
34 
~MockAbilityManagerService()35 MockAbilityManagerService::~MockAbilityManagerService()
36 {}
37 
StartAbility(const Want & want,int32_t userId,int requestCode)38 int MockAbilityManagerService::StartAbility(const Want& want, int32_t userId, int requestCode)
39 {
40     GTEST_LOG_(INFO) << "MockAbilityManagerService::StartAbility called";
41     curstate_ = AbilityLifeCycleState::ABILITY_STATE_INITIAL;
42     switch (requestCode) {
43         case AbilityLifeCycleState::ABILITY_STATE_INITIAL:
44             curstate_ = AbilityLifeCycleState::ABILITY_STATE_INITIAL;
45             break;
46         case AbilityLifeCycleState::ABILITY_STATE_INACTIVE:
47             curstate_ = AbilityLifeCycleState::ABILITY_STATE_INACTIVE;
48             break;
49         case AbilityLifeCycleState::ABILITY_STATE_ACTIVE:
50             curstate_ = AbilityLifeCycleState::ABILITY_STATE_ACTIVE;
51             break;
52         case AbilityLifeCycleState::ABILITY_STATE_BACKGROUND:
53             curstate_ = AbilityLifeCycleState::ABILITY_STATE_BACKGROUND;
54             break;
55         default:
56             break;
57     }
58 
59     if (abilityScheduler_ != nullptr) {
60         want_ = want;
61         want_.SetElementName("BundleName", "abilityName");
62         LifeCycleStateInfo stateInfo;
63         stateInfo.state = curstate_;
64         abilityScheduler_->ScheduleAbilityTransaction(want_, stateInfo);
65     }
66 
67     return 0;
68 }
69 
StartAbility(const Want & want,const sptr<IRemoteObject> & callerToken,int32_t userId,int requestCode)70 int MockAbilityManagerService::StartAbility(const Want& want, const sptr<IRemoteObject>& callerToken,
71     int32_t userId, int requestCode)
72 {
73     return 0;
74 }
75 
StartAbilityAsCaller(const Want & want,const sptr<IRemoteObject> & callerToken,sptr<IRemoteObject> asCallerSourceToken,int32_t userId,int requestCode)76 int MockAbilityManagerService::StartAbilityAsCaller(const Want& want, const sptr<IRemoteObject>& callerToken,
77     sptr<IRemoteObject> asCallerSourceToken, int32_t userId, int requestCode)
78 {
79     return 0;
80 }
81 
TerminateAbility(const sptr<IRemoteObject> & token,int resultCode,const Want * resultWant)82 int MockAbilityManagerService::TerminateAbility(
83     const sptr<IRemoteObject>& token, int resultCode, const Want* resultWant)
84 {
85     GTEST_LOG_(INFO) << "MockAbilityManagerService::TerminateAbility";
86 
87     if (abilityScheduler_ != nullptr) {
88         LifeCycleStateInfo stateInfo;
89         stateInfo.state = AbilityLifeCycleState::ABILITY_STATE_INITIAL;
90         curstate_ = AbilityLifeCycleState::ABILITY_STATE_INITIAL;
91         abilityScheduler_->ScheduleAbilityTransaction(want_, stateInfo);
92 
93         int ceode = 250;
94         abilityScheduler_->SendResult(ceode, resultCode, *resultWant);
95     }
96     return 0;
97 }
98 
ConnectAbility(const Want & want,const sptr<IAbilityConnection> & connect,const sptr<IRemoteObject> & callerToken,int32_t userId)99 int MockAbilityManagerService::ConnectAbility(
100     const Want& want, const sptr<IAbilityConnection>& connect, const sptr<IRemoteObject>& callerToken, int32_t userId)
101 {
102     if (abilityScheduler_ != nullptr) {
103         PacMap inState;
104         abilityScheduler_->ScheduleSaveAbilityState();
105         abilityScheduler_->ScheduleRestoreAbilityState(inState);
106     }
107     return 0;
108 }
109 
DisconnectAbility(sptr<IAbilityConnection> connect)110 int MockAbilityManagerService::DisconnectAbility(sptr<IAbilityConnection> connect)
111 {
112     GTEST_LOG_(INFO) << "MockAbilityManagerService::DisconnectAbility";
113     AbilityLifeCycleState lifeState = AbilityLifeCycleState::ABILITY_STATE_ACTIVE;
114 
115     if (abilityScheduler_ != nullptr) {
116         LifeCycleStateInfo stateInfo;
117         stateInfo.state = lifeState;
118         stateInfo.isNewWant = true;
119         want_.SetElementName("BundleName", "abilityName");
120         curstate_ = AbilityLifeCycleState::ABILITY_STATE_ACTIVE;
121         abilityScheduler_->ScheduleAbilityTransaction(want_, stateInfo);
122     }
123     return 0;
124 }
125 
AttachAbilityThread(const sptr<IAbilityScheduler> & scheduler,const sptr<IRemoteObject> & token)126 int MockAbilityManagerService::AttachAbilityThread(
127     const sptr<IAbilityScheduler>& scheduler, const sptr<IRemoteObject>& token)
128 {
129     abilityScheduler_ = scheduler;
130     EXPECT_NE(nullptr, token);
131     return 0;
132 }
133 
DumpState(const std::string & args,std::vector<std::string> & info)134 void MockAbilityManagerService::DumpState(const std::string& args, std::vector<std::string>& info)
135 {}
136 
DumpSysState(const std::string & args,std::vector<std::string> & state,bool isClient,bool isUserID,int UserID)137 void MockAbilityManagerService::DumpSysState(
138     const std::string& args, std::vector<std::string>& state, bool isClient, bool isUserID, int UserID)
139 {}
140 
AbilityTransitionDone(const sptr<IRemoteObject> & token,int state,const PacMap & saveData)141 int MockAbilityManagerService::AbilityTransitionDone(
142     const sptr<IRemoteObject>& token, int state, const PacMap& saveData)
143 {
144     GTEST_LOG_(INFO) << "MockAbilityManagerService::AbilityTransitionDone called";
145     return 0;
146 }
147 
ScheduleConnectAbilityDone(const sptr<IRemoteObject> & token,const sptr<IRemoteObject> & remoteObject)148 int MockAbilityManagerService::ScheduleConnectAbilityDone(
149     const sptr<IRemoteObject>& token, const sptr<IRemoteObject>& remoteObject)
150 {
151     return 0;
152 }
153 
ScheduleDisconnectAbilityDone(const sptr<IRemoteObject> & token)154 int MockAbilityManagerService::ScheduleDisconnectAbilityDone(const sptr<IRemoteObject>& token)
155 {
156     return 0;
157 }
158 
ScheduleCommandAbilityDone(const sptr<IRemoteObject> & token)159 int MockAbilityManagerService::ScheduleCommandAbilityDone(const sptr<IRemoteObject>& token)
160 {
161     return 0;
162 }
163 
ScheduleCommandAbilityWindowDone(const sptr<IRemoteObject> & token,const sptr<SessionInfo> & sessionInfo,WindowCommand winCmd,AbilityCommand abilityCmd)164 int MockAbilityManagerService::ScheduleCommandAbilityWindowDone(
165     const sptr<IRemoteObject> &token,
166     const sptr<SessionInfo> &sessionInfo,
167     WindowCommand winCmd,
168     AbilityCommand abilityCmd)
169 {
170     return 0;
171 }
172 
StopServiceAbility(const Want & want,int32_t userId,const sptr<IRemoteObject> & token)173 int MockAbilityManagerService::StopServiceAbility(const Want& want, int32_t userId, const sptr<IRemoteObject> &token)
174 {
175     return 0;
176 }
177 
AcquireDataAbility(const Uri & uri,bool tryBind,const sptr<IRemoteObject> & callerToken)178 sptr<IAbilityScheduler> MockAbilityManagerService::AcquireDataAbility(
179     const Uri& uri, bool tryBind, const sptr<IRemoteObject>& callerToken)
180 {
181     if (abilityScheduler_ != nullptr) {
182         return abilityScheduler_;
183     }
184     return nullptr;
185 }
186 
ReleaseDataAbility(sptr<IAbilityScheduler> dataAbilityScheduler,const sptr<IRemoteObject> & callerToken)187 ErrCode MockAbilityManagerService::ReleaseDataAbility(
188     sptr<IAbilityScheduler> dataAbilityScheduler, const sptr<IRemoteObject>& callerToken)
189 {
190     if (abilityScheduler_ != nullptr) {
191         abilityScheduler_ = nullptr;
192         return 0;
193     }
194     return -1;
195 }
196 }  // namespace AAFwk
197 }  // namespace OHOS
198