1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (C) 2015-2017 Cyril Hrubis <chrubis@suse.cz>
4 */
5
6/*
7 * Check that poll() timeouts correctly.
8 */
9#include <errno.h>
10#include <fcntl.h>
11#include <sys/wait.h>
12#include <sys/poll.h>
13
14#include "tst_timer_test.h"
15
16static int fds[2];
17
18int sample_fn(int clk_id, long long usec)
19{
20	unsigned int sleep_ms = usec / 1000;
21
22	struct pollfd pfds[] = {
23		{.fd = fds[0], .events = POLLIN}
24	};
25
26	tst_timer_start(clk_id);
27	TEST(poll(pfds, 1, sleep_ms));
28	tst_timer_stop();
29	tst_timer_sample();
30
31	if (TST_RET != 0) {
32		tst_res(TFAIL | TTERRNO, "poll() returned %li", TST_RET);
33		return 1;
34	}
35
36	return 0;
37}
38
39static void setup(void)
40{
41	SAFE_PIPE(fds);
42}
43
44static void cleanup(void)
45{
46	if (fds[0] > 0)
47		SAFE_CLOSE(fds[0]);
48
49	if (fds[1] > 0)
50		SAFE_CLOSE(fds[1]);
51}
52
53static struct tst_test test = {
54	.scall = "poll()",
55	.sample = sample_fn,
56	.setup = setup,
57	.cleanup = cleanup,
58};
59