1 /*
2  * Copyright (C) 2023 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 #define private public
17 #define protected public
18 
19 #include "security_mode_parser.h"
20 #include "settings_data_utils.h"
21 #include "input_method_system_ability.h"
22 
23 #undef private
24 
25 #include <gtest/gtest.h>
26 
27 using namespace testing::ext;
28 using namespace OHOS::DataShare;
29 namespace OHOS {
30 namespace MiscServices {
31 const std::string SECURITY_KEY = "settings.inputmethod.full_experience";
32 constexpr uint32_t USER_100_TOTAL_COUNT = 3;
33 constexpr uint32_t USER_101_TOTAL_COUNT = 1;
34 class SecurityModeParserTest : public testing::Test {
35 public:
36     static void SetUpTestCase(void);
37     static void TearDownTestCase(void);
38     void SetUp();
39     void TearDown();
40     static std::shared_ptr<DataShareHelper> helper_;
41     static std::shared_ptr<DataShareResultSet> resultSet_;
42     static sptr<InputMethodSystemAbility> service_;
43     static constexpr int32_t USER_ID = 100;
44 };
45 std::shared_ptr<DataShareHelper> SecurityModeParserTest::helper_;
46 std::shared_ptr<DataShareResultSet> SecurityModeParserTest::resultSet_;
47 sptr<InputMethodSystemAbility> SecurityModeParserTest::service_{ nullptr };
SetUpTestCase(void)48 void SecurityModeParserTest::SetUpTestCase(void)
49 {
50     IMSA_HILOGI("SecurityModeParserTest::SetUpTestCase");
51     std::vector<std::string> columns = { "VALUE" };
52     helper_ = DataShare::DataShareHelper::Creator(nullptr, "tsetUri", "tsetUri");
53     DataSharePredicates predicates;
54     Uri uri("tsetUri");
55     resultSet_ = helper_->Query(uri, predicates, columns);
56     SecurityModeParser::GetInstance()->Initialize(USER_ID);
57 
58     service_ = new (std::nothrow) InputMethodSystemAbility();
59     if (service_ == nullptr) {
60         IMSA_HILOGE("failed to new service");
61         return;
62     }
63     service_->OnStart();
64     service_->userId_ = USER_ID;
65 }
66 
TearDownTestCase(void)67 void SecurityModeParserTest::TearDownTestCase(void)
68 {
69     service_->OnStop();
70     IMSA_HILOGI("SecurityModeParserTest::TearDownTestCase");
71 }
72 
SetUp()73 void SecurityModeParserTest::SetUp()
74 {
75     IMSA_HILOGI("SecurityModeParserTest::SetUp");
76     resultSet_->strValue_ = "{\"fullExperienceList\" : {\"100\" : [ \"xiaoyiIme\", \"baiduIme\", "
77                             "\"sougouIme\"],\"101\" : [\"sougouIme\"]}}";
78 
79     SecurityModeParser::GetInstance()->fullModeList_.clear();
80 }
81 
TearDown()82 void SecurityModeParserTest::TearDown()
83 {
84     IMSA_HILOGI("SecurityModeParserTest::TearDown");
85 }
86 
87 /**
88  * @tc.name: testGetFullModeList_001
89  * @tc.desc: Get 101 user fullModeList
90  * @tc.type: FUNC
91  * @tc.require:
92  * @tc.author: guojin
93  */
94 HWTEST_F(SecurityModeParserTest, testGetFullModeList_001, TestSize.Level0)
95 {
96     IMSA_HILOGI("SecurityModeParserTest testGetFullModeList_001 START");
97     int32_t ret = SecurityModeParser::GetInstance()->UpdateFullModeList(101);
98     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
99     EXPECT_EQ(SecurityModeParser::GetInstance()->fullModeList_.size(), USER_101_TOTAL_COUNT);
100     if (SecurityModeParser::GetInstance()->fullModeList_.size() == USER_101_TOTAL_COUNT) {
101         EXPECT_EQ(SecurityModeParser::GetInstance()->fullModeList_[0], "sougouIme");
102     }
103 }
104 
105 /**
106  * @tc.name: testGetFullModeList_002
107  * @tc.desc: Get 100 user fullModeList
108  * @tc.type: FUNC
109  * @tc.require:
110  * @tc.author: guojin
111  */
112 HWTEST_F(SecurityModeParserTest, testGetFullModeList_002, TestSize.Level0)
113 {
114     IMSA_HILOGI("SecurityModeParserTest testGetFullModeList_002 START");
115     int32_t ret = SecurityModeParser::GetInstance()->UpdateFullModeList(SecurityModeParserTest::USER_ID);
116     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
117     EXPECT_EQ(SecurityModeParser::GetInstance()->fullModeList_.size(), USER_100_TOTAL_COUNT);
118     if (SecurityModeParser::GetInstance()->fullModeList_.size() == USER_100_TOTAL_COUNT) {
119         EXPECT_EQ(SecurityModeParser::GetInstance()->fullModeList_[0], "xiaoyiIme");
120         EXPECT_EQ(SecurityModeParser::GetInstance()->fullModeList_[1], "baiduIme");
121         EXPECT_EQ(SecurityModeParser::GetInstance()->fullModeList_[2], "sougouIme");
122     }
123 }
124 
125 /**
126  * @tc.name: testGetSecurityMode_001
127  * @tc.desc: Get 100 user security mode
128  * @tc.type: FUNC
129  * @tc.require:
130  * @tc.author: guojin
131  */
132 HWTEST_F(SecurityModeParserTest, testGetSecurityMode_001, TestSize.Level0)
133 {
134     IMSA_HILOGI("SecurityModeParserTest testGetSecurityMode_001 START");
135     int32_t ret = SecurityModeParser::GetInstance()->UpdateFullModeList(SecurityModeParserTest::USER_ID);
136     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
137     SecurityMode security =
138         SecurityModeParser::GetInstance()->GetSecurityMode("xiaoyiIme", SecurityModeParserTest::USER_ID);
139     EXPECT_EQ(static_cast<int32_t>(security), 1);
140 }
141 
142 /**
143  * @tc.name: testGetSecurityMode_002
144  * @tc.desc: Get 100 user security mode
145  * @tc.type: FUNC
146  * @tc.require:
147  * @tc.author: guojin
148  */
149 HWTEST_F(SecurityModeParserTest, testGetSecurityMode_002, TestSize.Level0)
150 {
151     IMSA_HILOGI("SecurityModeParserTest testGetSecurityMode_002 START");
152     int32_t ret = SecurityModeParser::GetInstance()->UpdateFullModeList(SecurityModeParserTest::USER_ID);
153     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
154     SecurityMode security =
155         SecurityModeParser::GetInstance()->GetSecurityMode("test", SecurityModeParserTest::USER_ID);
156     EXPECT_EQ(static_cast<int32_t>(security), 0);
157 }
158 
159 /**
160  * @tc.name: testGetSecurityMode_003
161  * @tc.desc: Get 100 user security mode
162  * @tc.type: FUNC
163  * @tc.require:
164  * @tc.author: guojin
165  */
166 HWTEST_F(SecurityModeParserTest, testGetSecurityMode_003, TestSize.Level0)
167 {
168     IMSA_HILOGI("SecurityModeParserTest testGetSecurityMode_003 START");
169     service_->enableSecurityMode_ = false;
170     int32_t securityMode;
171     auto ret = service_->GetSecurityMode(securityMode);
172     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
173     EXPECT_EQ(securityMode, 1);
174 }
175 
176 /**
177  * @tc.name: testGetSecurityMode_004
178  * @tc.desc: Get 100 user security mode
179  * @tc.type: FUNC
180  * @tc.require:
181  * @tc.author: guojin
182  */
183 HWTEST_F(SecurityModeParserTest, testGetSecurityMode_004, TestSize.Level0)
184 {
185     IMSA_HILOGI("SecurityModeParserTest testGetSecurityMode_004 START");
186     service_->enableSecurityMode_ = true;
187     int32_t securityMode;
188     auto ret = service_->GetSecurityMode(securityMode);
189     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
190     EXPECT_EQ(securityMode, 1);
191 }
192 } // namespace MiscServices
193 } // namespace OHOS