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 <gtest/gtest.h>
17 #include <map>
18 #include <string>
19 #include <thread>
20
21 #include "appexecfwk_errors.h"
22 #define private public
23 #include "form_data_proxy_mgr.h"
24 #include "form_item_info.h"
25 #undef private
26 #include "form_bms_helper.h"
27 #include "form_data_proxy_record.h"
28 #include "form_constants.h"
29 #include "form_mgr_errors.h"
30 #include "form_data_mgr.h"
31 #include "form_record.h"
32 #include "form_util.h"
33 #include "fms_log_wrapper.h"
34 #include "ipc_skeleton.h"
35
36 using namespace testing::ext;
37 using namespace OHOS;
38 using namespace OHOS::AppExecFwk;
39
40 namespace {
41 OHOS::ErrCode g_mockGetApplicationInfo = OHOS::ERR_OK;
42 }
43
MockGetApplicationInfo(OHOS::ErrCode mockRet)44 void MockGetApplicationInfo(OHOS::ErrCode mockRet)
45 {
46 g_mockGetApplicationInfo = mockRet;
47 }
48
49 namespace OHOS {
50 namespace AppExecFwk {
FormBmsHelper()51 FormBmsHelper::FormBmsHelper()
52 {}
53
~FormBmsHelper()54 FormBmsHelper::~FormBmsHelper()
55 {}
56
GetApplicationInfo(const std::string & bundleName,int32_t userId,ApplicationInfo & appInfo)57 ErrCode FormBmsHelper::GetApplicationInfo(const std::string &bundleName, int32_t userId, ApplicationInfo &appInfo)
58 {
59 return g_mockGetApplicationInfo;
60 }
61 } // namespace AppExecFwk
62 } // namespace OHOS
63
64 namespace {
65 const std::string FORM_BUNDLE_NAME = "com.form.service";
66 const std::string PARAM_MODULE_NAME = "com.form.app.test.ability";
67 const std::string FORM_ABILITY_NAME = "com.form.app.test.ability";
68 const std::string PARAM_FORM_NAME = "com.form.name.test";
69 const int32_t PARAM_FORM_DIMENSION_VALUE = 1;
70
71 class FmsFormDataProxyMgrTest : public testing::Test {
72 public:
73 static void SetUpTestCase();
74 static void TearDownTestCase();
75 void SetUp();
76 void TearDown();
77 };
78
SetUpTestCase()79 void FmsFormDataProxyMgrTest::SetUpTestCase()
80 {}
81
TearDownTestCase()82 void FmsFormDataProxyMgrTest::TearDownTestCase()
83 {}
84
SetUp()85 void FmsFormDataProxyMgrTest::SetUp()
86 {}
87
TearDown()88 void FmsFormDataProxyMgrTest::TearDown()
89 {}
90
91 /**
92 * @tc.name: FmsFormDataProxyMgrTest_001
93 * @tc.desc: Verify functionName SubscribeFormData.
94 * @tc.type: FUNC
95 */
96 HWTEST_F(FmsFormDataProxyMgrTest, FmsFormDataProxyMgrTest_001, TestSize.Level0)
97 {
98 GTEST_LOG_(INFO) << "FmsFormDataProxyMgrTest_001 start";
99 FormRecord formRecord;
100 int64_t formId = 1;
101 AAFwk::Want want;
102 std::vector<FormDataProxy> formDataProxies;
103 uint32_t ret = FormDataProxyMgr::GetInstance().SubscribeFormData(formId, formDataProxies, want);
104 EXPECT_EQ(ret, ERR_OK);
105 FormDataProxy formDataProxy("test", "0002");
106 formDataProxies.push_back(formDataProxy);
107 ret = FormDataProxyMgr::GetInstance().SubscribeFormData(formId, formDataProxies, want);
108 EXPECT_EQ(ret, ERR_APPEXECFWK_FORM_NOT_EXIST_ID);
109
110 int callingUid {0};
111 // Set cache
112 FormItemInfo record1;
113 record1.SetFormId(formId);
114 record1.SetProviderBundleName(FORM_BUNDLE_NAME);
115 record1.SetModuleName(PARAM_MODULE_NAME);
116 record1.SetAbilityName(FORM_ABILITY_NAME);
117 record1.SetFormName(PARAM_FORM_NAME);
118 record1.SetSpecificationId(PARAM_FORM_DIMENSION_VALUE);
119 record1.SetTemporaryFlag(false);
120 FormRecord formRecord2 = FormDataMgr::GetInstance().AllotFormRecord(record1, callingUid);
121 ret = FormDataProxyMgr::GetInstance().SubscribeFormData(formId, formDataProxies, want);
122 EXPECT_EQ(ret, ERR_OK);
123
124 formRecord2.isDataProxy = true;
125 FormDataMgr::GetInstance().UpdateFormRecord(formId, formRecord2);
126 MockGetApplicationInfo(ERR_OK + 1);
127 ret = FormDataProxyMgr::GetInstance().SubscribeFormData(formId, formDataProxies, want);
128 EXPECT_EQ(ret, ERR_APPEXECFWK_FORM_COMMON_CODE);
129
130 GTEST_LOG_(INFO) << "FmsFormDataProxyMgrTest_001 end";
131 }
132
133 /**
134 * @tc.name: FmsFormDataProxyMgrTest_002
135 * @tc.desc: Verify functionName ConsumeFormDataProxies.
136 * @tc.type: FUNC
137 */
138 HWTEST_F(FmsFormDataProxyMgrTest, FmsFormDataProxyMgrTest_002, TestSize.Level0)
139 {
140 GTEST_LOG_(INFO) << "FmsFormDataProxyMgrTest_002 start";
141 int64_t formId = 1;
142 std::vector<FormDataProxy> formDataProxies;
143
144 FormDataProxy formDataProxy("test", "0002");
145 formDataProxies.push_back(formDataProxy);
146 FormDataProxyMgr::GetInstance().ProduceFormDataProxies(formId, formDataProxies);
147 EXPECT_EQ(FormDataProxyMgr::GetInstance().formDataProxiesMap_.size(), 1);
148
149 std::vector<FormDataProxy> getFormDataProxies;
150 bool ret = FormDataProxyMgr::GetInstance().ConsumeFormDataProxies(formId, getFormDataProxies);
151 EXPECT_EQ(ret, true);
152
153 GTEST_LOG_(INFO) << "FmsFormDataProxyMgrTest_002 end";
154 }
155 }