Index: uspace/lib/ddev/test/ddev.c
===================================================================
--- uspace/lib/ddev/test/ddev.c	(revision 0b63dc2113d59db4ebb4bb8aa8ed9adeb8235809)
+++ uspace/lib/ddev/test/ddev.c	(revision 2a515dcdbf45d99dae90d9f82bc03f8416d806b7)
@@ -49,8 +49,10 @@
 
 static errno_t test_get_gc(void *, sysarg_t *, sysarg_t *);
+static errno_t test_get_info(void *, ddev_info_t *);
 static errno_t test_gc_set_color(void *, gfx_color_t *);
 
 static ddev_ops_t test_ddev_ops = {
-	.get_gc = test_get_gc
+	.get_gc = test_get_gc,
+	.get_info = test_get_info
 };
 
@@ -66,4 +68,5 @@
 	bool set_color_called;
 	ddev_srv_t *srv;
+	ddev_info_t info;
 } test_response_t;
 
@@ -172,4 +175,78 @@
 }
 
+/** ddev_get_info with server returning failure */
+PCUT_TEST(dev_get_info_failure)
+{
+	errno_t rc;
+	service_id_t sid;
+	ddev_t *ddev = NULL;
+	test_response_t resp;
+	ddev_info_t info;
+
+	async_set_fallback_port_handler(test_ddev_conn, &resp);
+
+	// FIXME This causes this test to be non-reentrant!
+	rc = loc_server_register(test_ddev_server);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = loc_service_register(test_ddev_svc, &sid);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ddev_open(test_ddev_svc, &ddev);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ddev);
+
+	resp.rc = ENOMEM;
+	rc = ddev_get_info(ddev, &info);
+	PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
+
+	ddev_close(ddev);
+	rc = loc_service_unregister(sid);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+}
+
+/** ddev_get_info with server returning success */
+PCUT_TEST(dev_get_info_success)
+{
+	errno_t rc;
+	service_id_t sid;
+	ddev_t *ddev = NULL;
+	test_response_t resp;
+	ddev_info_t info;
+
+	async_set_fallback_port_handler(test_ddev_conn, &resp);
+
+	// FIXME This causes this test to be non-reentrant!
+	rc = loc_server_register(test_ddev_server);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = loc_service_register(test_ddev_svc, &sid);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+
+	rc = ddev_open(test_ddev_svc, &ddev);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+	PCUT_ASSERT_NOT_NULL(ddev);
+
+	resp.rc = EOK;
+
+	ddev_info_init(&resp.info);
+	resp.info.rect.p0.x = 1;
+	resp.info.rect.p0.y = 2;
+	resp.info.rect.p1.x = 3;
+	resp.info.rect.p1.y = 4;
+
+	rc = ddev_get_info(ddev, &info);
+	PCUT_ASSERT_ERRNO_VAL(resp.rc, rc);
+
+	PCUT_ASSERT_INT_EQUALS(resp.info.rect.p0.x, info.rect.p0.x);
+	PCUT_ASSERT_INT_EQUALS(resp.info.rect.p0.y, info.rect.p0.y);
+	PCUT_ASSERT_INT_EQUALS(resp.info.rect.p1.x, info.rect.p1.x);
+	PCUT_ASSERT_INT_EQUALS(resp.info.rect.p1.y, info.rect.p1.y);
+
+	ddev_close(ddev);
+	rc = loc_service_unregister(sid);
+	PCUT_ASSERT_ERRNO_VAL(EOK, rc);
+}
+
 /** Test display device connection.
  *
@@ -222,4 +299,15 @@
 }
 
+static errno_t test_get_info(void *arg, ddev_info_t *info)
+{
+	test_response_t *resp = (test_response_t *) arg;
+
+	if (resp->rc != EOK)
+		return resp->rc;
+
+	*info = resp->info;
+	return EOK;
+}
+
 static errno_t test_gc_set_color(void *arg, gfx_color_t *color)
 {
