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