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 "cj_want_ffi.h"
17 #include <gtest/gtest.h>
18 
19 #include <iostream>
20 #include <cstring>
21 #include <string>
22 #include <vector>
23 
24 #include "cj_utils_ffi.h"
25 #include "want.h"
26 #include "want_params_wrapper.h"
27 #include "securec.h"
28 
29 #define URI_SIZE 9
30 #define ACTION_SIZE 11
31 #define WANT_TYPE_SIZE 12
32 #define PARAMETERS_SIZE 11
33 
34 using namespace testing;
35 using namespace testing::ext;
36 using OHOS::AAFwk::Want;
37 using OHOS::AppExecFwk::ElementName;
38 
39 class CjWantFfiTest : public testing::Test {
40 public:
CjWantFfiTest()41     CjWantFfiTest()
42     {}
~CjWantFfiTest()43     ~CjWantFfiTest()
44     {}
45     static void SetUpTestCase();
46     static void TearDownTestCase();
47     void SetUp() override;
48     void TearDown() override;
49 };
50 
SetUpTestCase()51 void CjWantFfiTest::SetUpTestCase()
52 {}
53 
TearDownTestCase()54 void CjWantFfiTest::TearDownTestCase()
55 {}
56 
SetUp()57 void CjWantFfiTest::SetUp()
58 {}
59 
TearDown()60 void CjWantFfiTest::TearDown()
61 {}
62 
63 /**
64  * @tc.name: CjWantFfiTestFFICJWantCreateWithWantInfo_0100
65  * @tc.desc: CjWantFfiTest test for FFICJWantCreateWithWantInfo.
66  * @tc.type: FUNC
67  */
68 HWTEST_F(CjWantFfiTest, CjWantFfiTestFFICJWantCreateWithWantInfo_0100, TestSize.Level1)
69 {
70     const char* deviceId = "deviceId";
71     const char* bundleName = "bundleName";
72     const char* abilityName = "abilityName";
73     const char* moduleName = "moduleName";
74     ElementNameHandle elementNameHandle = new ElementName(deviceId, bundleName, abilityName, moduleName);
75 
76     CJWantParams params;
77     params.elementName = elementNameHandle;
78     params.flags = 123;
79 
80     params.uri = new char[URI_SIZE];
81     strcpy_s(params.uri, URI_SIZE, "deviceId");
82 
83     params.action = new char[ACTION_SIZE];
84     strcpy_s(params.action, ACTION_SIZE, "bundleName");
85 
86     params.wantType = new char[WANT_TYPE_SIZE];
87     strcpy_s(params.wantType, WANT_TYPE_SIZE, "abilityName");
88 
89     params.parameters = new char[PARAMETERS_SIZE];
90     strcpy_s(params.parameters, PARAMETERS_SIZE, "moduleName");
91 
92     WantHandle want = FFICJWantCreateWithWantInfo(params);
93     EXPECT_NE(want, nullptr);
94 }
95 
96 /**
97  * @tc.name: CjWantFfiTestFFICJWantDelete_0100
98  * @tc.desc: CjWantFfiTest test for FFICJWantDelete.
99  * @tc.type: FUNC
100  */
101 HWTEST_F(CjWantFfiTest, CjWantFfiTestFFICJWantDelete_0100, TestSize.Level1)
102 {
103     const char* deviceId = "deviceId";
104     const char* bundleName = "bundleName";
105     const char* abilityName = "abilityName";
106     const char* moduleName = "moduleName";
107     ElementNameHandle elementNameHandle = new ElementName(deviceId, bundleName, abilityName, moduleName);
108 
109     CJWantParams params;
110     params.elementName = elementNameHandle;
111     params.flags = 123;
112 
113     params.uri = new char[URI_SIZE];
114     strcpy_s(params.uri, URI_SIZE, "deviceId");
115 
116     params.action = new char[ACTION_SIZE];
117     strcpy_s(params.action, ACTION_SIZE, "bundleName");
118 
119     params.wantType = new char[WANT_TYPE_SIZE];
120     strcpy_s(params.wantType, WANT_TYPE_SIZE, "abilityName");
121 
122     params.parameters = new char[PARAMETERS_SIZE];
123     strcpy_s(params.parameters, PARAMETERS_SIZE, "moduleName");
124     WantHandle want = FFICJWantCreateWithWantInfo(params);
125     FFICJWantDelete(want);
126     EXPECT_NE(want, nullptr);
127 }
128 
129 /**
130  * @tc.name: CjWantFfiTestFFICJWantGetWantInfo_0100
131  * @tc.desc: CjWantFfiTest test for OnCreate.
132  * @tc.type: FUNC
133  */
134 HWTEST_F(CjWantFfiTest, CjWantFfiTestFFICJWantGetWantInfo_0100, TestSize.Level1)
135 {
136     const char* deviceId = "deviceId";
137     const char* bundleName = "bundleName";
138     const char* abilityName = "abilityName";
139     const char* moduleName = "moduleName";
140     ElementNameHandle elementNameHandle = new ElementName(deviceId, bundleName, abilityName, moduleName);
141 
142     CJWantParams params;
143     params.elementName = elementNameHandle;
144     params.flags = 123;
145 
146     params.uri = new char[URI_SIZE];
147     strcpy_s(params.uri, URI_SIZE, "deviceId");
148 
149     params.action = new char[ACTION_SIZE];
150     strcpy_s(params.action, ACTION_SIZE, "bundleName");
151 
152     params.wantType = new char[WANT_TYPE_SIZE];
153     strcpy_s(params.wantType, WANT_TYPE_SIZE, "abilityName");
154 
155     params.parameters = new char[PARAMETERS_SIZE];
156     strcpy_s(params.parameters, PARAMETERS_SIZE, "moduleName");
157     WantHandle want = FFICJWantCreateWithWantInfo(params);
158 
159     CJWantParams* paramsResult = FFICJWantGetWantInfo(want);
160     EXPECT_NE(paramsResult, nullptr);
161     FFICJWantParamsDelete(paramsResult);
162     FFICJWantDelete(reinterpret_cast<WantHandle>(want));
163 }
164 
165 /**
166  * @tc.name: CjWantFfiTestFFICJWantAddEntity_0100
167  * @tc.desc: CjWantFfiTest test for FFICJWantAddEntity.
168  * @tc.type: FUNC
169  */
170 HWTEST_F(CjWantFfiTest, CjWantFfiTestFFICJWantAddEntity_0100, TestSize.Level1)
171 {
172     const char* deviceId = "deviceId";
173     const char* bundleName = "bundleName";
174     const char* abilityName = "abilityName";
175     const char* moduleName = "moduleName";
176     ElementNameHandle elementNameHandle = new ElementName(deviceId, bundleName, abilityName, moduleName);
177 
178     CJWantParams params;
179     params.elementName = elementNameHandle;
180     params.flags = 123;
181 
182     params.uri = new char[URI_SIZE];
183     strcpy_s(params.uri, URI_SIZE, "deviceId");
184 
185     params.action = new char[ACTION_SIZE];
186     strcpy_s(params.action, ACTION_SIZE, "bundleName");
187 
188     params.wantType = new char[WANT_TYPE_SIZE];
189     strcpy_s(params.wantType, WANT_TYPE_SIZE, "abilityName");
190 
191     params.parameters = new char[PARAMETERS_SIZE];
192     strcpy_s(params.parameters, PARAMETERS_SIZE, "moduleName");
193     WantHandle want = FFICJWantCreateWithWantInfo(params);
194 
195     const char* entity = "test_entity";
196     FFICJWantAddEntity(want, entity);
197     EXPECT_NE(want, nullptr);
198 }
199 
200 /**
201  * @tc.name: CjWantFfiTestFFICJWantParseUri_0100
202  * @tc.desc: CjWantFfiTest test for FFICJWantParseUri.
203  * @tc.type: FUNC
204  */
205 HWTEST_F(CjWantFfiTest, CjWantFfiTestFFICJWantParseUri_0100, TestSize.Level1)
206 {
207     const char* uri = "test_uri";
208     WantHandle want = FFICJWantParseUri(uri);
209     EXPECT_EQ(want, nullptr);
210 }