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 <cstdint>
17 #include <gtest/gtest.h>
18 
19 #include "access_token.h"
20 #include "accesstoken_kit.h"
21 #include "access_token_error.h"
22 #define private public
23 #include "accesstoken_info_manager.h"
24 #include "permission_definition_cache.h"
25 #include "form_manager_access_client.h"
26 #undef private
27 #include "accesstoken_callback_stubs.h"
28 #include "callback_death_recipients.h"
29 #include "running_form_info.h"
30 #include "token_setproc.h"
31 
32 using namespace testing;
33 using namespace testing::ext;
34 using namespace OHOS;
35 
36 namespace OHOS {
37 namespace Security {
38 namespace AccessToken {
39 namespace {
40 static const std::string FORM_VISIBLE_NAME = "#1";
41 }
42 class PermissionRecordManagerCoverageTest : public testing::Test {
43 public:
44     static void SetUpTestCase();
45 
46     static void TearDownTestCase();
47 
48     void SetUp();
49 
50     void TearDown();
51 };
52 
SetUpTestCase()53 void PermissionRecordManagerCoverageTest::SetUpTestCase() {}
54 
TearDownTestCase()55 void PermissionRecordManagerCoverageTest::TearDownTestCase() {}
56 
SetUp()57 void PermissionRecordManagerCoverageTest::SetUp() {}
58 
TearDown()59 void PermissionRecordManagerCoverageTest::TearDown() {}
60 
61 /*
62  * @tc.name: RegisterAddObserverTest001
63  * @tc.desc: regist form observer
64  * @tc.type: FUNC
65  * @tc.require: issueI5RWXF
66  */
67 HWTEST_F(PermissionRecordManagerCoverageTest, RegisterAddObserverTest001, TestSize.Level1)
68 {
69     AccessTokenID selfTokenId = GetSelfTokenID();
70     AccessTokenID nativeToken = AccessTokenKit::GetNativeTokenId("privacy_service");
71     EXPECT_EQ(RET_SUCCESS, SetSelfTokenID(nativeToken));
72     sptr<FormStateObserverStub> formStateObserver = new (std::nothrow) FormStateObserverStub();
73     ASSERT_NE(formStateObserver, nullptr);
74     ASSERT_EQ(RET_SUCCESS,
75         FormManagerAccessClient::GetInstance().RegisterAddObserver(FORM_VISIBLE_NAME, formStateObserver));
76     ASSERT_EQ(RET_FAILED,
77         FormManagerAccessClient::GetInstance().RegisterAddObserver(FORM_VISIBLE_NAME, nullptr));
78 
79     ASSERT_EQ(RET_FAILED,
80         FormManagerAccessClient::GetInstance().RegisterRemoveObserver(FORM_VISIBLE_NAME, nullptr));
81     ASSERT_EQ(RET_SUCCESS,
82         FormManagerAccessClient::GetInstance().RegisterRemoveObserver(FORM_VISIBLE_NAME, formStateObserver));
83     EXPECT_EQ(RET_SUCCESS, SetSelfTokenID(selfTokenId));
84 }
85 
86 /*
87  * @tc.name: FormMgrDiedHandle001
88  * @tc.desc: test form manager remote die
89  * @tc.type: FUNC
90  * @tc.require: issueI5RWXF
91  */
92 HWTEST_F(PermissionRecordManagerCoverageTest, FormMgrDiedHandle001, TestSize.Level1)
93 {
94     FormManagerAccessClient::GetInstance().OnRemoteDiedHandle();
95     ASSERT_EQ(nullptr, FormManagerAccessClient::GetInstance().proxy_);
96     ASSERT_EQ(nullptr, FormManagerAccessClient::GetInstance().serviceDeathObserver_);
97 }
98 
99 class PermissionRecordManagerCoverTestCb1 : public FormStateObserverStub {
100 public:
PermissionRecordManagerCoverTestCb1()101     PermissionRecordManagerCoverTestCb1()
102     {}
103 
~PermissionRecordManagerCoverTestCb1()104     ~PermissionRecordManagerCoverTestCb1()
105     {}
106 
NotifyWhetherFormsVisible(const FormVisibilityType visibleType,const std::string & bundleName,std::vector<FormInstance> & formInstances)107     virtual int32_t NotifyWhetherFormsVisible(const FormVisibilityType visibleType,
108         const std::string &bundleName, std::vector<FormInstance> &formInstances) override
109     {
110         return 0;
111     }
112 };
113 
114 /**
115  * @tc.name: OnRemoteRequest001
116  * @tc.desc: FormStateObserverStub::OnRemoteRequest function test
117  * @tc.type: FUNC
118  * @tc.require:
119  */
120 HWTEST_F(PermissionRecordManagerCoverageTest, OnRemoteRequest001, TestSize.Level1)
121 {
122     PermissionRecordManagerCoverTestCb1 callback;
123 
124     OHOS::MessageParcel reply;
125     OHOS::MessageOption option(OHOS::MessageOption::TF_SYNC);
126 
127     OHOS::MessageParcel data1;
128     ASSERT_EQ(true, data1.WriteInterfaceToken(IJsFormStateObserver::GetDescriptor()));
129     EXPECT_EQ(RET_SUCCESS, callback.OnRemoteRequest(static_cast<uint32_t>(
130         IJsFormStateObserver::Message::FORM_STATE_OBSERVER_NOTIFY_WHETHER_FORMS_VISIBLE), data1, reply, option));
131 
132     MessageParcel data2;
133     data2.WriteInterfaceToken(IJsFormStateObserver::GetDescriptor());
134     ASSERT_EQ(true, data2.WriteString(FORM_VISIBLE_NAME));
135     std::vector<FormInstance> formInstances;
136     FormInstance formInstance;
137     formInstances.emplace_back(formInstance);
138     ASSERT_EQ(true, data2.WriteInt32(formInstances.size()));
139     for (auto &parcelable: formInstances) {
140         ASSERT_EQ(true, data2.WriteParcelable(&parcelable));
141     }
142     EXPECT_EQ(RET_SUCCESS, callback.OnRemoteRequest(static_cast<uint32_t>(
143         IJsFormStateObserver::Message::FORM_STATE_OBSERVER_NOTIFY_WHETHER_FORMS_VISIBLE), data2, reply, option));
144 
145     uint32_t code = -1;
146     EXPECT_NE(RET_SUCCESS, callback.OnRemoteRequest(code, data2, reply, option));
147 }
148 } // namespace AccessToken
149 } // namespace Security
150 } // namespace OHOS
151