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 }