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 
17 #include "dlp_credential_test.h"
18 #include <string>
19 #include <thread>
20 #include <unistd.h>
21 #include <unordered_map>
22 #include "account_adapt.h"
23 #include "cert_parcel.h"
24 #include "dlp_credential_client.h"
25 #include "dlp_permission.h"
26 #include "dlp_permission_async_proxy.h"
27 #include "dlp_permission_log.h"
28 #include "dlp_permission_serializer.h"
29 #include "dlp_policy_parcel.h"
30 #include "dlp_credential.h"
31 #include "ipc_skeleton.h"
32 #include "iremote_broker.h"
33 #include "iremote_stub.h"
34 #include "nlohmann/json.hpp"
35 #include "permission_policy.h"
36 #include "securec.h"
37 
38 namespace OHOS {
39 namespace Security {
40 namespace DlpPermission {
41 using namespace testing::ext;
42 using namespace OHOS;
43 using namespace OHOS::Security::DlpPermission;
44 using unordered_json = nlohmann::ordered_json;
45 const std::string ENC_DATA_LEN = "encDataLen";
46 const std::string ENC_DATA = "encData";
47 const std::string ENC_ACCOUNT_TYPE = "accountType";
48 static const std::string POLICY_PLAINTTEXT =
49     "7b22706f6c696379223a7b224b4941223a22222c226f776e65724163636f756e744e616d65223a226f686f73416e6f6e796d6f75734e616d6"
50     "5222c226f776e65724163636f756e744964223a226f686f73416e6f6e796d6f75734e616d65222c2276657273696f6e223a312c2265787069"
51     "726554696d65223a302c226e6565644f6e6c696e65223a312c226163636f756e74223a7b22716c7479733332636e35574d4b493534223a7b2"
52     "27269676874223a7b2272656164223a747275652c2265646974223a66616c73652c2266756c6c4374726c223a66616c73657d7d2c22377236"
53     "4c4f4b3548396c444758577078223a7b227269676874223a7b2272656164223a747275652c2265646974223a66616c73652c2266756c6c437"
54     "4726c223a66616c73657d7d7d7d2c2266696c65223a7b2266696c656b6579223a224532433037304238373531444435334142363930453337"
55     "3938464134364142314138314135393145414132354439333141303032323938363431384230343034222c2266696c656b65794c656e223a3"
56     "3322c226976223a224245303230323430393136434436394538333842463631383038333238333346222c2269764c656e223a31362c22686d"
57     "61634b6579223a223146393533374535343432444339374546394442344634413133374543304239343539463445314545303846364644344"
58     "4304245414141444336424539414644222c22686d61634b65794c656e223a33322c22646c7056657273696f6e223a337d7d";
59 
SetUpTestCase()60 void DlpCredentialTest::SetUpTestCase() {}
61 
TearDownTestCase()62 void DlpCredentialTest::TearDownTestCase() {}
63 
SetUp()64 void DlpCredentialTest::SetUp() {}
65 
TearDown()66 void DlpCredentialTest::TearDown() {}
67 
68 class DlpTestRemoteObj : public IRemoteBroker {
69 public:
70     DECLARE_INTERFACE_DESCRIPTOR(u"ohos.dlp.test");
71     DlpTestRemoteObj() = default;
72     virtual ~DlpTestRemoteObj() noexcept = default;
73 };
74 
75 /**
76  * @tc.name: DlpCredentialTest001
77  * @tc.desc: DlpSandboxChangeCallbackProxy test
78  * @tc.type: FUNC
79  * @tc.require:
80  */
81 HWTEST_F(DlpCredentialTest, DlpCredentialTest001, TestSize.Level1)
82 {
83     sptr<DlpTestRemoteObj> callback = new (std::nothrow)IRemoteStub<DlpTestRemoteObj>();
84     EXPECT_TRUE(callback != nullptr);
85 
86     auto proxy = std::make_shared<DlpPermissionAsyncProxy>(callback->AsObject());
87 
88     std::vector<uint8_t> cert;
89     proxy->OnGenerateDlpCertificate(0, cert);
90     EXPECT_EQ(true, (cert.size() == 0));
91     proxy->OnGenerateDlpCertificate(-1, cert);
92     EXPECT_EQ(true, (cert.size() == 0));
93 
94     PermissionPolicy policy;
95     proxy->OnParseDlpCertificate(0, policy, cert);
96     EXPECT_EQ(true, (cert.size() == 0));
97     proxy->OnParseDlpCertificate(-1, policy, cert);
98     EXPECT_EQ(true, (cert.size() == 0));
99 }
100 
101 class DlpPermissionAsyncStubTest : public IRemoteStub<IDlpPermissionCallback> {
102 public:
103     DISALLOW_COPY_AND_MOVE(DlpPermissionAsyncStubTest);
104     DlpPermissionAsyncStubTest() = default;
105     ~DlpPermissionAsyncStubTest() override = default;
106 
OnGenerateDlpCertificate(int32_t result,const std::vector<uint8_t> & cert)107     void OnGenerateDlpCertificate(int32_t result, const std::vector<uint8_t>& cert) override {};
OnParseDlpCertificate(int32_t result,const PermissionPolicy & policy,const std::vector<uint8_t> & cert)108     void OnParseDlpCertificate(int32_t result, const PermissionPolicy& policy,
109         const std::vector<uint8_t>& cert) override {};
110 };
111 
112 /**
113  * @tc.name: DlpCredentialTest001
114  * @tc.desc: DlpSandboxChangeCallbackProxy test
115  * @tc.type: FUNC
116  * @tc.require:
117  */
118 HWTEST_F(DlpCredentialTest, DlpCredentialTest002, TestSize.Level1)
119 {
120     sptr<IDlpPermissionCallback> stub = new (std::nothrow) DlpPermissionAsyncStubTest();
121     std::string policy;
122     std::string account;
123     DlpAccountType accountType = OHOS::Security::DlpPermission::CLOUD_ACCOUNT;
124     AppExecFwk::ApplicationInfo applicationInfo;
125     int res = DlpCredential::GetInstance().GenerateDlpCertificate(policy, account, accountType, stub);
126     EXPECT_EQ(DLP_CREDENTIAL_ERROR_COMMON_ERROR, res);
127     sptr<CertParcel> certParcel = new (std::nothrow) CertParcel();
128     std::string appId = "test_appId_passed";
129     res = DlpCredential::GetInstance().ParseDlpCertificate(certParcel, stub, appId, true, applicationInfo);
130     EXPECT_EQ(DLP_SERVICE_ERROR_JSON_OPERATE_FAIL, res);
131     unordered_json encDataJson = {
132         {ENC_DATA_LEN, POLICY_PLAINTTEXT.length()},
133         {ENC_DATA, POLICY_PLAINTTEXT},
134         {ENC_ACCOUNT_TYPE, accountType},
135     };
136     std::string s2 = encDataJson.dump();
137     std::vector<uint8_t> cert2(s2.begin(), s2.end());
138     certParcel->cert = cert2;
139     res = DlpCredential::GetInstance().ParseDlpCertificate(certParcel, stub, appId, true, applicationInfo);
140     EXPECT_EQ(DLP_OK, res);
141 }
142 
143 /**
144  * @tc.name: CheckMdmPermission001
145  * @tc.desc: CheckMdmPermission test
146  * @tc.type: FUNC
147  * @tc.require:
148  */
149 HWTEST_F(DlpCredentialTest, CheckMdmPermission001, TestSize.Level1)
150 {
151     int32_t ret = DlpCredential::GetInstance().CheckMdmPermission("testBundle", 101);
152     ASSERT_EQ(DLP_SERVICE_ERROR_IPC_REQUEST_FAIL, ret);
153 }
154 }  // namespace DlpPermission
155 }  // namespace Security
156 }  // namespace OHOS
157