1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#include <gtest/gtest.h>
17094332d3Sopenharmony_ci#include <hdf_log.h>
18094332d3Sopenharmony_ci#include <linux/uinput.h>
19094332d3Sopenharmony_ci#include "v1_0/ihid_ddk.h"
20094332d3Sopenharmony_ci#include "accesstoken_kit.h"
21094332d3Sopenharmony_ci#include "nativetoken_kit.h"
22094332d3Sopenharmony_ci#include "token_setproc.h"
23094332d3Sopenharmony_ci
24094332d3Sopenharmony_ciusing namespace OHOS::HDI::Input::Ddk::V1_0;
25094332d3Sopenharmony_ciusing namespace testing::ext;
26094332d3Sopenharmony_ci
27094332d3Sopenharmony_cinamespace {
28094332d3Sopenharmony_ci    sptr<IHidDdk> g_hidDdk = nullptr;
29094332d3Sopenharmony_ci}
30094332d3Sopenharmony_ci
31094332d3Sopenharmony_ciclass HidDdkTest : public testing::Test {
32094332d3Sopenharmony_cipublic:
33094332d3Sopenharmony_ci    static void SetUpTestCase();
34094332d3Sopenharmony_ci    static void TearDownTestCase();
35094332d3Sopenharmony_ci    static void MockPermission();
36094332d3Sopenharmony_ci    void SetUp() override {};
37094332d3Sopenharmony_ci    void TearDown() override {};
38094332d3Sopenharmony_ci};
39094332d3Sopenharmony_ci
40094332d3Sopenharmony_civoid HidDdkTest::SetUpTestCase()
41094332d3Sopenharmony_ci{
42094332d3Sopenharmony_ci    HidDdkTest::MockPermission();
43094332d3Sopenharmony_ci    g_hidDdk = IHidDdk::Get();
44094332d3Sopenharmony_ci}
45094332d3Sopenharmony_ci
46094332d3Sopenharmony_civoid HidDdkTest::TearDownTestCase()
47094332d3Sopenharmony_ci{
48094332d3Sopenharmony_ci    g_hidDdk = nullptr;
49094332d3Sopenharmony_ci}
50094332d3Sopenharmony_ci
51094332d3Sopenharmony_civoid HidDdkTest::MockPermission()
52094332d3Sopenharmony_ci{
53094332d3Sopenharmony_ci    const char *permissions[] = {
54094332d3Sopenharmony_ci        "ohos.permission.ACCESS_DDK_HID"
55094332d3Sopenharmony_ci    };
56094332d3Sopenharmony_ci    NativeTokenInfoParams infoInstance = {
57094332d3Sopenharmony_ci        .dcapsNum = 0,
58094332d3Sopenharmony_ci        .permsNum = 1,
59094332d3Sopenharmony_ci        .aclsNum = 0,
60094332d3Sopenharmony_ci        .dcaps = nullptr,
61094332d3Sopenharmony_ci        .perms = permissions,
62094332d3Sopenharmony_ci        .acls = nullptr,
63094332d3Sopenharmony_ci        .processName = "hidDdkTestCase",
64094332d3Sopenharmony_ci        .aplStr = "system_core",
65094332d3Sopenharmony_ci    };
66094332d3Sopenharmony_ci    uint64_t tokenId = GetAccessTokenId(&infoInstance);
67094332d3Sopenharmony_ci    EXPECT_EQ(0, SetSelfTokenID(tokenId));
68094332d3Sopenharmony_ci    OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
69094332d3Sopenharmony_ci}
70094332d3Sopenharmony_ci
71094332d3Sopenharmony_ciHWTEST_F(HidDdkTest, CheckIHidDdkGet001, TestSize.Level1)
72094332d3Sopenharmony_ci{
73094332d3Sopenharmony_ci    ASSERT_NE(g_hidDdk, nullptr);
74094332d3Sopenharmony_ci}
75094332d3Sopenharmony_ci
76094332d3Sopenharmony_ciHWTEST_F(HidDdkTest, CreateDevice001, TestSize.Level1)
77094332d3Sopenharmony_ci{
78094332d3Sopenharmony_ci    struct Hid_Device hidDevice = {
79094332d3Sopenharmony_ci        .deviceName = "VSoC keyboard",
80094332d3Sopenharmony_ci        .vendorId = 0x6006,
81094332d3Sopenharmony_ci        .productId = 0x6008,
82094332d3Sopenharmony_ci        .version = 1,
83094332d3Sopenharmony_ci        .bustype = BUS_USB
84094332d3Sopenharmony_ci    };
85094332d3Sopenharmony_ci
86094332d3Sopenharmony_ci    struct Hid_EventProperties hidEventProp = {
87094332d3Sopenharmony_ci        .hidEventTypes = {HID_EV_KEY},
88094332d3Sopenharmony_ci        .hidKeys = {HID_KEY_1, HID_KEY_SPACE, HID_KEY_BACKSPACE, HID_KEY_ENTER}
89094332d3Sopenharmony_ci    };
90094332d3Sopenharmony_ci
91094332d3Sopenharmony_ci    uint32_t deviceId = 0;
92094332d3Sopenharmony_ci    int32_t ret = g_hidDdk->CreateDevice(hidDevice, hidEventProp, deviceId);
93094332d3Sopenharmony_ci    ASSERT_EQ(ret, 0);
94094332d3Sopenharmony_ci}
95094332d3Sopenharmony_ci
96094332d3Sopenharmony_ciHWTEST_F(HidDdkTest, EmitEvent001, TestSize.Level1)
97094332d3Sopenharmony_ci{
98094332d3Sopenharmony_ci    struct Hid_Device hidDevice = {
99094332d3Sopenharmony_ci        .deviceName = "VSoC keyboard",
100094332d3Sopenharmony_ci        .vendorId = 0x6006,
101094332d3Sopenharmony_ci        .productId = 0x6008,
102094332d3Sopenharmony_ci        .version = 1,
103094332d3Sopenharmony_ci        .bustype = BUS_USB
104094332d3Sopenharmony_ci    };
105094332d3Sopenharmony_ci
106094332d3Sopenharmony_ci    struct Hid_EventProperties hidEventProp = {
107094332d3Sopenharmony_ci        .hidEventTypes = {HID_EV_KEY},
108094332d3Sopenharmony_ci        .hidKeys = {HID_KEY_1, HID_KEY_SPACE, HID_KEY_BACKSPACE, HID_KEY_ENTER}
109094332d3Sopenharmony_ci    };
110094332d3Sopenharmony_ci
111094332d3Sopenharmony_ci    uint32_t deviceId = 0;
112094332d3Sopenharmony_ci    int32_t ret = g_hidDdk->CreateDevice(hidDevice, hidEventProp, deviceId);
113094332d3Sopenharmony_ci    ASSERT_EQ(ret, 0);
114094332d3Sopenharmony_ci
115094332d3Sopenharmony_ci    std::vector<struct Hid_EmitItem> items = {
116094332d3Sopenharmony_ci        {1, 0x14a, 108},
117094332d3Sopenharmony_ci        {3, 0,     50 },
118094332d3Sopenharmony_ci        {3, 1,     50 }
119094332d3Sopenharmony_ci    };
120094332d3Sopenharmony_ci
121094332d3Sopenharmony_ci    ret = g_hidDdk->EmitEvent(deviceId, items);
122094332d3Sopenharmony_ci    ASSERT_EQ(ret, 0);
123094332d3Sopenharmony_ci}
124094332d3Sopenharmony_ci
125094332d3Sopenharmony_ciHWTEST_F(HidDdkTest, EmitEvent002, TestSize.Level1)
126094332d3Sopenharmony_ci{
127094332d3Sopenharmony_ci    std::vector<struct Hid_EmitItem> items = {
128094332d3Sopenharmony_ci        {1, 0x14a, 108},
129094332d3Sopenharmony_ci        {3, 0,     50 },
130094332d3Sopenharmony_ci        {3, 1,     50 }
131094332d3Sopenharmony_ci    };
132094332d3Sopenharmony_ci    uint32_t deviceId = -1;
133094332d3Sopenharmony_ci    int32_t ret = g_hidDdk->EmitEvent(deviceId, items);
134094332d3Sopenharmony_ci    ASSERT_NE(ret, 0);
135094332d3Sopenharmony_ci}
136094332d3Sopenharmony_ci
137094332d3Sopenharmony_ciHWTEST_F(HidDdkTest, DestroyDevice001, TestSize.Level1)
138094332d3Sopenharmony_ci{
139094332d3Sopenharmony_ci    struct Hid_Device hidDevice = {
140094332d3Sopenharmony_ci        .deviceName = "VSoC keyboard",
141094332d3Sopenharmony_ci        .vendorId = 0x6006,
142094332d3Sopenharmony_ci        .productId = 0x6008,
143094332d3Sopenharmony_ci        .version = 1,
144094332d3Sopenharmony_ci        .bustype = BUS_USB
145094332d3Sopenharmony_ci    };
146094332d3Sopenharmony_ci
147094332d3Sopenharmony_ci    struct Hid_EventProperties hidEventProp = {
148094332d3Sopenharmony_ci        .hidEventTypes = {HID_EV_KEY},
149094332d3Sopenharmony_ci        .hidKeys = {HID_KEY_1, HID_KEY_SPACE, HID_KEY_BACKSPACE, HID_KEY_ENTER}
150094332d3Sopenharmony_ci    };
151094332d3Sopenharmony_ci
152094332d3Sopenharmony_ci    uint32_t deviceId = 0;
153094332d3Sopenharmony_ci    int32_t ret = g_hidDdk->CreateDevice(hidDevice, hidEventProp, deviceId);
154094332d3Sopenharmony_ci    ASSERT_EQ(ret, 0);
155094332d3Sopenharmony_ci
156094332d3Sopenharmony_ci    ret = g_hidDdk->DestroyDevice(deviceId);
157094332d3Sopenharmony_ci    ASSERT_EQ(ret, 0);
158094332d3Sopenharmony_ci}
159094332d3Sopenharmony_ci
160094332d3Sopenharmony_ciHWTEST_F(HidDdkTest, DestroyDevice002, TestSize.Level1)
161094332d3Sopenharmony_ci{
162094332d3Sopenharmony_ci    uint32_t deviceId = -1;
163094332d3Sopenharmony_ci    int32_t ret = g_hidDdk->DestroyDevice(deviceId);
164094332d3Sopenharmony_ci    ASSERT_NE(ret, 0);
165094332d3Sopenharmony_ci}
166