* [LTP] [PATCH v1] Add epoll_wait07 test
@ 2022-10-10 14:52 Andrea Cervesato via ltp
2022-10-20 9:27 ` Richard Palethorpe
0 siblings, 1 reply; 3+ messages in thread
From: Andrea Cervesato via ltp @ 2022-10-10 14:52 UTC (permalink / raw)
To: ltp
This test verifies EPOLLONESHOT functionality.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
.../kernel/syscalls/epoll_wait/.gitignore | 1 +
.../kernel/syscalls/epoll_wait/epoll_wait07.c | 86 +++++++++++++++++++
2 files changed, 87 insertions(+)
create mode 100644 testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
diff --git a/testcases/kernel/syscalls/epoll_wait/.gitignore b/testcases/kernel/syscalls/epoll_wait/.gitignore
index 8c5ed7c5c..66ac18ae2 100644
--- a/testcases/kernel/syscalls/epoll_wait/.gitignore
+++ b/testcases/kernel/syscalls/epoll_wait/.gitignore
@@ -4,3 +4,4 @@ epoll_wait03
epoll_wait04
epoll_wait05
epoll_wait06
+epoll_wait07
diff --git a/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c b/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
new file mode 100644
index 000000000..760ab6c10
--- /dev/null
+++ b/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2022 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
+ */
+
+/*\
+ * [Description]
+ *
+ * Verify that EPOLLONESHOT is correctly handled by epoll_wait.
+ * We open a channel, write on it multiple times and we verify that EPOLLOUT
+ * has been received only once.
+ */
+
+#include <poll.h>
+#include <sys/epoll.h>
+#include "tst_test.h"
+
+#define WRITE_SIZE 2048
+
+static int fds[2];
+static int epfd;
+
+static void cleanup(void)
+{
+ if (epfd > 0)
+ SAFE_CLOSE(epfd);
+
+ if (fds[0] > 0)
+ SAFE_CLOSE(fds[0]);
+
+ if (fds[1] > 0)
+ SAFE_CLOSE(fds[1]);
+}
+
+static void run(void)
+{
+ int res;
+ char buff[WRITE_SIZE];
+ struct epoll_event evt_receive;
+ struct epoll_event evt_request;
+
+ SAFE_PIPE(fds);
+
+ evt_request.events = EPOLLOUT | EPOLLONESHOT;
+ evt_request.data.fd = fds[1];
+
+ epfd = epoll_create(2);
+ if (epfd == -1)
+ tst_brk(TBROK | TERRNO, "fail to create epoll instance");
+
+ tst_res(TINFO, "Polling channel with EPOLLONESHOT");
+
+ res = epoll_ctl(epfd, EPOLL_CTL_ADD, fds[1], &evt_request);
+ if (res == -1)
+ tst_brk(TBROK | TERRNO, "epoll_ctl failure");
+
+ tst_res(TINFO, "Write on channel multiple times");
+
+ memset(buff, 'a', WRITE_SIZE);
+ SAFE_WRITE(0, fds[1], buff, WRITE_SIZE);
+ SAFE_WRITE(0, fds[1], buff, WRITE_SIZE);
+
+ res = epoll_wait(epfd, &evt_receive, 1, 2000);
+ if (res <= 0) {
+ tst_res(TFAIL | TERRNO, "epoll_wait() returned %i", res);
+ goto close;
+ }
+
+ if ((evt_receive.events & EPOLLOUT) == 0) {
+ tst_res(TFAIL, "No EPOLLOUT received");
+ goto close;
+ }
+
+ tst_res(TINFO, "Received first EPOLLOUT event");
+
+ TST_EXP_EQ_LI(epoll_wait(epfd, &evt_receive, 1, 0), 0);
+
+close:
+ SAFE_CLOSE(fds[0]);
+ SAFE_CLOSE(fds[1]);
+}
+
+static struct tst_test test = {
+ .cleanup = cleanup,
+ .test_all = run,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [LTP] [PATCH v1] Add epoll_wait07 test
2022-10-10 14:52 [LTP] [PATCH v1] Add epoll_wait07 test Andrea Cervesato via ltp
@ 2022-10-20 9:27 ` Richard Palethorpe
2022-10-28 8:43 ` Andrea Cervesato via ltp
0 siblings, 1 reply; 3+ messages in thread
From: Richard Palethorpe @ 2022-10-20 9:27 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hello,
Andrea Cervesato via ltp <ltp@lists.linux.it> writes:
> This test verifies EPOLLONESHOT functionality.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> .../kernel/syscalls/epoll_wait/.gitignore | 1 +
> .../kernel/syscalls/epoll_wait/epoll_wait07.c | 86 +++++++++++++++++++
> 2 files changed, 87 insertions(+)
> create mode 100644 testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
>
> diff --git a/testcases/kernel/syscalls/epoll_wait/.gitignore b/testcases/kernel/syscalls/epoll_wait/.gitignore
> index 8c5ed7c5c..66ac18ae2 100644
> --- a/testcases/kernel/syscalls/epoll_wait/.gitignore
> +++ b/testcases/kernel/syscalls/epoll_wait/.gitignore
> @@ -4,3 +4,4 @@ epoll_wait03
> epoll_wait04
> epoll_wait05
> epoll_wait06
> +epoll_wait07
> diff --git a/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c b/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
> new file mode 100644
> index 000000000..760ab6c10
> --- /dev/null
> +++ b/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
> @@ -0,0 +1,86 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2022 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
> + */
> +
> +/*\
> + * [Description]
> + *
> + * Verify that EPOLLONESHOT is correctly handled by epoll_wait.
> + * We open a channel, write on it multiple times and we verify that EPOLLOUT
> + * has been received only once.
Without EPOLLONESHOT or EPOLLET, EPOLLOUT will fire constantly on a pipe
who's buffer is not full. Writing to it will have no effect unless you
listen on the other end for EPOLLIN.
So in this test you don't need to write to the pipe unless I am
mistaken.
> + */
> +
> +#include <poll.h>
> +#include <sys/epoll.h>
> +#include "tst_test.h"
> +
> +#define WRITE_SIZE 2048
> +
> +static int fds[2];
> +static int epfd;
> +
> +static void cleanup(void)
> +{
> + if (epfd > 0)
> + SAFE_CLOSE(epfd);
> +
> + if (fds[0] > 0)
> + SAFE_CLOSE(fds[0]);
> +
> + if (fds[1] > 0)
> + SAFE_CLOSE(fds[1]);
> +}
> +
> +static void run(void)
> +{
> + int res;
> + char buff[WRITE_SIZE];
> + struct epoll_event evt_receive;
> + struct epoll_event evt_request;
> +
> + SAFE_PIPE(fds);
> +
> + evt_request.events = EPOLLOUT | EPOLLONESHOT;
> + evt_request.data.fd = fds[1];
> +
> + epfd = epoll_create(2);
> + if (epfd == -1)
> + tst_brk(TBROK | TERRNO, "fail to create epoll
> instance");
Same as other test, please use the SAFE_EPOLL_* functions I just merged.
--
Thank you,
Richard.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [LTP] [PATCH v1] Add epoll_wait07 test
2022-10-20 9:27 ` Richard Palethorpe
@ 2022-10-28 8:43 ` Andrea Cervesato via ltp
0 siblings, 0 replies; 3+ messages in thread
From: Andrea Cervesato via ltp @ 2022-10-28 8:43 UTC (permalink / raw)
To: rpalethorpe; +Cc: ltp
Hi,
On 10/20/22 11:27, Richard Palethorpe wrote:
> Hello,
>
> Andrea Cervesato via ltp <ltp@lists.linux.it> writes:
>
>> This test verifies EPOLLONESHOT functionality.
>>
>> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
>> ---
>> .../kernel/syscalls/epoll_wait/.gitignore | 1 +
>> .../kernel/syscalls/epoll_wait/epoll_wait07.c | 86 +++++++++++++++++++
>> 2 files changed, 87 insertions(+)
>> create mode 100644 testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
>>
>> diff --git a/testcases/kernel/syscalls/epoll_wait/.gitignore b/testcases/kernel/syscalls/epoll_wait/.gitignore
>> index 8c5ed7c5c..66ac18ae2 100644
>> --- a/testcases/kernel/syscalls/epoll_wait/.gitignore
>> +++ b/testcases/kernel/syscalls/epoll_wait/.gitignore
>> @@ -4,3 +4,4 @@ epoll_wait03
>> epoll_wait04
>> epoll_wait05
>> epoll_wait06
>> +epoll_wait07
>> diff --git a/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c b/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
>> new file mode 100644
>> index 000000000..760ab6c10
>> --- /dev/null
>> +++ b/testcases/kernel/syscalls/epoll_wait/epoll_wait07.c
>> @@ -0,0 +1,86 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> +/*
>> + * Copyright (C) 2022 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
>> + */
>> +
>> +/*\
>> + * [Description]
>> + *
>> + * Verify that EPOLLONESHOT is correctly handled by epoll_wait.
>> + * We open a channel, write on it multiple times and we verify that EPOLLOUT
>> + * has been received only once.
> Without EPOLLONESHOT or EPOLLET, EPOLLOUT will fire constantly on a pipe
> who's buffer is not full. Writing to it will have no effect unless you
> listen on the other end for EPOLLIN.
>
> So in this test you don't need to write to the pipe unless I am
> mistaken.
>
I see there's not a real difference between EPOLLIN or EPOLLOUT in this
case. We can listen to EPOLLIN, write to pipe stdin buffer once and call
epoll_wait two times. The result will be the same, since EPOLLIN event
has been triggered only once. We have many options, I choose the one
which forces two EPOLLOUT events, but the same can be done with EPOLLIN
in this case.
To check, you can remove EPOLLONESHOT flag and run test without it.
>> + */
>> +
>> +#include <poll.h>
>> +#include <sys/epoll.h>
>> +#include "tst_test.h"
>> +
>> +#define WRITE_SIZE 2048
>> +
>> +static int fds[2];
>> +static int epfd;
>> +
>> +static void cleanup(void)
>> +{
>> + if (epfd > 0)
>> + SAFE_CLOSE(epfd);
>> +
>> + if (fds[0] > 0)
>> + SAFE_CLOSE(fds[0]);
>> +
>> + if (fds[1] > 0)
>> + SAFE_CLOSE(fds[1]);
>> +}
>> +
>> +static void run(void)
>> +{
>> + int res;
>> + char buff[WRITE_SIZE];
>> + struct epoll_event evt_receive;
>> + struct epoll_event evt_request;
>> +
>> + SAFE_PIPE(fds);
>> +
>> + evt_request.events = EPOLLOUT | EPOLLONESHOT;
>> + evt_request.data.fd = fds[1];
>> +
>> + epfd = epoll_create(2);
>> + if (epfd == -1)
>> + tst_brk(TBROK | TERRNO, "fail to create epoll
>> instance");
> Same as other test, please use the SAFE_EPOLL_* functions I just merged.
>
Andrea
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-10-28 8:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-10 14:52 [LTP] [PATCH v1] Add epoll_wait07 test Andrea Cervesato via ltp
2022-10-20 9:27 ` Richard Palethorpe
2022-10-28 8:43 ` Andrea Cervesato via ltp
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox