Skip to content

Commit 12e1b25

Browse files
Ian Douglas Scottids1024
authored andcommitted
WIP Test for buffer size
1 parent 3a45d67 commit 12e1b25

2 files changed

Lines changed: 112 additions & 0 deletions

File tree

wayland-tests/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,6 @@ name = "server_resources"
7474

7575
[[test]]
7676
name = "xdg_shell_ping"
77+
78+
[[test]]
79+
name = "buffer_size"

wayland-tests/tests/buffer_size.rs

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
use std::io::ErrorKind;
2+
3+
#[macro_use]
4+
mod helpers;
5+
6+
use helpers::*;
7+
8+
#[test]
9+
fn buffer_size() {
10+
let mut server = TestServer::new();
11+
server
12+
.display
13+
.handle()
14+
.create_global::<ServerHandler, ways::protocol::wl_seat::WlSeat, _>(1, ());
15+
16+
let (_, mut client) = server.add_client();
17+
let mut client_ddata = ClientHandler { globals: globals::GlobalList::new() };
18+
19+
let registry = client.display.get_registry(&client.event_queue.handle(), ());
20+
21+
let mut server_handler = ServerHandler::default();
22+
23+
roundtrip(&mut client, &mut server, &mut client_ddata, &mut server_handler).unwrap();
24+
25+
let seat = client_ddata
26+
.globals
27+
.bind::<wayc::protocol::wl_seat::WlSeat, _, _>(
28+
&client.event_queue.handle(),
29+
&registry,
30+
1..2,
31+
(),
32+
)
33+
.unwrap();
34+
35+
let _pointer = seat.get_pointer(&client.event_queue.handle(), ());
36+
37+
roundtrip(&mut client, &mut server, &mut client_ddata, &mut server_handler).unwrap();
38+
39+
// Send too many Wayland events to buffer
40+
let server_pointer = server_handler.pointer.as_ref().unwrap().clone();
41+
for _ in 0..10_000 {
42+
server_pointer.motion(0, 0., 0.);
43+
}
44+
45+
// Verify we get `ConnectionReset` error
46+
let res = roundtrip(&mut client, &mut server, &mut client_ddata, &mut server_handler);
47+
assert!(res.is_err());
48+
let err = res.unwrap_err();
49+
assert!(matches!(err, wayc::backend::WaylandError::Io(_)));
50+
if let wayc::backend::WaylandError::Io(err) = err {
51+
assert_eq!(err.kind(), ErrorKind::ConnectionReset);
52+
}
53+
}
54+
55+
/*
56+
* Client handler
57+
*/
58+
59+
struct ClientHandler {
60+
globals: globals::GlobalList,
61+
}
62+
63+
impl AsMut<globals::GlobalList> for ClientHandler {
64+
fn as_mut(&mut self) -> &mut globals::GlobalList {
65+
&mut self.globals
66+
}
67+
}
68+
69+
wayc::delegate_dispatch!(ClientHandler:
70+
[wayc::protocol::wl_registry::WlRegistry: ()] => globals::GlobalList
71+
);
72+
73+
client_ignore_impl!(ClientHandler => [
74+
wayc::protocol::wl_seat::WlSeat,
75+
wayc::protocol::wl_pointer::WlPointer,
76+
wayc::protocol::wl_keyboard::WlKeyboard
77+
]);
78+
79+
/*
80+
* Server handler
81+
*/
82+
83+
#[derive(Default)]
84+
struct ServerHandler {
85+
pointer: Option<ways::protocol::wl_pointer::WlPointer>,
86+
}
87+
88+
server_ignore_impl!(ServerHandler => [ways::protocol::wl_pointer::WlPointer]);
89+
90+
server_ignore_global_impl!(ServerHandler => [ways::protocol::wl_seat::WlSeat]);
91+
92+
impl ways::Dispatch<ways::protocol::wl_seat::WlSeat, ()> for ServerHandler {
93+
fn request(
94+
server_handler: &mut ServerHandler,
95+
_: &ways::Client,
96+
_: &ways::protocol::wl_seat::WlSeat,
97+
request: ways::protocol::wl_seat::Request,
98+
_: &(),
99+
_: &ways::DisplayHandle,
100+
data_init: &mut ways::DataInit<'_, ServerHandler>,
101+
) {
102+
match request {
103+
ways::protocol::wl_seat::Request::GetPointer { id } => {
104+
server_handler.pointer = Some(data_init.init(id, ()));
105+
}
106+
_ => unreachable!(),
107+
}
108+
}
109+
}

0 commit comments

Comments
 (0)