19762338dSopenharmony_ci/*
29762338dSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
49762338dSopenharmony_ci * you may not use this file except in compliance with the License.
59762338dSopenharmony_ci * You may obtain a copy of the License at
69762338dSopenharmony_ci *
79762338dSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
89762338dSopenharmony_ci *
99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129762338dSopenharmony_ci * See the License for the specific language governing permissions and
139762338dSopenharmony_ci * limitations under the License.
149762338dSopenharmony_ci */
159762338dSopenharmony_ci
169762338dSopenharmony_ci#include "pin_auth_hdi_test.h"
179762338dSopenharmony_ci#include "iam_hat_test.h"
189762338dSopenharmony_ci
199762338dSopenharmony_ciusing namespace std;
209762338dSopenharmony_ciusing namespace testing::ext;
219762338dSopenharmony_ciusing namespace OHOS::UserIam::Common;
229762338dSopenharmony_ciusing namespace OHOS::HDI::PinAuth;
239762338dSopenharmony_ciusing namespace OHOS::HDI::PinAuth::V2_0;
249762338dSopenharmony_ciusing HdiProperty = OHOS::HDI::PinAuth::V2_0::Property;
259762338dSopenharmony_ci
269762338dSopenharmony_cistatic AllInOneImpl g_executorImpl(make_shared<OHOS::UserIam::PinAuth::PinAuth>());
279762338dSopenharmony_cistatic OHOS::Parcel parcel;
289762338dSopenharmony_ciint32_t Expectedvalue1 = 0;
299762338dSopenharmony_ci
309762338dSopenharmony_civoid UserIamPinAuthTwoTest::SetUpTestCase()
319762338dSopenharmony_ci{
329762338dSopenharmony_ci}
339762338dSopenharmony_ci
349762338dSopenharmony_civoid UserIamPinAuthTwoTest::TearDownTestCase()
359762338dSopenharmony_ci{
369762338dSopenharmony_ci}
379762338dSopenharmony_ci
389762338dSopenharmony_civoid UserIamPinAuthTwoTest::SetUp()
399762338dSopenharmony_ci{
409762338dSopenharmony_ci}
419762338dSopenharmony_ci
429762338dSopenharmony_civoid UserIamPinAuthTwoTest::TearDown()
439762338dSopenharmony_ci{
449762338dSopenharmony_ci}
459762338dSopenharmony_ci
469762338dSopenharmony_ciclass DummyIExecutorCallback : public IExecutorCallback {
479762338dSopenharmony_cipublic:
489762338dSopenharmony_ci    DummyIExecutorCallback(int32_t onResultResult, int32_t onGetDataResult, int32_t onGetDataV1Result,
499762338dSopenharmony_ci        int32_t onTipResult, int32_t onMessageResult)
509762338dSopenharmony_ci        : onResultResult_(onResultResult), onGetDataResult_(onGetDataResult), onTipResult_(onTipResult),
519762338dSopenharmony_ci        onMessageResult_(onMessageResult)
529762338dSopenharmony_ci    {
539762338dSopenharmony_ci    }
549762338dSopenharmony_ci
559762338dSopenharmony_ci    int32_t OnResult(int32_t result, const std::vector<uint8_t> &extraInfo) override
569762338dSopenharmony_ci    {
579762338dSopenharmony_ci        cout << "result is " << result << " extraInfo len is " << extraInfo.size() << endl;
589762338dSopenharmony_ci        return onResultResult_;
599762338dSopenharmony_ci    }
609762338dSopenharmony_ci
619762338dSopenharmony_ci    int32_t OnGetData(const std::vector<uint8_t>& algoParameter, uint64_t authSubType, uint32_t algoVersion,
629762338dSopenharmony_ci         const std::vector<uint8_t>& challenge, const std::string &complexityReg) override
639762338dSopenharmony_ci    {
649762338dSopenharmony_ci        cout << "algoVersion is " << algoVersion << endl;
659762338dSopenharmony_ci        cout << " algoParameter len is " << algoParameter.size() << endl;
669762338dSopenharmony_ci        cout << " authSubType is " << authSubType << endl;
679762338dSopenharmony_ci        return onGetDataResult_;
689762338dSopenharmony_ci    }
699762338dSopenharmony_ci
709762338dSopenharmony_ci    int32_t OnTip(int32_t tip, const std::vector<uint8_t>& extraInfo) override
719762338dSopenharmony_ci    {
729762338dSopenharmony_ci        return onTipResult_;
739762338dSopenharmony_ci    }
749762338dSopenharmony_ci
759762338dSopenharmony_ci    int32_t OnMessage(int32_t destRole, const std::vector<uint8_t>& msg) override
769762338dSopenharmony_ci    {
779762338dSopenharmony_ci        return onMessageResult_;
789762338dSopenharmony_ci    }
799762338dSopenharmony_ci
809762338dSopenharmony_ciprivate:
819762338dSopenharmony_ci    int32_t onResultResult_;
829762338dSopenharmony_ci    int32_t onGetDataResult_;
839762338dSopenharmony_ci    int32_t onTipResult_;
849762338dSopenharmony_ci    int32_t onMessageResult_;
859762338dSopenharmony_ci};
869762338dSopenharmony_ci
879762338dSopenharmony_cistatic void FillTestIExecutorCallback(Parcel &parcel, sptr<IExecutorCallback> &callbackObj)
889762338dSopenharmony_ci{
899762338dSopenharmony_ci    bool isNull = parcel.ReadBool();
909762338dSopenharmony_ci    if (isNull) {
919762338dSopenharmony_ci        callbackObj = nullptr;
929762338dSopenharmony_ci    } else {
939762338dSopenharmony_ci        callbackObj = new (std::nothrow) DummyIExecutorCallback(parcel.ReadInt32(),
949762338dSopenharmony_ci            parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadInt32(), parcel.ReadInt32());
959762338dSopenharmony_ci        if (callbackObj == nullptr) {
969762338dSopenharmony_ci            cout << "callbackObj construct fail" << endl;
979762338dSopenharmony_ci        }
989762338dSopenharmony_ci    }
999762338dSopenharmony_ci}
1009762338dSopenharmony_ci
1019762338dSopenharmony_ci/**
1029762338dSopenharmony_ci * @tc.number: Security_IAM_PinAuth_HDI_NEW_FUNC_0104
1039762338dSopenharmony_ci * @tc.name: Test Authenticate
1049762338dSopenharmony_ci * @tc.size: MediumTest
1059762338dSopenharmony_ci * @tc.type: Function
1069762338dSopenharmony_ci * @tc.level: Level1
1079762338dSopenharmony_ci */
1089762338dSopenharmony_ciHWTEST_F(UserIamPinAuthTwoTest, Security_IAM_PinAuth_HDI_NEW_FUNC_0104, Function | MediumTest | Level1)
1099762338dSopenharmony_ci{
1109762338dSopenharmony_ci    cout << "start Authenticate" << endl;
1119762338dSopenharmony_ci
1129762338dSopenharmony_ci    uint64_t scheduleId = parcel.ReadUint64();
1139762338dSopenharmony_ci    uint64_t templateId = parcel.ReadUint64();
1149762338dSopenharmony_ci    std::vector<uint64_t> templateIdList;
1159762338dSopenharmony_ci    templateIdList.push_back(templateId);
1169762338dSopenharmony_ci    std::vector<uint8_t> extraInfo;
1179762338dSopenharmony_ci    FillTestUint8Vector(parcel, extraInfo);
1189762338dSopenharmony_ci    sptr<IExecutorCallback> callbackObj;
1199762338dSopenharmony_ci    FillTestIExecutorCallback(parcel, callbackObj);
1209762338dSopenharmony_ci    int32_t ret = g_executorImpl.Authenticate(scheduleId, templateIdList, extraInfo, callbackObj);
1219762338dSopenharmony_ci
1229762338dSopenharmony_ci    cout << "ret is " << ret << endl;
1239762338dSopenharmony_ci    ASSERT_EQ(ret != Expectedvalue1, false);
1249762338dSopenharmony_ci}