1*d95af8dfSAndroid Build Coastguard Worker /* Copyright 2023 The ChromiumOS Authors
2*d95af8dfSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
3*d95af8dfSAndroid Build Coastguard Worker * found in the LICENSE file.
4*d95af8dfSAndroid Build Coastguard Worker *
5*d95af8dfSAndroid Build Coastguard Worker * Test gbm.h module code using gtest.
6*d95af8dfSAndroid Build Coastguard Worker */
7*d95af8dfSAndroid Build Coastguard Worker
8*d95af8dfSAndroid Build Coastguard Worker #include <drm/drm_fourcc.h>
9*d95af8dfSAndroid Build Coastguard Worker #include <gmock/gmock.h>
10*d95af8dfSAndroid Build Coastguard Worker #include <gtest/gtest.h>
11*d95af8dfSAndroid Build Coastguard Worker #include <xf86drm.h>
12*d95af8dfSAndroid Build Coastguard Worker
13*d95af8dfSAndroid Build Coastguard Worker #include "gbm.h"
14*d95af8dfSAndroid Build Coastguard Worker
15*d95af8dfSAndroid Build Coastguard Worker class MockDrm
16*d95af8dfSAndroid Build Coastguard Worker {
17*d95af8dfSAndroid Build Coastguard Worker public:
18*d95af8dfSAndroid Build Coastguard Worker MOCK_METHOD(drmVersionPtr, drmGetVersion, (int fd));
19*d95af8dfSAndroid Build Coastguard Worker MOCK_METHOD(void, drmFreeVersion, (drmVersionPtr v));
20*d95af8dfSAndroid Build Coastguard Worker };
21*d95af8dfSAndroid Build Coastguard Worker
22*d95af8dfSAndroid Build Coastguard Worker // Define a mock version of drmGetVersion
drmGetVersion(int fd)23*d95af8dfSAndroid Build Coastguard Worker drmVersionPtr drmGetVersion(int fd)
24*d95af8dfSAndroid Build Coastguard Worker {
25*d95af8dfSAndroid Build Coastguard Worker drmVersionPtr mock_version = new drmVersion();
26*d95af8dfSAndroid Build Coastguard Worker mock_version->name = "Mock Backend";
27*d95af8dfSAndroid Build Coastguard Worker return mock_version;
28*d95af8dfSAndroid Build Coastguard Worker }
29*d95af8dfSAndroid Build Coastguard Worker
30*d95af8dfSAndroid Build Coastguard Worker // Define a mock version of drmFreeVersion
drmFreeVersion(drmVersionPtr v)31*d95af8dfSAndroid Build Coastguard Worker void drmFreeVersion(drmVersionPtr v)
32*d95af8dfSAndroid Build Coastguard Worker {
33*d95af8dfSAndroid Build Coastguard Worker delete (v);
34*d95af8dfSAndroid Build Coastguard Worker }
35*d95af8dfSAndroid Build Coastguard Worker
36*d95af8dfSAndroid Build Coastguard Worker /* TODO : This is a protocol to add unit tests for the public APIs in minigbm.
37*d95af8dfSAndroid Build Coastguard Worker *
38*d95af8dfSAndroid Build Coastguard Worker * The ultimate goal would be cover more APIs and the input combinations.
39*d95af8dfSAndroid Build Coastguard Worker * Set fd to 0 for now, it doesn't have any particular meaning
40*d95af8dfSAndroid Build Coastguard Worker */
41*d95af8dfSAndroid Build Coastguard Worker
TEST(gbm_unit_test,create_device)42*d95af8dfSAndroid Build Coastguard Worker TEST(gbm_unit_test, create_device)
43*d95af8dfSAndroid Build Coastguard Worker {
44*d95af8dfSAndroid Build Coastguard Worker MockDrm mock_drm; // Create a mock object
45*d95af8dfSAndroid Build Coastguard Worker
46*d95af8dfSAndroid Build Coastguard Worker EXPECT_CALL(mock_drm, drmGetVersion(testing::_))
47*d95af8dfSAndroid Build Coastguard Worker .WillRepeatedly(testing::Invoke(&mock_drm, &MockDrm::drmGetVersion));
48*d95af8dfSAndroid Build Coastguard Worker
49*d95af8dfSAndroid Build Coastguard Worker struct gbm_device *gbm_device = gbm_create_device(0);
50*d95af8dfSAndroid Build Coastguard Worker
51*d95af8dfSAndroid Build Coastguard Worker ASSERT_TRUE(gbm_device);
52*d95af8dfSAndroid Build Coastguard Worker
53*d95af8dfSAndroid Build Coastguard Worker gbm_device_destroy(gbm_device);
54*d95af8dfSAndroid Build Coastguard Worker }
55*d95af8dfSAndroid Build Coastguard Worker
TEST(gbm_unit_test,valid_fd)56*d95af8dfSAndroid Build Coastguard Worker TEST(gbm_unit_test, valid_fd)
57*d95af8dfSAndroid Build Coastguard Worker {
58*d95af8dfSAndroid Build Coastguard Worker MockDrm mock_drm; // Create a mock object
59*d95af8dfSAndroid Build Coastguard Worker
60*d95af8dfSAndroid Build Coastguard Worker EXPECT_CALL(mock_drm, drmGetVersion(testing::_))
61*d95af8dfSAndroid Build Coastguard Worker .WillRepeatedly(testing::Invoke(&mock_drm, &MockDrm::drmGetVersion));
62*d95af8dfSAndroid Build Coastguard Worker struct gbm_device *gbm_device = gbm_create_device(99);
63*d95af8dfSAndroid Build Coastguard Worker int fd = gbm_device_get_fd(gbm_device);
64*d95af8dfSAndroid Build Coastguard Worker
65*d95af8dfSAndroid Build Coastguard Worker ASSERT_EQ(fd, 99);
66*d95af8dfSAndroid Build Coastguard Worker
67*d95af8dfSAndroid Build Coastguard Worker gbm_device_destroy(gbm_device);
68*d95af8dfSAndroid Build Coastguard Worker }
69*d95af8dfSAndroid Build Coastguard Worker
TEST(gbm_unit_test,valid_backend_name)70*d95af8dfSAndroid Build Coastguard Worker TEST(gbm_unit_test, valid_backend_name)
71*d95af8dfSAndroid Build Coastguard Worker {
72*d95af8dfSAndroid Build Coastguard Worker MockDrm mock_drm; // Create a mock object
73*d95af8dfSAndroid Build Coastguard Worker
74*d95af8dfSAndroid Build Coastguard Worker EXPECT_CALL(mock_drm, drmGetVersion(testing::_))
75*d95af8dfSAndroid Build Coastguard Worker .WillRepeatedly(testing::Invoke(&mock_drm, &MockDrm::drmGetVersion));
76*d95af8dfSAndroid Build Coastguard Worker struct gbm_device *gbm_device = gbm_create_device(0);
77*d95af8dfSAndroid Build Coastguard Worker const char *backend_name = gbm_device_get_backend_name(gbm_device);
78*d95af8dfSAndroid Build Coastguard Worker
79*d95af8dfSAndroid Build Coastguard Worker ASSERT_STREQ(backend_name, "Mock Backend");
80*d95af8dfSAndroid Build Coastguard Worker
81*d95af8dfSAndroid Build Coastguard Worker gbm_device_destroy(gbm_device);
82*d95af8dfSAndroid Build Coastguard Worker }
83