28
29
namespace mfd=mir::frontend::detail;
29
30
namespace mp=mir::protobuf;
30
31
namespace geom=mir::geometry;
35
struct MockResourceCache : public mf::MessageResourceCache
37
MOCK_METHOD2(save_resource, void(google::protobuf::Message*, std::shared_ptr<void> const&));
38
MOCK_METHOD2(save_fd, void(google::protobuf::Message*, mir::Fd const&));
39
MOCK_METHOD1(free_resource, void(google::protobuf::Message*));
42
struct ProtobufBufferPacker : public testing::Test
44
ProtobufBufferPacker() :
45
mock_resource_cache(std::make_shared<testing::NiceMock<MockResourceCache>>())
48
std::shared_ptr<MockResourceCache> mock_resource_cache;
52
TEST_F(ProtobufBufferPacker, packing)
32
namespace mtd=mir::test::doubles;
34
TEST(ProtobufBufferPacker, packing)
54
36
geom::Stride dummy_stride(4);
56
38
mp::Buffer response;
57
mfd::ProtobufBufferPacker packer(&response, mock_resource_cache);
39
mfd::ProtobufBufferPacker packer(&response);
59
41
int num_fd = 33, num_int = 44;
60
42
std::vector<mir::Fd> raw_fds;
83
65
EXPECT_EQ(789, response.height());
86
TEST_F(ProtobufBufferPacker, fd_packing_saves_using_the_resource_cache)
88
using namespace testing;
89
mir::Fd fake_fd0{fileno(tmpfile())};
90
mir::Fd fake_fd1{fileno(tmpfile())};
94
EXPECT_CALL(*mock_resource_cache, save_fd(&response, Ref(fake_fd0)));
95
EXPECT_CALL(*mock_resource_cache, save_fd(&response, Ref(fake_fd1)));
97
mfd::ProtobufBufferPacker packer(&response, mock_resource_cache);
99
packer.pack_fd(fake_fd0);
100
packer.pack_fd(fake_fd1);
68
TEST(ProtobufBufferPacker, data_and_fds_are_the_same_as_packed)
70
using namespace testing;
73
unsigned int const num_fds{3};
74
unsigned int const num_data{9};
75
for(auto i = 0u; i < num_fds; i++)
76
response.add_fd(mir::Fd{fileno(tmpfile())});
77
for(auto i = 0u; i < num_data; i++)
78
response.add_data(i*3);
80
mfd::ProtobufBufferPacker packer(&response);
82
mir::Fd additional_fd{fileno(tmpfile())};
83
packer.pack_fd(additional_fd);
85
auto fds = packer.fds();
86
EXPECT_THAT(fds.size(), Eq(num_fds + 1));
88
auto data = packer.data();
89
EXPECT_THAT(data, ElementsAreArray(response.data().data(), num_data));
92
TEST(ProtobufBufferPacker, message_takes_ownership_of_fds)
94
using namespace testing;
97
unsigned int const num_fds{3};
98
for(auto i = 0u; i < num_fds; i++)
99
response.add_fd(fileno(tmpfile()));
101
mir::Fd additional_fd{fileno(tmpfile())};
104
mfd::ProtobufBufferPacker packer(&response);
105
packer.pack_fd(additional_fd);
108
EXPECT_THAT(response.fd().size(), Eq(num_fds+1));
110
for(; i < num_fds; i++)
111
EXPECT_THAT(response.fd().Get(i), Not(mtd::RawFdIsValid()));
112
EXPECT_THAT(response.fd().Get(i), mtd::RawFdIsValid());