~vanvugt/mir/revert-r2288

« back to all changes in this revision

Viewing changes to tests/unit-tests/client/mesa/test_client_platform.cpp

client: Add set_gbm_device platform operation.

Approved by PS Jenkins bot, Robert Carr, Alan Griffiths.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
#include "mir/client_platform.h"
20
20
#include "mir/shared_library.h"
 
21
#include "mir/raii.h"
21
22
#include "src/platforms/mesa/client/mesa_native_display_container.h"
22
23
#include "mir_test_framework/client_platform_factory.h"
23
 
#include "mir_test_doubles/mock_egl_native_surface.h"
24
24
 
 
25
#include "mir_toolkit/mir_client_library.h"
25
26
#include "mir_toolkit/mesa/native_display.h"
 
27
#include "mir_toolkit/mesa/platform_operation.h"
26
28
 
27
29
#include <gtest/gtest.h>
 
30
#include <gmock/gmock.h>
28
31
 
29
32
namespace mcl = mir::client;
30
33
namespace mclm = mir::client::mesa;
31
 
namespace mt = mir::test;
32
 
namespace mtd = mir::test::doubles;
33
34
namespace mtf = mir_test_framework;
34
35
 
35
 
TEST(MesaClientPlatformTest, egl_native_display_is_valid_until_released)
36
 
{
37
 
    auto platform = mtf::create_mesa_client_platform();
 
36
namespace
 
37
{
 
38
 
 
39
struct StubClientContext : mcl::ClientContext
 
40
{
 
41
    void populate_server_package(MirPlatformPackage& platform_package) override
 
42
    {
 
43
        platform_package.data_items = 0;
 
44
        platform_package.fd_items = 1;
 
45
    }
 
46
 
 
47
};
 
48
 
 
49
struct MesaClientPlatformTest : testing::Test
 
50
{
 
51
    MirPlatformMessage* set_gbm_device(gbm_device* dev)
 
52
    {
 
53
        auto request_msg = mir::raii::deleter_for(
 
54
            mir_platform_message_create(MirMesaPlatformOperation::set_gbm_device),
 
55
            &mir_platform_message_release);
 
56
        MirMesaSetGBMDeviceRequest const request{dev};
 
57
        mir_platform_message_set_data(request_msg.get(), &request, sizeof(request));
 
58
 
 
59
        return platform->platform_operation(request_msg.get());
 
60
    }
 
61
 
 
62
    StubClientContext client_context;
 
63
    std::shared_ptr<mir::client::ClientPlatform> platform =
 
64
        mtf::create_mesa_client_platform(&client_context);
 
65
};
 
66
 
 
67
}
 
68
 
 
69
TEST_F(MesaClientPlatformTest, egl_native_display_is_valid_until_released)
 
70
{
38
71
    auto platform_lib = mtf::get_platform_library();
39
72
 
40
73
    MirMesaEGLNativeDisplay* nd;
47
80
    }
48
81
    EXPECT_EQ(MIR_MESA_FALSE, mclm::mir_client_mesa_egl_native_display_is_valid(nd));
49
82
}
 
83
 
 
84
TEST_F(MesaClientPlatformTest, handles_set_gbm_device_platform_operation)
 
85
{
 
86
    using namespace testing;
 
87
 
 
88
    int const success{0};
 
89
    auto const gbm_dev_dummy = reinterpret_cast<gbm_device*>(this);
 
90
 
 
91
    auto response_msg = mir::raii::deleter_for(
 
92
        set_gbm_device(gbm_dev_dummy),
 
93
        &mir_platform_message_release);
 
94
 
 
95
    ASSERT_THAT(response_msg, NotNull());
 
96
    auto const response_data = mir_platform_message_get_data(response_msg.get());
 
97
    ASSERT_THAT(response_data.size, Eq(sizeof(MirMesaSetGBMDeviceResponse)));
 
98
    auto const response_ptr =
 
99
        reinterpret_cast<MirMesaSetGBMDeviceResponse const*>(response_data.data);
 
100
    EXPECT_THAT(response_ptr->status, Eq(success));
 
101
}
 
102
 
 
103
TEST_F(MesaClientPlatformTest, appends_gbm_device_to_platform_package)
 
104
{
 
105
    using namespace testing;
 
106
 
 
107
    MirPlatformPackage pkg;
 
108
    platform->populate(pkg);
 
109
    int const previous_data_count{pkg.data_items};
 
110
    auto const gbm_dev_dummy = reinterpret_cast<gbm_device*>(this);
 
111
 
 
112
    auto response_msg = mir::raii::deleter_for(
 
113
        set_gbm_device(gbm_dev_dummy),
 
114
        &mir_platform_message_release);
 
115
 
 
116
    platform->populate(pkg);
 
117
    EXPECT_THAT(pkg.data_items, Eq(previous_data_count + (sizeof(gbm_dev_dummy) / sizeof(int))));
 
118
    EXPECT_THAT(reinterpret_cast<struct gbm_device*>(pkg.data[previous_data_count]),
 
119
                Eq(gbm_dev_dummy));
 
120
}