1c29fa5a6Sopenharmony_ci/*
2c29fa5a6Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License.
5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at
6c29fa5a6Sopenharmony_ci *
7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8c29fa5a6Sopenharmony_ci *
9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and
13c29fa5a6Sopenharmony_ci * limitations under the License.
14c29fa5a6Sopenharmony_ci */
15c29fa5a6Sopenharmony_ci
16c29fa5a6Sopenharmony_ci#include <libudev.h>
17c29fa5a6Sopenharmony_ci
18c29fa5a6Sopenharmony_ci#include <gmock/gmock.h>
19c29fa5a6Sopenharmony_ci#include <gtest/gtest.h>
20c29fa5a6Sopenharmony_ci
21c29fa5a6Sopenharmony_ci#include "test_device.h"
22c29fa5a6Sopenharmony_ci
23c29fa5a6Sopenharmony_ciusing ::testing::ext::TestSize;
24c29fa5a6Sopenharmony_ci
25c29fa5a6Sopenharmony_ciclass UdevTestDevice : public TestDevice {
26c29fa5a6Sopenharmony_cipublic:
27c29fa5a6Sopenharmony_ci    UdevTestDevice()
28c29fa5a6Sopenharmony_ci    {
29c29fa5a6Sopenharmony_ci        udev_ = udev_new();
30c29fa5a6Sopenharmony_ci    }
31c29fa5a6Sopenharmony_ci
32c29fa5a6Sopenharmony_ci    ~UdevTestDevice()
33c29fa5a6Sopenharmony_ci    {
34c29fa5a6Sopenharmony_ci        if (udevDevice_ != nullptr) {
35c29fa5a6Sopenharmony_ci            udevDevice_ = udev_device_unref(udevDevice_);
36c29fa5a6Sopenharmony_ci        }
37c29fa5a6Sopenharmony_ci        udev_unref(udev_);
38c29fa5a6Sopenharmony_ci    }
39c29fa5a6Sopenharmony_ci
40c29fa5a6Sopenharmony_ci    void Init(bool def = true)
41c29fa5a6Sopenharmony_ci    {
42c29fa5a6Sopenharmony_ci        ASSERT_NE(udev_, nullptr);
43c29fa5a6Sopenharmony_ci        ASSERT_NO_FATAL_FAILURE(TestDevice::Init(def));
44c29fa5a6Sopenharmony_ci        udevDevice_ = udev_device_new_from_devnum(udev_, 'c', GetDevNum());
45c29fa5a6Sopenharmony_ci        ASSERT_NE(udevDevice_, nullptr);
46c29fa5a6Sopenharmony_ci    }
47c29fa5a6Sopenharmony_ci
48c29fa5a6Sopenharmony_ci    auto GetUdev() const
49c29fa5a6Sopenharmony_ci    {
50c29fa5a6Sopenharmony_ci        return udev_;
51c29fa5a6Sopenharmony_ci    }
52c29fa5a6Sopenharmony_ci
53c29fa5a6Sopenharmony_ci    auto GetDevice() const
54c29fa5a6Sopenharmony_ci    {
55c29fa5a6Sopenharmony_ci        return udevDevice_;
56c29fa5a6Sopenharmony_ci    }
57c29fa5a6Sopenharmony_ci
58c29fa5a6Sopenharmony_ciprivate:
59c29fa5a6Sopenharmony_ci    struct udev* udev_{};
60c29fa5a6Sopenharmony_ci    struct udev_device* udevDevice_{};
61c29fa5a6Sopenharmony_ci};
62c29fa5a6Sopenharmony_ci
63c29fa5a6Sopenharmony_ciclass CustomUdevTest : public ::testing::Test {
64c29fa5a6Sopenharmony_cipublic:
65c29fa5a6Sopenharmony_ci    UdevTestDevice testDevice_;
66c29fa5a6Sopenharmony_ci};
67c29fa5a6Sopenharmony_ci
68c29fa5a6Sopenharmony_ci/*
69c29fa5a6Sopenharmony_ci * Tests:
70c29fa5a6Sopenharmony_ci * udev_device_new_from_devnum (uses udev_device_new_from_syspath)
71c29fa5a6Sopenharmony_ci * udev_device_get_udev
72c29fa5a6Sopenharmony_ci * udev_device_ref
73c29fa5a6Sopenharmony_ci * udev_device_unref
74c29fa5a6Sopenharmony_ci */
75c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestBasics, TestSize.Level1)
76c29fa5a6Sopenharmony_ci{
77c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
78c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
79c29fa5a6Sopenharmony_ci
80c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_udev(device), testDevice_.GetUdev());
81c29fa5a6Sopenharmony_ci
82c29fa5a6Sopenharmony_ci    auto* res = udev_device_ref(device);
83c29fa5a6Sopenharmony_ci    EXPECT_NE(res, nullptr);
84c29fa5a6Sopenharmony_ci    EXPECT_EQ(res, device);
85c29fa5a6Sopenharmony_ci
86c29fa5a6Sopenharmony_ci    res = udev_device_unref(device);
87c29fa5a6Sopenharmony_ci    EXPECT_EQ(res, nullptr);
88c29fa5a6Sopenharmony_ci}
89c29fa5a6Sopenharmony_ci
90c29fa5a6Sopenharmony_ci/*
91c29fa5a6Sopenharmony_ci * Tests negative cases for:
92c29fa5a6Sopenharmony_ci * udev_device_new_from_devnum (uses udev_device_new_from_syspath)
93c29fa5a6Sopenharmony_ci * udev_device_get_udev
94c29fa5a6Sopenharmony_ci * udev_device_ref
95c29fa5a6Sopenharmony_ci * udev_device_unref
96c29fa5a6Sopenharmony_ci */
97c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestBasicsFail, TestSize.Level1)
98c29fa5a6Sopenharmony_ci{
99c29fa5a6Sopenharmony_ci    errno = 0;
100c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_udev(nullptr), nullptr);
101c29fa5a6Sopenharmony_ci    EXPECT_NE(errno, 0);
102c29fa5a6Sopenharmony_ci
103c29fa5a6Sopenharmony_ci    errno = 0;
104c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_ref(nullptr), nullptr);
105c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
106c29fa5a6Sopenharmony_ci
107c29fa5a6Sopenharmony_ci    errno = 0;
108c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_unref(nullptr), nullptr);
109c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
110c29fa5a6Sopenharmony_ci}
111c29fa5a6Sopenharmony_ci
112c29fa5a6Sopenharmony_ci/*
113c29fa5a6Sopenharmony_ci * Tests negative cases for:
114c29fa5a6Sopenharmony_ci * udev_device_new_from_devnum
115c29fa5a6Sopenharmony_ci */
116c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestNewFail1, TestSize.Level1)
117c29fa5a6Sopenharmony_ci{
118c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
119c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
120c29fa5a6Sopenharmony_ci    auto devnum = testDevice_.GetDevNum();
121c29fa5a6Sopenharmony_ci    auto* udev = udev_device_get_udev(device);
122c29fa5a6Sopenharmony_ci    ASSERT_NE(udev, nullptr);
123c29fa5a6Sopenharmony_ci
124c29fa5a6Sopenharmony_ci    errno = 0;
125c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_devnum(nullptr, 'c', devnum), nullptr);
126c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, EINVAL);
127c29fa5a6Sopenharmony_ci
128c29fa5a6Sopenharmony_ci    errno = 0;
129c29fa5a6Sopenharmony_ci    // Invalid device type
130c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_devnum(udev, 'a', devnum), nullptr);
131c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, EINVAL);
132c29fa5a6Sopenharmony_ci
133c29fa5a6Sopenharmony_ci    errno = 0;
134c29fa5a6Sopenharmony_ci    // Wrong devnum
135c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_devnum(udev, 'b', devnum), nullptr);
136c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, ENOENT);
137c29fa5a6Sopenharmony_ci
138c29fa5a6Sopenharmony_ci    errno = 0;
139c29fa5a6Sopenharmony_ci    // Invalid devnum
140c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_devnum(udev, 'c', 0), nullptr);
141c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, ENOENT);
142c29fa5a6Sopenharmony_ci}
143c29fa5a6Sopenharmony_ci
144c29fa5a6Sopenharmony_ci/*
145c29fa5a6Sopenharmony_ci * Tests negative cases for:
146c29fa5a6Sopenharmony_ci * udev_device_new_from_syspath
147c29fa5a6Sopenharmony_ci */
148c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestNewFail2, TestSize.Level1)
149c29fa5a6Sopenharmony_ci{
150c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
151c29fa5a6Sopenharmony_ci    auto* udev = udev_device_get_udev(testDevice_.GetDevice());
152c29fa5a6Sopenharmony_ci    ASSERT_NE(udev, nullptr);
153c29fa5a6Sopenharmony_ci
154c29fa5a6Sopenharmony_ci    errno = 0;
155c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_syspath(nullptr, testDevice_.GetSysPath()), nullptr);
156c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, EINVAL);
157c29fa5a6Sopenharmony_ci
158c29fa5a6Sopenharmony_ci    errno = 0;
159c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_syspath(udev, nullptr), nullptr);
160c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, EINVAL);
161c29fa5a6Sopenharmony_ci
162c29fa5a6Sopenharmony_ci    errno = 0;
163c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_syspath(udev, "/system"), nullptr);
164c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, EINVAL);
165c29fa5a6Sopenharmony_ci
166c29fa5a6Sopenharmony_ci    errno = 0;
167c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_syspath(udev, "/sys/unknown"), nullptr);
168c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, ENOENT);
169c29fa5a6Sopenharmony_ci
170c29fa5a6Sopenharmony_ci    errno = 0;
171c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_new_from_syspath(udev, "/sys/char/0:0"), nullptr);
172c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, ENOENT);
173c29fa5a6Sopenharmony_ci}
174c29fa5a6Sopenharmony_ci
175c29fa5a6Sopenharmony_ci/*
176c29fa5a6Sopenharmony_ci * Tests:
177c29fa5a6Sopenharmony_ci * udev_device_get_is_initialized()
178c29fa5a6Sopenharmony_ci */
179c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestIsInitialized, TestSize.Level1)
180c29fa5a6Sopenharmony_ci{
181c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
182c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
183c29fa5a6Sopenharmony_ci
184c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_is_initialized(device), 1);
185c29fa5a6Sopenharmony_ci
186c29fa5a6Sopenharmony_ci    errno = 0;
187c29fa5a6Sopenharmony_ci    EXPECT_LT(udev_device_get_is_initialized(nullptr), 0);
188c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
189c29fa5a6Sopenharmony_ci}
190c29fa5a6Sopenharmony_ci
191c29fa5a6Sopenharmony_ci/*
192c29fa5a6Sopenharmony_ci * Tests:
193c29fa5a6Sopenharmony_ci * udev_device_get_devnode()
194c29fa5a6Sopenharmony_ci */
195c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestGetDevnode, TestSize.Level1)
196c29fa5a6Sopenharmony_ci{
197c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
198c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
199c29fa5a6Sopenharmony_ci
200c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_devnode(device), testDevice_.GetDevNode());
201c29fa5a6Sopenharmony_ci
202c29fa5a6Sopenharmony_ci    errno = 0;
203c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_devnode(nullptr), nullptr);
204c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
205c29fa5a6Sopenharmony_ci}
206c29fa5a6Sopenharmony_ci
207c29fa5a6Sopenharmony_ci/*
208c29fa5a6Sopenharmony_ci * Test for:
209c29fa5a6Sopenharmony_ci * udev_device_get_sysname()
210c29fa5a6Sopenharmony_ci */
211c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestGetSysname, TestSize.Level1)
212c29fa5a6Sopenharmony_ci{
213c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
214c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
215c29fa5a6Sopenharmony_ci
216c29fa5a6Sopenharmony_ci    EXPECT_EQ(std::string("/dev/input/") + udev_device_get_sysname(device), testDevice_.GetDevNode());
217c29fa5a6Sopenharmony_ci
218c29fa5a6Sopenharmony_ci    errno = 0;
219c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_sysname(nullptr), nullptr);
220c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
221c29fa5a6Sopenharmony_ci}
222c29fa5a6Sopenharmony_ci
223c29fa5a6Sopenharmony_ci/*
224c29fa5a6Sopenharmony_ci * Test for:
225c29fa5a6Sopenharmony_ci * udev_device_get_syspath()
226c29fa5a6Sopenharmony_ci */
227c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestGetSyspath, TestSize.Level1)
228c29fa5a6Sopenharmony_ci{
229c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
230c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
231c29fa5a6Sopenharmony_ci
232c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_syspath(device),
233c29fa5a6Sopenharmony_ci        testDevice_.GetSysPath() + std::string("/") + udev_device_get_sysname(device));
234c29fa5a6Sopenharmony_ci
235c29fa5a6Sopenharmony_ci    errno = 0;
236c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_syspath(nullptr), nullptr);
237c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
238c29fa5a6Sopenharmony_ci}
239c29fa5a6Sopenharmony_ci
240c29fa5a6Sopenharmony_ci/*
241c29fa5a6Sopenharmony_ci * Test for:
242c29fa5a6Sopenharmony_ci * udev_device_get_property_value()
243c29fa5a6Sopenharmony_ci * Properties:
244c29fa5a6Sopenharmony_ci * - DEVNAME
245c29fa5a6Sopenharmony_ci * - MAJOR
246c29fa5a6Sopenharmony_ci * - MINOR
247c29fa5a6Sopenharmony_ci */
248c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestGetProperty, TestSize.Level1)
249c29fa5a6Sopenharmony_ci{
250c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
251c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
252c29fa5a6Sopenharmony_ci
253c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(device, "DEVNAME"), testDevice_.GetDevNode());
254c29fa5a6Sopenharmony_ci
255c29fa5a6Sopenharmony_ci    auto devnum = testDevice_.GetDevNum();
256c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_property_value(device, "MINOR"), std::to_string(minor(devnum)));
257c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_property_value(device, "MAJOR"), std::to_string(major(devnum)));
258c29fa5a6Sopenharmony_ci
259c29fa5a6Sopenharmony_ci    errno = 0;
260c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_property_value(nullptr, "DEVNAME"), nullptr);
261c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
262c29fa5a6Sopenharmony_ci
263c29fa5a6Sopenharmony_ci    errno = 0;
264c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_property_value(device, nullptr), nullptr);
265c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
266c29fa5a6Sopenharmony_ci
267c29fa5a6Sopenharmony_ci    errno = 0;
268c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_property_value(device, "UNKNOWN"), nullptr);
269c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
270c29fa5a6Sopenharmony_ci}
271c29fa5a6Sopenharmony_ci
272c29fa5a6Sopenharmony_ci/*
273c29fa5a6Sopenharmony_ci * Test for:
274c29fa5a6Sopenharmony_ci * udev_device_get_parent()
275c29fa5a6Sopenharmony_ci */
276c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestGetParent1, TestSize.Level1)
277c29fa5a6Sopenharmony_ci{
278c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
279c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
280c29fa5a6Sopenharmony_ci
281c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
282c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
283c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_syspath(parent), testDevice_.GetSysPath());
284c29fa5a6Sopenharmony_ci
285c29fa5a6Sopenharmony_ci    errno = 0;
286c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_parent(nullptr), nullptr);
287c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, EINVAL);
288c29fa5a6Sopenharmony_ci}
289c29fa5a6Sopenharmony_ci
290c29fa5a6Sopenharmony_ci/*
291c29fa5a6Sopenharmony_ci * Test for:
292c29fa5a6Sopenharmony_ci * udev_device_get_parent_with_subsystem_devtype()
293c29fa5a6Sopenharmony_ci */
294c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestGetParent2, TestSize.Level1)
295c29fa5a6Sopenharmony_ci{
296c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
297c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
298c29fa5a6Sopenharmony_ci
299c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent_with_subsystem_devtype(device, "input", nullptr);
300c29fa5a6Sopenharmony_ci    ASSERT_EQ(parent, nullptr);
301c29fa5a6Sopenharmony_ci    EXPECT_NE(udev_device_get_syspath(parent), testDevice_.GetSysPath());
302c29fa5a6Sopenharmony_ci
303c29fa5a6Sopenharmony_ci    errno = 0;
304c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_parent_with_subsystem_devtype(nullptr, "input", nullptr), nullptr);
305c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
306c29fa5a6Sopenharmony_ci
307c29fa5a6Sopenharmony_ci    errno = 0;
308c29fa5a6Sopenharmony_ci    EXPECT_NE(udev_device_get_parent_with_subsystem_devtype(device, "input", ""), nullptr);
309c29fa5a6Sopenharmony_ci    EXPECT_NE(errno, EINVAL);
310c29fa5a6Sopenharmony_ci
311c29fa5a6Sopenharmony_ci    errno = 0;
312c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_parent_with_subsystem_devtype(device, nullptr, nullptr), nullptr);
313c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, EINVAL);
314c29fa5a6Sopenharmony_ci
315c29fa5a6Sopenharmony_ci    errno = 0;
316c29fa5a6Sopenharmony_ci    EXPECT_EQ(udev_device_get_parent_with_subsystem_devtype(device, "unknown", nullptr), nullptr);
317c29fa5a6Sopenharmony_ci    EXPECT_EQ(errno, 0);
318c29fa5a6Sopenharmony_ci}
319c29fa5a6Sopenharmony_ci
320c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsDefault, TestSize.Level1)
321c29fa5a6Sopenharmony_ci{
322c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init());
323c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
324c29fa5a6Sopenharmony_ci
325c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
326c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
327c29fa5a6Sopenharmony_ci
328c29fa5a6Sopenharmony_ci    std::string expectedName = std::string{"\""} + TestDevice::TEST_NAME + "\"";
329c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "NAME"), expectedName.c_str());
330c29fa5a6Sopenharmony_ci    std::stringstream expectedProduct;
331c29fa5a6Sopenharmony_ci    expectedProduct << std::hex << TestDevice::TEST_BUS << '/' << TestDevice::TEST_VENDOR << '/' <<
332c29fa5a6Sopenharmony_ci        TestDevice::TEST_PRODUCT << '/' << TestDevice::TEST_VERSION;
333c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "PRODUCT"), expectedProduct.str().c_str());
334c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
335c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_MOUSE"), "1");
336c29fa5a6Sopenharmony_ci}
337c29fa5a6Sopenharmony_ci
338c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevWheel, TestSize.Level1)
339c29fa5a6Sopenharmony_ci{
340c29fa5a6Sopenharmony_ci    testDevice_.WheelSetup();
341c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
342c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
343c29fa5a6Sopenharmony_ci
344c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
345c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
346c29fa5a6Sopenharmony_ci
347c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
348c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_KEY"), "1");
349c29fa5a6Sopenharmony_ci}
350c29fa5a6Sopenharmony_ci
351c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsKey, TestSize.Level1)
352c29fa5a6Sopenharmony_ci{
353c29fa5a6Sopenharmony_ci    testDevice_.KeyboardSetup();
354c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
355c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
356c29fa5a6Sopenharmony_ci
357c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
358c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
359c29fa5a6Sopenharmony_ci
360c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
361c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_KEY"), "1");
362c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_KEYBOARD"), "1");
363c29fa5a6Sopenharmony_ci}
364c29fa5a6Sopenharmony_ci
365c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsSwitch, TestSize.Level1)
366c29fa5a6Sopenharmony_ci{
367c29fa5a6Sopenharmony_ci    testDevice_.SwitchSetup();
368c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
369c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
370c29fa5a6Sopenharmony_ci
371c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
372c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
373c29fa5a6Sopenharmony_ci
374c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
375c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_SWITCH"), "1");
376c29fa5a6Sopenharmony_ci}
377c29fa5a6Sopenharmony_ci
378c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsAccel, TestSize.Level1)
379c29fa5a6Sopenharmony_ci{
380c29fa5a6Sopenharmony_ci    testDevice_.AccelerometerSetup();
381c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
382c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
383c29fa5a6Sopenharmony_ci
384c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
385c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
386c29fa5a6Sopenharmony_ci
387c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
388c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_ACCELEROMETER"), "1");
389c29fa5a6Sopenharmony_ci}
390c29fa5a6Sopenharmony_ci
391c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsStick, TestSize.Level1)
392c29fa5a6Sopenharmony_ci{
393c29fa5a6Sopenharmony_ci    testDevice_.StickSetup();
394c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
395c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
396c29fa5a6Sopenharmony_ci
397c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
398c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
399c29fa5a6Sopenharmony_ci
400c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
401c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_POINTINGSTICK"), "1");
402c29fa5a6Sopenharmony_ci}
403c29fa5a6Sopenharmony_ci
404c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsTouchpad, TestSize.Level1)
405c29fa5a6Sopenharmony_ci{
406c29fa5a6Sopenharmony_ci    testDevice_.TouchpadSetup();
407c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
408c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
409c29fa5a6Sopenharmony_ci
410c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
411c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
412c29fa5a6Sopenharmony_ci
413c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
414c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_TOUCHPAD"), "1");
415c29fa5a6Sopenharmony_ci}
416c29fa5a6Sopenharmony_ci
417c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsTouchscreen, TestSize.Level1)
418c29fa5a6Sopenharmony_ci{
419c29fa5a6Sopenharmony_ci    testDevice_.TouchscreenSetup();
420c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
421c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
422c29fa5a6Sopenharmony_ci
423c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
424c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
425c29fa5a6Sopenharmony_ci
426c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
427c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_TOUCHSCREEN"), "1");
428c29fa5a6Sopenharmony_ci}
429c29fa5a6Sopenharmony_ci
430c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsJoystick, TestSize.Level1)
431c29fa5a6Sopenharmony_ci{
432c29fa5a6Sopenharmony_ci    testDevice_.JoystickSetup();
433c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
434c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
435c29fa5a6Sopenharmony_ci
436c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
437c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
438c29fa5a6Sopenharmony_ci
439c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
440c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_JOYSTICK"), "1");
441c29fa5a6Sopenharmony_ci}
442c29fa5a6Sopenharmony_ci
443c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsJoystick1, TestSize.Level1)
444c29fa5a6Sopenharmony_ci{
445c29fa5a6Sopenharmony_ci    testDevice_.JoystickSetup1();
446c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
447c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
448c29fa5a6Sopenharmony_ci
449c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
450c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
451c29fa5a6Sopenharmony_ci
452c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
453c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_JOYSTICK"), "1");
454c29fa5a6Sopenharmony_ci}
455c29fa5a6Sopenharmony_ci
456c29fa5a6Sopenharmony_ciHWTEST_F(CustomUdevTest, TestUdevPropsTablet, TestSize.Level1)
457c29fa5a6Sopenharmony_ci{
458c29fa5a6Sopenharmony_ci    testDevice_.TabletSetup();
459c29fa5a6Sopenharmony_ci    ASSERT_NO_FATAL_FAILURE(testDevice_.Init(false));
460c29fa5a6Sopenharmony_ci    auto* device = testDevice_.GetDevice();
461c29fa5a6Sopenharmony_ci
462c29fa5a6Sopenharmony_ci    auto* parent = udev_device_get_parent(device);
463c29fa5a6Sopenharmony_ci    ASSERT_NE(parent, nullptr);
464c29fa5a6Sopenharmony_ci
465c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT"), "1");
466c29fa5a6Sopenharmony_ci    EXPECT_STREQ(udev_device_get_property_value(parent, "ID_INPUT_TABLET"), "1");
467c29fa5a6Sopenharmony_ci}
468