19762338dSopenharmony_ci/*
29762338dSopenharmony_ci * Copyright (c) 2022 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 "iam_hat_test.h"
179762338dSopenharmony_ci
189762338dSopenharmony_ci#include <cstdint>
199762338dSopenharmony_ci#include <string>
209762338dSopenharmony_ci#include <vector>
219762338dSopenharmony_ci
229762338dSopenharmony_ci#include "parcel.h"
239762338dSopenharmony_ci#include "securec.h"
249762338dSopenharmony_ci
259762338dSopenharmony_ciusing namespace std;
269762338dSopenharmony_ci
279762338dSopenharmony_ci
289762338dSopenharmony_ci#define LOG_LABEL UserIam::Common::LABEL_IAM_COMMON
299762338dSopenharmony_ci
309762338dSopenharmony_cinamespace OHOS {
319762338dSopenharmony_ci    namespace UserIam {
329762338dSopenharmony_ci        namespace Common {
339762338dSopenharmony_ci            namespace {
349762338dSopenharmony_ci                constexpr int32_t MAX_DATA_LEN = 200;
359762338dSopenharmony_ci                void FillTestBuffer(Parcel &parcel, void *p, uint32_t len)
369762338dSopenharmony_ci                {
379762338dSopenharmony_ci                    if (len == 0) {
389762338dSopenharmony_ci                        return;
399762338dSopenharmony_ci                    }
409762338dSopenharmony_ci
419762338dSopenharmony_ci                    auto buffer = parcel.ReadBuffer(len);
429762338dSopenharmony_ci                    if (buffer == nullptr) {
439762338dSopenharmony_ci                        cout << "ReadBuffer len " << len << " fail!" << endl;
449762338dSopenharmony_ci                        return;
459762338dSopenharmony_ci                    }
469762338dSopenharmony_ci
479762338dSopenharmony_ci                    if (memcpy_s(p, len, buffer, len) != EOK) {
489762338dSopenharmony_ci                        cout << "memcpy_s fail" << endl;
499762338dSopenharmony_ci                        return;
509762338dSopenharmony_ci                    }
519762338dSopenharmony_ci
529762338dSopenharmony_ci                    return;
539762338dSopenharmony_ci                }
549762338dSopenharmony_ci            } // namespace
559762338dSopenharmony_ci
569762338dSopenharmony_ci            void FillTestUint8Vector(Parcel &parcel, std::vector<uint8_t> &data)
579762338dSopenharmony_ci            {
589762338dSopenharmony_ci                uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN;
599762338dSopenharmony_ci                uint32_t memLen = len * sizeof(uint8_t);
609762338dSopenharmony_ci                data.resize(len);
619762338dSopenharmony_ci                FillTestBuffer(parcel, static_cast<void *>(&data[0]), memLen);
629762338dSopenharmony_ci                cout << "fill vector len " << len << "ok" << endl;
639762338dSopenharmony_ci            }
649762338dSopenharmony_ci
659762338dSopenharmony_ci            void FillTestInt8Vector(Parcel &parcel, std::vector<int8_t> &data)
669762338dSopenharmony_ci            {
679762338dSopenharmony_ci                uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN;
689762338dSopenharmony_ci                uint32_t memLen = len * sizeof(int8_t);
699762338dSopenharmony_ci                data.resize(len);
709762338dSopenharmony_ci                FillTestBuffer(parcel, static_cast<void *>(&data[0]), memLen);
719762338dSopenharmony_ci                cout << "fill vector len " << len << "ok" << endl;
729762338dSopenharmony_ci            }
739762338dSopenharmony_ci
749762338dSopenharmony_ci            void FillTestUint32Vector(Parcel &parcel, std::vector<uint32_t> &data)
759762338dSopenharmony_ci            {
769762338dSopenharmony_ci                uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN;
779762338dSopenharmony_ci                uint32_t memLen = len * sizeof(uint32_t);
789762338dSopenharmony_ci                data.resize(len);
799762338dSopenharmony_ci                FillTestBuffer(parcel, static_cast<void *>(&data[0]), memLen);
809762338dSopenharmony_ci                cout << "fill vector len " << len << "ok" << endl;
819762338dSopenharmony_ci            }
829762338dSopenharmony_ci
839762338dSopenharmony_ci            void FillTestInt32Vector(Parcel &parcel, std::vector<int32_t> &data)
849762338dSopenharmony_ci            {
859762338dSopenharmony_ci                uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN;
869762338dSopenharmony_ci                uint32_t memLen = len * sizeof(int32_t);
879762338dSopenharmony_ci                data.resize(len);
889762338dSopenharmony_ci                FillTestBuffer(parcel, static_cast<void *>(&data[0]), memLen);
899762338dSopenharmony_ci                cout << "fill vector len " << len << "ok" << endl;
909762338dSopenharmony_ci            }
919762338dSopenharmony_ci
929762338dSopenharmony_ci            void FillTestUint64Vector(Parcel &parcel, std::vector<uint64_t> &data)
939762338dSopenharmony_ci            {
949762338dSopenharmony_ci                uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN;
959762338dSopenharmony_ci                uint32_t memLen = len * sizeof(uint64_t);
969762338dSopenharmony_ci                data.resize(len);
979762338dSopenharmony_ci                FillTestBuffer(parcel, static_cast<void *>(&data[0]), memLen);
989762338dSopenharmony_ci                cout << "fill vector len " << len << "ok" << endl;
999762338dSopenharmony_ci            }
1009762338dSopenharmony_ci
1019762338dSopenharmony_ci            void FillTestString(Parcel &parcel, std::string &str)
1029762338dSopenharmony_ci            {
1039762338dSopenharmony_ci                uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN + 1;
1049762338dSopenharmony_ci                uint32_t memLen = len * sizeof(char);
1059762338dSopenharmony_ci                std::vector<char> data(len, 0);
1069762338dSopenharmony_ci                FillTestBuffer(parcel, static_cast<void *>(&data[0]), memLen - 1);
1079762338dSopenharmony_ci                str = std::string(&data[0]);
1089762338dSopenharmony_ci                cout << "fill string len " << (len - 1) << " ok" << endl;
1099762338dSopenharmony_ci            }
1109762338dSopenharmony_ci        } // namespace Common
1119762338dSopenharmony_ci    }     // namespace UserIam
1129762338dSopenharmony_ci} // namespace OHOS