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 #ifndef MODULETEST_OHOS_ABILITY_RUNTIME_MOCK_BUNDLE_MANAGER_H 17 #define MODULETEST_OHOS_ABILITY_RUNTIME_MOCK_BUNDLE_MANAGER_H 18 19 #include <vector> 20 #include <gmock/gmock.h> 21 #include "ability_info.h" 22 #include "application_info.h" 23 #include "bundlemgr/bundle_mgr_interface.h" 24 #include "want.h" 25 #include "iremote_proxy.h" 26 #include "iremote_stub.h" 27 28 namespace OHOS { 29 namespace AppExecFwk { 30 namespace { 31 const std::string COM_IX_HIWORLD = "com.ix.hiworld"; 32 const std::string COM_IX_HIMUSIC = "com.ix.hiMusic"; 33 const std::string COM_IX_HIRADIO = "com.ix.hiRadio"; 34 const std::string COM_IX_HISERVICE = "com.ix.hiService"; 35 const std::string COM_IX_MUSICSERVICE = "com.ix.musicService"; 36 const std::string COM_IX_HIDATA = "com.ix.hiData"; 37 const std::string COM_IX_PHONE = "com.ix.hiPhone"; 38 const std::string COM_IX_TV = "com.ix.hiTV"; 39 const std::string COM_IX_Film = "com.ix.hiFilm"; 40 const std::string COM_IX_HIBACKGROUNDMUSIC = "com.ix.hiBackgroundMusic"; 41 const std::string COM_IX_HIBACKGROUNDDATA = "com.ix.hiBackgroundData"; 42 const std::string COM_IX_HISINGLEMUSIC = "com.ix.hiSingleMusicInfo"; 43 const std::string COM_OHOS_Test = "com.ohos.test"; 44 const std::string COM_IX_HIACCOUNT = "com.ix.hiAccount"; 45 const std::string COM_IX_HIACCOUNTSERVICE = "com.ix.hiAccountService"; 46 constexpr int32_t MAX_SYS_UID = 2899; 47 const int32_t BASE_USER_RANGE = 200000; 48 const int32_t MOCK_MAIN_UID = 20000000; 49 50 auto HiWordInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 51 abilityInfo.name = elementTemp.GetAbilityName(); 52 abilityInfo.bundleName = elementTemp.GetBundleName(); 53 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 54 abilityInfo.applicationName = "Helloworld"; 55 abilityInfo.applicationInfo.name = "Helloworld"; 56 abilityInfo.type = AbilityType::PAGE; 57 abilityInfo.applicationInfo.isLauncherApp = true; 58 59 if (elementTemp.GetAbilityName() == "luncher") { 60 abilityInfo.configChanges.push_back("fontSize"); 61 } 62 return true; 63 }; 64 65 auto HiMusicInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 66 abilityInfo.name = elementTemp.GetAbilityName(); 67 abilityInfo.bundleName = elementTemp.GetBundleName(); 68 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 69 abilityInfo.applicationName = "hiMusic"; 70 abilityInfo.applicationInfo.name = "hiMusic"; 71 abilityInfo.type = AbilityType::PAGE; 72 abilityInfo.applicationInfo.isLauncherApp = false; 73 74 if (elementTemp.GetAbilityName() == "MusicAbility") { 75 abilityInfo.process = "p1"; 76 abilityInfo.launchMode = LaunchMode::STANDARD; 77 } 78 if (elementTemp.GetAbilityName() == "MusicTopAbility") { 79 abilityInfo.process = "p1"; 80 abilityInfo.launchMode = LaunchMode::STANDARD; 81 } 82 if (elementTemp.GetAbilityName() == "MusicSAbility") { 83 abilityInfo.process = "p2"; 84 abilityInfo.launchMode = LaunchMode::SINGLETON; 85 } 86 if (elementTemp.GetAbilityName() == "Music") { 87 abilityInfo.process = "p1"; 88 abilityInfo.launchMode = LaunchMode::STANDARD; 89 abilityInfo.configChanges.push_back("layout"); 90 } 91 92 if (elementTemp.GetAbilityName() == "MusicTon") { 93 abilityInfo.process = "p1"; 94 abilityInfo.launchMode = LaunchMode::SINGLETON; 95 abilityInfo.configChanges.push_back("layout"); 96 } 97 return true; 98 }; 99 100 auto HiRadioInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 101 abilityInfo.name = elementTemp.GetAbilityName(); 102 abilityInfo.bundleName = elementTemp.GetBundleName(); 103 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 104 abilityInfo.applicationName = "hiRadio"; 105 abilityInfo.applicationInfo.name = "hiRadio"; 106 abilityInfo.type = AbilityType::PAGE; 107 abilityInfo.process = "p3"; 108 if (elementTemp.GetAbilityName() == "RadioAbility") { 109 abilityInfo.launchMode = LaunchMode::STANDARD; 110 } 111 if (elementTemp.GetAbilityName() == "RadioTopAbility") { 112 abilityInfo.launchMode = LaunchMode::SINGLETON; 113 } 114 if (elementTemp.GetAbilityName() == "Radio") { 115 abilityInfo.launchMode = LaunchMode::STANDARD; 116 abilityInfo.configChanges.push_back("orientation"); 117 } 118 return true; 119 }; 120 121 auto HiServiceInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 122 abilityInfo.name = elementTemp.GetAbilityName(); 123 abilityInfo.bundleName = elementTemp.GetBundleName(); 124 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 125 abilityInfo.applicationName = "hiService"; 126 abilityInfo.applicationInfo.name = "hiService"; 127 abilityInfo.type = AbilityType::SERVICE; 128 abilityInfo.process = "p4"; 129 return true; 130 }; 131 132 auto MusicServiceInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 133 abilityInfo.name = elementTemp.GetAbilityName(); 134 abilityInfo.bundleName = elementTemp.GetBundleName(); 135 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 136 abilityInfo.applicationName = "musicService"; 137 abilityInfo.applicationInfo.name = "musicService"; 138 abilityInfo.type = AbilityType::SERVICE; 139 abilityInfo.process = "p5"; 140 return true; 141 }; 142 143 auto HiDataInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 144 abilityInfo.name = elementTemp.GetAbilityName(); 145 abilityInfo.bundleName = elementTemp.GetBundleName(); 146 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 147 abilityInfo.applicationName = "hiData"; 148 abilityInfo.applicationInfo.name = "hiData"; 149 abilityInfo.type = AbilityType::DATA; 150 abilityInfo.process = "p6"; 151 return true; 152 }; 153 154 auto HiPhoneInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 155 abilityInfo.name = elementTemp.GetAbilityName(); 156 abilityInfo.bundleName = elementTemp.GetBundleName(); 157 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 158 abilityInfo.applicationName = "hiPhone"; 159 abilityInfo.applicationInfo.name = "hiPhone"; 160 abilityInfo.type = AbilityType::PAGE; 161 abilityInfo.applicationInfo.isLauncherApp = false; 162 abilityInfo.process = "p7"; 163 if (elementTemp.GetAbilityName() == "PhoneAbility1") { 164 abilityInfo.launchMode = LaunchMode::SINGLETON; 165 } 166 if (elementTemp.GetAbilityName() == "PhoneAbility2") { 167 abilityInfo.launchMode = LaunchMode::SINGLETON; 168 } 169 return true; 170 }; 171 172 auto HiTVInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 173 abilityInfo.name = elementTemp.GetAbilityName(); 174 abilityInfo.bundleName = elementTemp.GetBundleName(); 175 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 176 abilityInfo.applicationName = "hiTV"; 177 abilityInfo.applicationInfo.name = "hiTV"; 178 abilityInfo.type = AbilityType::PAGE; 179 abilityInfo.applicationInfo.isLauncherApp = false; 180 if (elementTemp.GetAbilityName() == "TVAbility") { 181 abilityInfo.process = "p8"; 182 abilityInfo.launchMode = LaunchMode::SINGLETON; 183 } 184 return true; 185 }; 186 187 auto HiFilmInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 188 abilityInfo.name = elementTemp.GetAbilityName(); 189 abilityInfo.bundleName = elementTemp.GetBundleName(); 190 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 191 abilityInfo.applicationName = "hiFilm"; 192 abilityInfo.applicationInfo.name = "hiFilm"; 193 abilityInfo.type = AbilityType::PAGE; 194 abilityInfo.applicationInfo.isLauncherApp = false; 195 if (elementTemp.GetAbilityName() == "FilmAbility") { 196 abilityInfo.process = "p9"; 197 abilityInfo.launchMode = LaunchMode::SINGLETON; 198 } 199 return true; 200 }; 201 auto HiBAckgroundMusicInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 202 abilityInfo.name = elementTemp.GetAbilityName(); 203 abilityInfo.bundleName = elementTemp.GetBundleName(); 204 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 205 abilityInfo.applicationInfo.singleton = true; 206 abilityInfo.applicationName = "hiBackgroundMusic"; 207 abilityInfo.applicationInfo.name = "hiBackgroundMusic"; 208 abilityInfo.type = AbilityType::SERVICE; 209 abilityInfo.process = "p4"; 210 return true; 211 }; 212 213 auto HiBAckgroundDataInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 214 abilityInfo.name = elementTemp.GetAbilityName(); 215 abilityInfo.bundleName = elementTemp.GetBundleName(); 216 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 217 abilityInfo.applicationInfo.singleton = true; 218 abilityInfo.applicationName = "hiBackgroundData"; 219 abilityInfo.applicationInfo.name = "hiBackgroundData"; 220 abilityInfo.type = AbilityType::SERVICE; 221 abilityInfo.process = "p4"; 222 return true; 223 }; 224 225 auto HiSingleMusicInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 226 abilityInfo.name = elementTemp.GetAbilityName(); 227 abilityInfo.bundleName = elementTemp.GetBundleName(); 228 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 229 abilityInfo.applicationInfo.singleton = true; 230 abilityInfo.applicationName = "hiSingleMusic"; 231 abilityInfo.applicationInfo.name = "hiSingleMusic"; 232 abilityInfo.type = AbilityType::PAGE; 233 abilityInfo.process = "p3"; 234 if (elementTemp.GetAbilityName() == "SingleMusicAbility") { 235 abilityInfo.launchMode = LaunchMode::STANDARD; 236 } 237 if (elementTemp.GetAbilityName() == "SingleMusicTopAbility") { 238 abilityInfo.launchMode = LaunchMode::SINGLETON; 239 } 240 return true; 241 }; 242 243 auto TestInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 244 abilityInfo.name = elementTemp.GetAbilityName(); 245 abilityInfo.bundleName = elementTemp.GetBundleName(); 246 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 247 abilityInfo.applicationName = "com.ohos.test"; 248 abilityInfo.applicationInfo.name = "com.ohos.test"; 249 abilityInfo.moduleName = ".MyApplication"; 250 abilityInfo.package = "com.ohos.test"; 251 abilityInfo.type = AbilityType::PAGE; 252 abilityInfo.applicationInfo.isLauncherApp = false; 253 abilityInfo.kind = "page"; 254 abilityInfo.process = "p10"; 255 abilityInfo.labelId = 10001; 256 abilityInfo.label = "$string:label"; 257 abilityInfo.descriptionId = 10002; 258 abilityInfo.description = "$string:mainability_description"; 259 abilityInfo.iconId = 10003; 260 abilityInfo.iconPath = "$media:icon"; 261 abilityInfo.theme = "mytheme"; 262 abilityInfo.readPermission = "readPermission"; 263 abilityInfo.writePermission = "writePermission"; 264 abilityInfo.resourcePath = "/data/app/com.ohos.test"; 265 abilityInfo.srcPath = "/resources/base/profile"; 266 abilityInfo.srcLanguage = "C++"; 267 abilityInfo.isLauncherAbility = false; 268 abilityInfo.isNativeAbility = false; 269 abilityInfo.enabled = false; 270 abilityInfo.supportPipMode = false; 271 abilityInfo.formEnabled = false; 272 return true; 273 }; 274 auto HiAccountInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 275 abilityInfo.name = elementTemp.GetAbilityName(); 276 abilityInfo.bundleName = elementTemp.GetBundleName(); 277 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 278 abilityInfo.applicationInfo.uid = MOCK_MAIN_UID; 279 abilityInfo.applicationName = "AccountTest"; 280 abilityInfo.applicationInfo.name = "AccountTest"; 281 abilityInfo.type = AbilityType::PAGE; 282 abilityInfo.applicationInfo.isLauncherApp = true; 283 return true; 284 }; 285 286 auto HiAccountServiceInfo = [](std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp) { 287 abilityInfo.name = elementTemp.GetAbilityName(); 288 abilityInfo.bundleName = elementTemp.GetBundleName(); 289 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); 290 abilityInfo.applicationInfo.uid = MOCK_MAIN_UID; 291 abilityInfo.applicationName = "AccountServiceTest"; 292 abilityInfo.applicationInfo.name = "AccountServiceTest"; 293 abilityInfo.type = AbilityType::SERVICE; 294 abilityInfo.applicationInfo.isLauncherApp = true; 295 return true; 296 }; 297 } // namespace 298 class BundleMgrProxy : public IRemoteProxy<IBundleMgr> { 299 public: BundleMgrProxy(const sptr<IRemoteObject> & impl)300 explicit BundleMgrProxy(const sptr<IRemoteObject>& impl) : IRemoteProxy<IBundleMgr>(impl) 301 {} 302 303 int QueryWantAbility(const AAFwk::Want& want, std::vector<AbilityInfo>& abilityInfos); 304 bool QueryAbilityInfo(const AAFwk::Want& want, AbilityInfo& abilityInfo) override; 305 bool GetApplicationInfo( 306 const std::string& appName, const ApplicationFlag flag, const int userId, ApplicationInfo& appInfo) override; 307 bool GetBundleInfo( 308 const std::string& bundleName, const BundleFlag flag, BundleInfo& bundleInfo, int32_t userId) override; GetBaseSharedBundleInfos(const std::string & bundleName,std::vector<BaseSharedBundleInfo> & baseSharedBundleInfos,AppExecFwk::GetDependentBundleInfoFlag flag)309 ErrCode GetBaseSharedBundleInfos(const std::string &bundleName, 310 std::vector<BaseSharedBundleInfo> &baseSharedBundleInfos, 311 AppExecFwk::GetDependentBundleInfoFlag flag) override 312 { 313 return ERR_OK; 314 } 315 }; 316 317 class BundleMgrStub : public IRemoteStub<IBundleMgr> { 318 public: 319 virtual int OnRemoteRequest( 320 uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override; 321 }; 322 323 class BundleMgrService : public BundleMgrStub { 324 public: 325 bool GetBundleInfo( 326 const std::string& bundleName, const BundleFlag flag, BundleInfo& bundleInfo, int32_t userId) override; 327 bool QueryAbilityInfo(const AAFwk::Want& want, AbilityInfo& abilityInfo) override; 328 bool QueryAbilityInfo(const AAFwk::Want& want, int32_t flags, int32_t userId, AbilityInfo& abilityInfo) override; 329 330 bool GetApplicationInfo( 331 const std::string& appName, const ApplicationFlag flag, const int userId, ApplicationInfo& appInfo) override; 332 333 bool ImplicitQueryInfos(const Want& want, int32_t flags, int32_t userId, bool withDefault, 334 std::vector<AbilityInfo>& abilityInfos, std::vector<ExtensionAbilityInfo>& extensionInfos) override; 335 BundleMgrService()336 BundleMgrService() 337 { 338 abilityInfoMap_.emplace(COM_IX_HIWORLD, HiWordInfo); 339 abilityInfoMap_.emplace(COM_IX_HIMUSIC, HiMusicInfo); 340 abilityInfoMap_.emplace(COM_IX_HIRADIO, HiRadioInfo); 341 abilityInfoMap_.emplace(COM_IX_HISERVICE, HiServiceInfo); 342 abilityInfoMap_.emplace(COM_IX_MUSICSERVICE, MusicServiceInfo); 343 abilityInfoMap_.emplace(COM_IX_HIDATA, HiDataInfo); 344 abilityInfoMap_.emplace(COM_IX_PHONE, HiPhoneInfo); 345 abilityInfoMap_.emplace(COM_IX_TV, HiTVInfo); 346 abilityInfoMap_.emplace(COM_IX_Film, HiFilmInfo); 347 abilityInfoMap_.emplace(COM_IX_HIBACKGROUNDMUSIC, HiBAckgroundMusicInfo); 348 abilityInfoMap_.emplace(COM_IX_HIBACKGROUNDDATA, HiBAckgroundDataInfo); 349 abilityInfoMap_.emplace(COM_IX_HISINGLEMUSIC, HiSingleMusicInfo); 350 abilityInfoMap_.emplace(COM_OHOS_Test, TestInfo); 351 abilityInfoMap_.emplace(COM_IX_HIACCOUNT, HiAccountInfo); 352 abilityInfoMap_.emplace(COM_IX_HIACCOUNTSERVICE, HiAccountServiceInfo); 353 } 354 ~BundleMgrService()355 virtual ~BundleMgrService() 356 {} 357 358 bool CheckWantEntity(const AAFwk::Want&, AbilityInfo&); 359 GetBaseSharedBundleInfos(const std::string & bundleName,std::vector<BaseSharedBundleInfo> & baseSharedBundleInfos,AppExecFwk::GetDependentBundleInfoFlag flag)360 ErrCode GetBaseSharedBundleInfos(const std::string &bundleName, 361 std::vector<BaseSharedBundleInfo> &baseSharedBundleInfos, 362 AppExecFwk::GetDependentBundleInfoFlag flag) override 363 { 364 return ERR_OK; 365 } 366 367 public: 368 using QueryAbilityInfoFunType = 369 std::function<bool(std::string bundleName, AbilityInfo& abilityInfo, ElementName& elementTemp)>; 370 std::map<std::string, QueryAbilityInfoFunType> abilityInfoMap_; 371 }; 372 } // namespace AppExecFwk 373 } // namespace OHOS 374 375 #endif // MODULETEST_OHOS_ABILITY_RUNTIME_MOCK_BUNDLE_MANAGER_H 376