Index: uspace/lib/ipctest/include/ipc/ipc_test.h
===================================================================
--- uspace/lib/ipctest/include/ipc/ipc_test.h	(revision 0e2eee137d82dec8a6d820ded01ee25d3bb60b81)
+++ uspace/lib/ipctest/include/ipc/ipc_test.h	(revision de96d3bfc2010ce18fdf8d42328d4c461d7ca3f2)
@@ -43,5 +43,8 @@
 	IPC_TEST_GET_RW_AREA_SIZE,
 	IPC_TEST_SHARE_IN_RO,
-	IPC_TEST_SHARE_IN_RW
+	IPC_TEST_SHARE_IN_RW,
+	IPC_TEST_SET_RW_BUF_SIZE,
+	IPC_TEST_READ,
+	IPC_TEST_WRITE
 } ipc_test_request_t;
 
Index: uspace/lib/ipctest/include/ipc_test.h
===================================================================
--- uspace/lib/ipctest/include/ipc_test.h	(revision 0e2eee137d82dec8a6d820ded01ee25d3bb60b81)
+++ uspace/lib/ipctest/include/ipc_test.h	(revision de96d3bfc2010ce18fdf8d42328d4c461d7ca3f2)
@@ -50,4 +50,7 @@
 extern errno_t ipc_test_share_in_ro(ipc_test_t *, size_t, const void **);
 extern errno_t ipc_test_share_in_rw(ipc_test_t *, size_t, void **);
+extern errno_t ipc_test_set_rw_buf_size(ipc_test_t *, size_t);
+extern errno_t ipc_test_read(ipc_test_t *, void *, size_t);
+extern errno_t ipc_test_write(ipc_test_t *, const void *, size_t);
 
 #endif
Index: uspace/lib/ipctest/src/ipc_test.c
===================================================================
--- uspace/lib/ipctest/src/ipc_test.c	(revision 0e2eee137d82dec8a6d820ded01ee25d3bb60b81)
+++ uspace/lib/ipctest/src/ipc_test.c	(revision de96d3bfc2010ce18fdf8d42328d4c461d7ca3f2)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2018 Jiri Svoboda
+ * Copyright (c) 2023 Jiri Svoboda
  * All rights reserved.
  *
@@ -221,4 +221,83 @@
 }
 
+/** Set server-side read/write buffer size.
+ *
+ * @param test IPC test service
+ * @param size Requested read/write buffer size
+ * @return EOK on success or an error code
+ */
+errno_t ipc_test_set_rw_buf_size(ipc_test_t *test, size_t size)
+{
+	async_exch_t *exch;
+	errno_t retval;
+
+	exch = async_exchange_begin(test->sess);
+	retval = async_req_1_0(exch, IPC_TEST_SET_RW_BUF_SIZE, size);
+	async_exchange_end(exch);
+
+	if (retval != EOK)
+		return retval;
+
+	return EOK;
+}
+
+/** Test IPC read.
+ *
+ * @param test IPC test service
+ * @param dest Destination buffer
+ * @param size Number of bytes to read / size of destination buffer
+ * @return EOK on success or an error code
+ */
+errno_t ipc_test_read(ipc_test_t *test, void *dest, size_t size)
+{
+	async_exch_t *exch;
+	ipc_call_t answer;
+	aid_t req;
+	errno_t rc;
+
+	exch = async_exchange_begin(test->sess);
+	req = async_send_0(exch, IPC_TEST_READ, &answer);
+
+	rc = async_data_read_start(exch, dest, size);
+	if (rc != EOK) {
+		async_exchange_end(exch);
+		async_forget(req);
+		return rc;
+	}
+
+	async_exchange_end(exch);
+	async_wait_for(req, NULL);
+	return EOK;
+}
+
+/** Test IPC write.
+ *
+ * @param test IPC test service
+ * @param data Source buffer
+ * @param size Number of bytes to write
+ * @return EOK on success or an error code
+ */
+errno_t ipc_test_write(ipc_test_t *test, const void *data, size_t size)
+{
+	async_exch_t *exch;
+	ipc_call_t answer;
+	aid_t req;
+	errno_t rc;
+
+	exch = async_exchange_begin(test->sess);
+	req = async_send_0(exch, IPC_TEST_WRITE, &answer);
+
+	rc = async_data_write_start(exch, data, size);
+	if (rc != EOK) {
+		async_exchange_end(exch);
+		async_forget(req);
+		return rc;
+	}
+
+	async_exchange_end(exch);
+	async_wait_for(req, NULL);
+	return EOK;
+}
+
 /** @}
  */
