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 #include <gtest/gtest.h>
17 #include <hdf_log.h>
18 #include <linux/uinput.h>
19 #include "v1_0/ihid_ddk.h"
20 #include "accesstoken_kit.h"
21 #include "nativetoken_kit.h"
22 #include "token_setproc.h"
23
24 using namespace OHOS::HDI::Input::Ddk::V1_0;
25 using namespace testing::ext;
26
27 namespace {
28 sptr<IHidDdk> g_hidDdk = nullptr;
29 }
30
31 class HidDdkTest : public testing::Test {
32 public:
33 static void SetUpTestCase();
34 static void TearDownTestCase();
35 static void MockPermission();
SetUp()36 void SetUp() override {};
TearDown()37 void TearDown() override {};
38 };
39
SetUpTestCase()40 void HidDdkTest::SetUpTestCase()
41 {
42 HidDdkTest::MockPermission();
43 g_hidDdk = IHidDdk::Get();
44 }
45
TearDownTestCase()46 void HidDdkTest::TearDownTestCase()
47 {
48 g_hidDdk = nullptr;
49 }
50
MockPermission()51 void HidDdkTest::MockPermission()
52 {
53 const char *permissions[] = {
54 "ohos.permission.ACCESS_DDK_HID"
55 };
56 NativeTokenInfoParams infoInstance = {
57 .dcapsNum = 0,
58 .permsNum = 1,
59 .aclsNum = 0,
60 .dcaps = nullptr,
61 .perms = permissions,
62 .acls = nullptr,
63 .processName = "hidDdkTestCase",
64 .aplStr = "system_core",
65 };
66 uint64_t tokenId = GetAccessTokenId(&infoInstance);
67 EXPECT_EQ(0, SetSelfTokenID(tokenId));
68 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
69 }
70
71 HWTEST_F(HidDdkTest, CheckIHidDdkGet001, TestSize.Level1)
72 {
73 ASSERT_NE(g_hidDdk, nullptr);
74 }
75
76 HWTEST_F(HidDdkTest, CreateDevice001, TestSize.Level1)
77 {
78 struct Hid_Device hidDevice = {
79 .deviceName = "VSoC keyboard",
80 .vendorId = 0x6006,
81 .productId = 0x6008,
82 .version = 1,
83 .bustype = BUS_USB
84 };
85
86 struct Hid_EventProperties hidEventProp = {
87 .hidEventTypes = {HID_EV_KEY},
88 .hidKeys = {HID_KEY_1, HID_KEY_SPACE, HID_KEY_BACKSPACE, HID_KEY_ENTER}
89 };
90
91 uint32_t deviceId = 0;
92 int32_t ret = g_hidDdk->CreateDevice(hidDevice, hidEventProp, deviceId);
93 ASSERT_EQ(ret, 0);
94 }
95
96 HWTEST_F(HidDdkTest, EmitEvent001, TestSize.Level1)
97 {
98 struct Hid_Device hidDevice = {
99 .deviceName = "VSoC keyboard",
100 .vendorId = 0x6006,
101 .productId = 0x6008,
102 .version = 1,
103 .bustype = BUS_USB
104 };
105
106 struct Hid_EventProperties hidEventProp = {
107 .hidEventTypes = {HID_EV_KEY},
108 .hidKeys = {HID_KEY_1, HID_KEY_SPACE, HID_KEY_BACKSPACE, HID_KEY_ENTER}
109 };
110
111 uint32_t deviceId = 0;
112 int32_t ret = g_hidDdk->CreateDevice(hidDevice, hidEventProp, deviceId);
113 ASSERT_EQ(ret, 0);
114
115 std::vector<struct Hid_EmitItem> items = {
116 {1, 0x14a, 108},
117 {3, 0, 50 },
118 {3, 1, 50 }
119 };
120
121 ret = g_hidDdk->EmitEvent(deviceId, items);
122 ASSERT_EQ(ret, 0);
123 }
124
125 HWTEST_F(HidDdkTest, EmitEvent002, TestSize.Level1)
126 {
127 std::vector<struct Hid_EmitItem> items = {
128 {1, 0x14a, 108},
129 {3, 0, 50 },
130 {3, 1, 50 }
131 };
132 uint32_t deviceId = -1;
133 int32_t ret = g_hidDdk->EmitEvent(deviceId, items);
134 ASSERT_NE(ret, 0);
135 }
136
137 HWTEST_F(HidDdkTest, DestroyDevice001, TestSize.Level1)
138 {
139 struct Hid_Device hidDevice = {
140 .deviceName = "VSoC keyboard",
141 .vendorId = 0x6006,
142 .productId = 0x6008,
143 .version = 1,
144 .bustype = BUS_USB
145 };
146
147 struct Hid_EventProperties hidEventProp = {
148 .hidEventTypes = {HID_EV_KEY},
149 .hidKeys = {HID_KEY_1, HID_KEY_SPACE, HID_KEY_BACKSPACE, HID_KEY_ENTER}
150 };
151
152 uint32_t deviceId = 0;
153 int32_t ret = g_hidDdk->CreateDevice(hidDevice, hidEventProp, deviceId);
154 ASSERT_EQ(ret, 0);
155
156 ret = g_hidDdk->DestroyDevice(deviceId);
157 ASSERT_EQ(ret, 0);
158 }
159
160 HWTEST_F(HidDdkTest, DestroyDevice002, TestSize.Level1)
161 {
162 uint32_t deviceId = -1;
163 int32_t ret = g_hidDdk->DestroyDevice(deviceId);
164 ASSERT_NE(ret, 0);
165 }
166