146debc2cSopenharmony_ci/*
246debc2cSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
346debc2cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
446debc2cSopenharmony_ci * you may not use this file except in compliance with the License.
546debc2cSopenharmony_ci * You may obtain a copy of the License at
646debc2cSopenharmony_ci *
746debc2cSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
846debc2cSopenharmony_ci *
946debc2cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1046debc2cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1146debc2cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1246debc2cSopenharmony_ci * See the License for the specific language governing permissions and
1346debc2cSopenharmony_ci * limitations under the License.
1446debc2cSopenharmony_ci */
1546debc2cSopenharmony_ci
1646debc2cSopenharmony_ci#define private public
1746debc2cSopenharmony_ci#define protected public
1846debc2cSopenharmony_ci#include "fuzzer/FuzzedDataProvider.h"
1946debc2cSopenharmony_ci#include "scanserviceability_fuzzer.h"
2046debc2cSopenharmony_ci#include "scan_service_ability.h"
2146debc2cSopenharmony_ci#include "scan_callback_proxy.h"
2246debc2cSopenharmony_ci#include "scan_service_ability_mock.h"
2346debc2cSopenharmony_ci
2446debc2cSopenharmony_cinamespace OHOS {
2546debc2cSopenharmony_cinamespace Scan {
2646debc2cSopenharmony_ci    constexpr size_t FOO_MAX_LEN = 1024;
2746debc2cSopenharmony_ci    constexpr size_t U32_AT_SIZE = 4;
2846debc2cSopenharmony_ci#ifdef SANE_ENABLE
2946debc2cSopenharmony_ci    constexpr uint8_t MAX_STRING_LENGTH = 255;
3046debc2cSopenharmony_ci    constexpr int MAX_SET_NUMBER = 100;
3146debc2cSopenharmony_ci
3246debc2cSopenharmony_ci    void TestInitScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
3346debc2cSopenharmony_ci    {
3446debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
3546debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
3646debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->ExitScan();
3746debc2cSopenharmony_ci    }
3846debc2cSopenharmony_ci
3946debc2cSopenharmony_ci    void TestGetScannerList(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
4046debc2cSopenharmony_ci    {
4146debc2cSopenharmony_ci        OHOS::Scan::ScanServiceAbilityMock::MockPermission();
4246debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
4346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
4446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GetScannerList();
4546debc2cSopenharmony_ci    }
4646debc2cSopenharmony_ci
4746debc2cSopenharmony_ci    void TestStopDiscover(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
4846debc2cSopenharmony_ci    {
4946debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
5046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
5146debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->StopDiscover();
5246debc2cSopenharmony_ci    }
5346debc2cSopenharmony_ci
5446debc2cSopenharmony_ci    void TestOpenScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
5546debc2cSopenharmony_ci    {
5646debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
5746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
5846debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
5946debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->OpenScanner(scannerId);
6046debc2cSopenharmony_ci    }
6146debc2cSopenharmony_ci
6246debc2cSopenharmony_ci    void TestCloseScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
6346debc2cSopenharmony_ci    {
6446debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
6546debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
6646debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
6746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->OpenScanner(scannerId);
6846debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->CloseScanner(scannerId);
6946debc2cSopenharmony_ci    }
7046debc2cSopenharmony_ci
7146debc2cSopenharmony_ci    void TestGetScanOptionDesc(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
7246debc2cSopenharmony_ci    {
7346debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
7446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
7546debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
7646debc2cSopenharmony_ci        int32_t optionIndex = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
7746debc2cSopenharmony_ci        ScanOptionDescriptor desc;
7846debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GetScanOptionDesc(scannerId, optionIndex, desc);
7946debc2cSopenharmony_ci    }
8046debc2cSopenharmony_ci
8146debc2cSopenharmony_ci    void TestStartScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
8246debc2cSopenharmony_ci    {
8346debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
8446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
8546debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
8646debc2cSopenharmony_ci        bool batchMode = dataProvider->ConsumeBool();
8746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->StartScan(scannerId, batchMode);
8846debc2cSopenharmony_ci    }
8946debc2cSopenharmony_ci
9046debc2cSopenharmony_ci    void TestGetSingleFrameFD(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
9146debc2cSopenharmony_ci    {
9246debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
9346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
9446debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
9546debc2cSopenharmony_ci        uint32_t frameSize = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
9646debc2cSopenharmony_ci        uint32_t fd = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
9746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GetSingleFrameFD(scannerId, frameSize, fd);
9846debc2cSopenharmony_ci    }
9946debc2cSopenharmony_ci
10046debc2cSopenharmony_ci    void TestCancelScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
10146debc2cSopenharmony_ci    {
10246debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
10346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
10446debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
10546debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->CancelScan(scannerId);
10646debc2cSopenharmony_ci    }
10746debc2cSopenharmony_ci
10846debc2cSopenharmony_ci    void TestSetScanIOMode(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
10946debc2cSopenharmony_ci    {
11046debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
11146debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
11246debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
11346debc2cSopenharmony_ci        bool isNonBlocking = dataProvider->ConsumeBool();
11446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScanIOMode(scannerId, isNonBlocking);
11546debc2cSopenharmony_ci    }
11646debc2cSopenharmony_ci
11746debc2cSopenharmony_ci    void TestGetScanSelectFd(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
11846debc2cSopenharmony_ci    {
11946debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
12046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
12146debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
12246debc2cSopenharmony_ci        int32_t fd = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
12346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GetScanSelectFd(scannerId, fd);
12446debc2cSopenharmony_ci    }
12546debc2cSopenharmony_ci
12646debc2cSopenharmony_ci    void TestOn(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
12746debc2cSopenharmony_ci    {
12846debc2cSopenharmony_ci        std::string taskId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
12946debc2cSopenharmony_ci        std::string type = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
13046debc2cSopenharmony_ci        sptr<IRemoteObject> impl;
13146debc2cSopenharmony_ci        ScanCallbackProxy scanCallbackProxy(impl);
13246debc2cSopenharmony_ci        sptr<IScanCallback> listener = iface_cast<IScanCallback>(impl);
13346debc2cSopenharmony_ci        ScanServiceAbility::registeredListeners_[type] = listener;
13446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->On(taskId, type, listener);
13546debc2cSopenharmony_ci        ScanServiceAbility::registeredListeners_.clear();
13646debc2cSopenharmony_ci    }
13746debc2cSopenharmony_ci
13846debc2cSopenharmony_ci    void TestOff(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
13946debc2cSopenharmony_ci    {
14046debc2cSopenharmony_ci        std::string taskId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
14146debc2cSopenharmony_ci        std::string type = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
14246debc2cSopenharmony_ci        sptr<IRemoteObject> impl;
14346debc2cSopenharmony_ci        ScanCallbackProxy scanCallbackProxy(impl);
14446debc2cSopenharmony_ci        sptr<IScanCallback> listener = iface_cast<IScanCallback>(impl);
14546debc2cSopenharmony_ci        ScanServiceAbility::registeredListeners_[type] = listener;
14646debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->Off(taskId, type);
14746debc2cSopenharmony_ci    }
14846debc2cSopenharmony_ci
14946debc2cSopenharmony_ci    void TestGetScannerState(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
15046debc2cSopenharmony_ci    {
15146debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
15246debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitScan(scanVersion);
15346debc2cSopenharmony_ci        int32_t scannerState = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
15446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GetScannerState(scannerState);
15546debc2cSopenharmony_ci    }
15646debc2cSopenharmony_ci
15746debc2cSopenharmony_ci    void TestSelectScanOptionDesc(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
15846debc2cSopenharmony_ci    {
15946debc2cSopenharmony_ci        SANE_Option_Descriptor optionDesc;
16046debc2cSopenharmony_ci        const SANE_Option_Descriptor *optionDescPtr = &optionDesc;
16146debc2cSopenharmony_ci        ScanOptionDescriptor desc;
16246debc2cSopenharmony_ci        optionDesc.constraint_type = SANE_CONSTRAINT_RANGE;
16346debc2cSopenharmony_ci        SANE_Range range;
16446debc2cSopenharmony_ci        range.min = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
16546debc2cSopenharmony_ci        range.max = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
16646debc2cSopenharmony_ci        range.quant = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
16746debc2cSopenharmony_ci        const SANE_Range* rangePtr = &range;
16846debc2cSopenharmony_ci        optionDesc.constraint.range = rangePtr;
16946debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SelectScanOptionDesc(optionDescPtr, desc);
17046debc2cSopenharmony_ci    }
17146debc2cSopenharmony_ci
17246debc2cSopenharmony_ci    void TestOnStartScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
17346debc2cSopenharmony_ci    {
17446debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
17546debc2cSopenharmony_ci        bool batchMode = dataProvider->ConsumeBool();
17646debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->OnStartScan(scannerId, batchMode);
17746debc2cSopenharmony_ci    }
17846debc2cSopenharmony_ci
17946debc2cSopenharmony_ci    void TestSendDeviceInfoTCP(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
18046debc2cSopenharmony_ci    {
18146debc2cSopenharmony_ci        ScanDeviceInfoTCP info;
18246debc2cSopenharmony_ci        std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
18346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SendDeviceInfoTCP(info, event);
18446debc2cSopenharmony_ci    }
18546debc2cSopenharmony_ci
18646debc2cSopenharmony_ci    void TestSendDeviceInfo(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
18746debc2cSopenharmony_ci    {
18846debc2cSopenharmony_ci        ScanDeviceInfo  info;
18946debc2cSopenharmony_ci        std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
19046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SendDeviceInfo(info, event);
19146debc2cSopenharmony_ci    }
19246debc2cSopenharmony_ci
19346debc2cSopenharmony_ci    void TestSendDeviceInfoSync(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
19446debc2cSopenharmony_ci    {
19546debc2cSopenharmony_ci        ScanDeviceInfoSync  info;
19646debc2cSopenharmony_ci        std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
19746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SendDeviceInfoSync(info, event);
19846debc2cSopenharmony_ci    }
19946debc2cSopenharmony_ci
20046debc2cSopenharmony_ci    void TestDisConnectUsbScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
20146debc2cSopenharmony_ci    {
20246debc2cSopenharmony_ci        std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
20346debc2cSopenharmony_ci        std::string newDeviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
20446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->DisConnectUsbScanner(serialNumber, newDeviceId);
20546debc2cSopenharmony_ci    }
20646debc2cSopenharmony_ci
20746debc2cSopenharmony_ci    void TestUpdateUsbScannerId(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
20846debc2cSopenharmony_ci    {
20946debc2cSopenharmony_ci        std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
21046debc2cSopenharmony_ci        std::string newDeviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
21146debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->UpdateUsbScannerId(serialNumber, newDeviceId);
21246debc2cSopenharmony_ci    }
21346debc2cSopenharmony_ci
21446debc2cSopenharmony_ci    void TestSendInitEvent(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
21546debc2cSopenharmony_ci    {
21646debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
21746debc2cSopenharmony_ci        std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
21846debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SendInitEvent(scanVersion, event);
21946debc2cSopenharmony_ci    }
22046debc2cSopenharmony_ci
22146debc2cSopenharmony_ci    void TestSendDeviceSearchEnd(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
22246debc2cSopenharmony_ci    {
22346debc2cSopenharmony_ci        std::string message = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
22446debc2cSopenharmony_ci        std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
22546debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SendDeviceSearchEnd(message, event);
22646debc2cSopenharmony_ci    }
22746debc2cSopenharmony_ci
22846debc2cSopenharmony_ci    void TestSetScannerSerialNumber(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
22946debc2cSopenharmony_ci    {
23046debc2cSopenharmony_ci        ScanDeviceInfo tcpInfo;
23146debc2cSopenharmony_ci        tcpInfo.deviceId = "pantum6500:tcp 192.168.223.1 9200-M6700DW";
23246debc2cSopenharmony_ci        std::string ip = "192.168.223.1";
23346debc2cSopenharmony_ci        ScanDeviceInfoTCP scanDeviceInfoTCP;
23446debc2cSopenharmony_ci        scanDeviceInfoTCP.deviceName = "Pantum 6666 54QWER";
23546debc2cSopenharmony_ci        ScanServiceAbility::scanDeviceInfoTCPMap_[ip] = scanDeviceInfoTCP;
23646debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScannerSerialNumber(tcpInfo);
23746debc2cSopenharmony_ci
23846debc2cSopenharmony_ci        tcpInfo.deviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
23946debc2cSopenharmony_ci        ip = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
24046debc2cSopenharmony_ci        scanDeviceInfoTCP.deviceName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
24146debc2cSopenharmony_ci        ScanServiceAbility::scanDeviceInfoTCPMap_[ip] = scanDeviceInfoTCP;
24246debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScannerSerialNumber(tcpInfo);
24346debc2cSopenharmony_ci
24446debc2cSopenharmony_ci        ScanDeviceInfo usbInfo;
24546debc2cSopenharmony_ci        usbInfo.deviceId = "pantum6500:libusb:002:003";
24646debc2cSopenharmony_ci        ScanServiceAbility::usbSnMap["2-3"] = "QWERTY";
24746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScannerSerialNumber(usbInfo);
24846debc2cSopenharmony_ci
24946debc2cSopenharmony_ci        usbInfo.deviceId = "pantum6500:libusb:002:004";
25046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScannerSerialNumber(usbInfo);
25146debc2cSopenharmony_ci        usbInfo.deviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
25246debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScannerSerialNumber(usbInfo);
25346debc2cSopenharmony_ci    }
25446debc2cSopenharmony_ci
25546debc2cSopenharmony_ci    void TestReInitScan(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
25646debc2cSopenharmony_ci    {
25746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->ServiceInit();
25846debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->InitServiceHandler();
25946debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->OnStart();
26046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->OnStop();
26146debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->ManualStart();
26246debc2cSopenharmony_ci        int32_t scanVersion = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
26346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->ReInitScan(scanVersion);
26446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SaneGetScanner();
26546debc2cSopenharmony_ci    }
26646debc2cSopenharmony_ci
26746debc2cSopenharmony_ci    void TestCheckPermission(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
26846debc2cSopenharmony_ci    {
26946debc2cSopenharmony_ci        std::string permissionName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
27046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->CheckPermission(permissionName);
27146debc2cSopenharmony_ci    }
27246debc2cSopenharmony_ci
27346debc2cSopenharmony_ci    void TestSendGetFrameResEvent(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
27446debc2cSopenharmony_ci    {
27546debc2cSopenharmony_ci        bool isGetSucc = dataProvider->ConsumeBool();
27646debc2cSopenharmony_ci        int32_t sizeRead = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
27746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SendGetFrameResEvent(isGetSucc, sizeRead);
27846debc2cSopenharmony_ci    }
27946debc2cSopenharmony_ci
28046debc2cSopenharmony_ci    void TestSetScanOptionDescriptor(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
28146debc2cSopenharmony_ci    {
28246debc2cSopenharmony_ci        ScanOptionDescriptor desc;
28346debc2cSopenharmony_ci        SANE_Option_Descriptor optionDesc;
28446debc2cSopenharmony_ci        optionDesc.name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
28546debc2cSopenharmony_ci        optionDesc.title = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
28646debc2cSopenharmony_ci        optionDesc.desc = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
28746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScanOptionDescriptor(desc, &optionDesc);
28846debc2cSopenharmony_ci    }
28946debc2cSopenharmony_ci
29046debc2cSopenharmony_ci    void TestGetScanHandle(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
29146debc2cSopenharmony_ci    {
29246debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
29346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GetScanHandle(scannerId);
29446debc2cSopenharmony_ci    }
29546debc2cSopenharmony_ci
29646debc2cSopenharmony_ci    void TestGeneratePictureBatch(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
29746debc2cSopenharmony_ci    {
29846debc2cSopenharmony_ci        int32_t status = E_SCAN_NONE;
29946debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
30046debc2cSopenharmony_ci        std::string file_name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
30146debc2cSopenharmony_ci        std::string output_file = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
30246debc2cSopenharmony_ci        ScanProgress* scanProPtr = nullptr;
30346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GeneratePictureSingle(scannerId, file_name, output_file, status, scanProPtr);
30446debc2cSopenharmony_ci    }
30546debc2cSopenharmony_ci
30646debc2cSopenharmony_ci    void TestAddFoundUsbScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
30746debc2cSopenharmony_ci    {
30846debc2cSopenharmony_ci        ScanDeviceInfo info;
30946debc2cSopenharmony_ci        info.serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
31046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->AddFoundUsbScanner(info);
31146debc2cSopenharmony_ci    }
31246debc2cSopenharmony_ci
31346debc2cSopenharmony_ci    void TestAddFoundTcpScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
31446debc2cSopenharmony_ci    {
31546debc2cSopenharmony_ci        ScanDeviceInfo info;
31646debc2cSopenharmony_ci        info.serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
31746debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->AddFoundTcpScanner(info);
31846debc2cSopenharmony_ci    }
31946debc2cSopenharmony_ci
32046debc2cSopenharmony_ci    void TestSetScannerInfo(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
32146debc2cSopenharmony_ci    {
32246debc2cSopenharmony_ci        SANE_Device currentDevice;
32346debc2cSopenharmony_ci        const SANE_Device* currentDevicePtr = &currentDevice;
32446debc2cSopenharmony_ci        const SANE_Device** currentDevicePtrPtr = &currentDevicePtr;
32546debc2cSopenharmony_ci        std::string name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
32646debc2cSopenharmony_ci        std::string vendor = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
32746debc2cSopenharmony_ci        std::string model = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
32846debc2cSopenharmony_ci        std::string type = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
32946debc2cSopenharmony_ci        currentDevice.name = name.c_str();
33046debc2cSopenharmony_ci        currentDevice.vendor = vendor.c_str();
33146debc2cSopenharmony_ci        currentDevice.vendor = model.c_str();
33246debc2cSopenharmony_ci        currentDevice.type = type.c_str();
33346debc2cSopenharmony_ci        ScanDeviceInfo info;
33446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SetScannerInfo(currentDevicePtrPtr, info);
33546debc2cSopenharmony_ci    }
33646debc2cSopenharmony_ci
33746debc2cSopenharmony_ci    void TestSendDeviceList(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
33846debc2cSopenharmony_ci    {
33946debc2cSopenharmony_ci        ScanDeviceInfo infoItem;
34046debc2cSopenharmony_ci        std::vector<ScanDeviceInfo> info;
34146debc2cSopenharmony_ci        info.push_back(infoItem);
34246debc2cSopenharmony_ci        std::string event = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
34346debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->SendDeviceList(info, event);
34446debc2cSopenharmony_ci    }
34546debc2cSopenharmony_ci
34646debc2cSopenharmony_ci    void TestAddScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
34746debc2cSopenharmony_ci    {
34846debc2cSopenharmony_ci        std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
34946debc2cSopenharmony_ci        std::string discoverMode = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
35046debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->AddScanner(serialNumber, discoverMode);
35146debc2cSopenharmony_ci    }
35246debc2cSopenharmony_ci
35346debc2cSopenharmony_ci    void TestUpdateScannerName(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
35446debc2cSopenharmony_ci    {
35546debc2cSopenharmony_ci        std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
35646debc2cSopenharmony_ci        std::string discoverMode = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
35746debc2cSopenharmony_ci        std::string deviceName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
35846debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->UpdateScannerName(serialNumber, discoverMode, deviceName);
35946debc2cSopenharmony_ci    }
36046debc2cSopenharmony_ci
36146debc2cSopenharmony_ci    void TestCleanScanTask(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
36246debc2cSopenharmony_ci    {
36346debc2cSopenharmony_ci        std::string scannerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
36446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->CleanScanTask(scannerId);
36546debc2cSopenharmony_ci    }
36646debc2cSopenharmony_ci
36746debc2cSopenharmony_ci    void TestGetAddedScanner(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
36846debc2cSopenharmony_ci    {
36946debc2cSopenharmony_ci        ScanDeviceInfo addedScanner;
37046debc2cSopenharmony_ci        std::string newDeviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
37146debc2cSopenharmony_ci        addedScanner.SetDeviceId(newDeviceId);
37246debc2cSopenharmony_ci        std::vector<ScanDeviceInfo> allAddedScanner;
37346debc2cSopenharmony_ci        allAddedScanner.push_back(addedScanner);
37446debc2cSopenharmony_ci        ScanServiceAbility::GetInstance()->GetAddedScanner(allAddedScanner);
37546debc2cSopenharmony_ci    }
37646debc2cSopenharmony_ci
37746debc2cSopenharmony_ci    void TestNotPublicFunction(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
37846debc2cSopenharmony_ci    {
37946debc2cSopenharmony_ci        if (dataProvider == nullptr) {
38046debc2cSopenharmony_ci            return;
38146debc2cSopenharmony_ci        }
38246debc2cSopenharmony_ci        OHOS::Scan::TestReInitScan(data, size, dataProvider);
38346debc2cSopenharmony_ci        OHOS::Scan::TestCheckPermission(data, size, dataProvider);
38446debc2cSopenharmony_ci        OHOS::Scan::TestSendGetFrameResEvent(data, size, dataProvider);
38546debc2cSopenharmony_ci        OHOS::Scan::TestSetScanOptionDescriptor(data, size, dataProvider);
38646debc2cSopenharmony_ci        OHOS::Scan::TestGetScanHandle(data, size, dataProvider);
38746debc2cSopenharmony_ci        OHOS::Scan::TestGeneratePictureBatch(data, size, dataProvider);
38846debc2cSopenharmony_ci        OHOS::Scan::TestAddFoundUsbScanner(data, size, dataProvider);
38946debc2cSopenharmony_ci        OHOS::Scan::TestAddFoundTcpScanner(data, size, dataProvider);
39046debc2cSopenharmony_ci        OHOS::Scan::TestSetScannerInfo(data, size, dataProvider);
39146debc2cSopenharmony_ci        OHOS::Scan::TestSendDeviceList(data, size, dataProvider);
39246debc2cSopenharmony_ci        OHOS::Scan::TestAddScanner(data, size, dataProvider);
39346debc2cSopenharmony_ci        OHOS::Scan::TestUpdateScannerName(data, size, dataProvider);
39446debc2cSopenharmony_ci        OHOS::Scan::TestCleanScanTask(data, size, dataProvider);
39546debc2cSopenharmony_ci        OHOS::Scan::TestGetAddedScanner(data, size, dataProvider);
39646debc2cSopenharmony_ci    }
39746debc2cSopenharmony_ci
39846debc2cSopenharmony_ci#endif
39946debc2cSopenharmony_ci
40046debc2cSopenharmony_ci}
40146debc2cSopenharmony_ci}
40246debc2cSopenharmony_ci
40346debc2cSopenharmony_ci/* Fuzzer entry point */
40446debc2cSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
40546debc2cSopenharmony_ci{
40646debc2cSopenharmony_ci    if (data == nullptr) {
40746debc2cSopenharmony_ci        return 0;
40846debc2cSopenharmony_ci    }
40946debc2cSopenharmony_ci
41046debc2cSopenharmony_ci    if (size < OHOS::Scan::U32_AT_SIZE || size > OHOS::Scan::FOO_MAX_LEN) {
41146debc2cSopenharmony_ci        return 0;
41246debc2cSopenharmony_ci    }
41346debc2cSopenharmony_ci#ifdef SANE_ENABLE
41446debc2cSopenharmony_ci    FuzzedDataProvider dataProvider(data, size);
41546debc2cSopenharmony_ci    OHOS::Scan::ScanServiceAbilityMock::MockPermission();
41646debc2cSopenharmony_ci    OHOS::Scan::TestInitScan(data, size, &dataProvider);
41746debc2cSopenharmony_ci    OHOS::Scan::TestGetScannerList(data, size, &dataProvider);
41846debc2cSopenharmony_ci    OHOS::Scan::TestStopDiscover(data, size, &dataProvider);
41946debc2cSopenharmony_ci    OHOS::Scan::TestOpenScanner(data, size, &dataProvider);
42046debc2cSopenharmony_ci    OHOS::Scan::TestCloseScanner(data, size, &dataProvider);
42146debc2cSopenharmony_ci    OHOS::Scan::TestGetScanOptionDesc(data, size, &dataProvider);
42246debc2cSopenharmony_ci    OHOS::Scan::TestStartScan(data, size, &dataProvider);
42346debc2cSopenharmony_ci    OHOS::Scan::TestGetSingleFrameFD(data, size, &dataProvider);
42446debc2cSopenharmony_ci    OHOS::Scan::TestCancelScan(data, size, &dataProvider);
42546debc2cSopenharmony_ci    OHOS::Scan::TestSetScanIOMode(data, size, &dataProvider);
42646debc2cSopenharmony_ci    OHOS::Scan::TestGetScanSelectFd(data, size, &dataProvider);
42746debc2cSopenharmony_ci    OHOS::Scan::TestOn(data, size, &dataProvider);
42846debc2cSopenharmony_ci    OHOS::Scan::TestOff(data, size, &dataProvider);
42946debc2cSopenharmony_ci    OHOS::Scan::TestGetScannerState(data, size, &dataProvider);
43046debc2cSopenharmony_ci    OHOS::Scan::TestSelectScanOptionDesc(data, size, &dataProvider);
43146debc2cSopenharmony_ci    OHOS::Scan::TestOnStartScan(data, size, &dataProvider);
43246debc2cSopenharmony_ci    OHOS::Scan::TestSendDeviceInfoTCP(data, size, &dataProvider);
43346debc2cSopenharmony_ci    OHOS::Scan::TestSendDeviceInfo(data, size, &dataProvider);
43446debc2cSopenharmony_ci    OHOS::Scan::TestSendDeviceInfoSync(data, size, &dataProvider);
43546debc2cSopenharmony_ci    OHOS::Scan::TestDisConnectUsbScanner(data, size, &dataProvider);
43646debc2cSopenharmony_ci    OHOS::Scan::TestUpdateUsbScannerId(data, size, &dataProvider);
43746debc2cSopenharmony_ci    OHOS::Scan::TestSendInitEvent(data, size, &dataProvider);
43846debc2cSopenharmony_ci    OHOS::Scan::TestSendDeviceSearchEnd(data, size, &dataProvider);
43946debc2cSopenharmony_ci    OHOS::Scan::TestSetScannerSerialNumber(data, size, &dataProvider);
44046debc2cSopenharmony_ci    OHOS::Scan::TestNotPublicFunction(data, size, &dataProvider);
44146debc2cSopenharmony_ci#endif
44246debc2cSopenharmony_ci    return 0;
44346debc2cSopenharmony_ci}