[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 18/21] tests: add /char/file test
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH v3 18/21] tests: add /char/file test |
Date: |
Thu, 16 Mar 2017 13:21:18 +0400 |
Signed-off-by: Marc-André Lureau <address@hidden>
---
tests/test-char.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git a/tests/test-char.c b/tests/test-char.c
index 2b155ffcb7..87a4e2986d 100644
--- a/tests/test-char.c
+++ b/tests/test-char.c
@@ -277,6 +277,76 @@ static void char_pipe_test(void)
}
#endif
+static void char_file_test(void)
+{
+ char *tmp_path = g_dir_make_tmp("qemu-test-char.XXXXXX", NULL);
+ char *out = g_build_filename(tmp_path, "out", NULL);
+ char *contents = NULL;
+ ChardevFile file = { .out = out };
+ ChardevBackend backend = { .type = CHARDEV_BACKEND_KIND_FILE,
+ .u.file.data = &file };
+ Chardev *chr;
+ gsize length;
+ int ret;
+
+ chr = qemu_chardev_new(NULL, TYPE_CHARDEV_FILE, &backend,
+ &error_abort);
+ ret = qemu_chr_write_all(chr, (uint8_t *)"hello!", 6);
+ g_assert_cmpint(ret, ==, 6);
+ object_unref(OBJECT(chr));
+
+ ret = g_file_get_contents(out, &contents, &length, NULL);
+ g_assert(ret == TRUE);
+ g_assert_cmpint(length, ==, 6);
+ g_assert(strncmp(contents, "hello!", 6) == 0);
+ g_free(contents);
+
+#ifndef _WIN32
+ {
+ CharBackend be;
+ FeHandler fe = { 0, };
+ char *fifo = g_build_filename(tmp_path, "fifo", NULL);
+ int fd;
+
+ if (mkfifo(fifo, 0600) < 0) {
+ abort();
+ }
+
+ fd = open(fifo, O_RDWR);
+ ret = write(fd, "fifo-in", 8);
+ g_assert_cmpint(ret, ==, 8);
+
+ file.in = fifo;
+ file.has_in = true;
+ chr = qemu_chardev_new(NULL, TYPE_CHARDEV_FILE, &backend,
+ &error_abort);
+
+ qemu_chr_fe_init(&be, chr, &error_abort);
+ qemu_chr_fe_set_handlers(&be,
+ fe_can_read,
+ fe_read,
+ fe_event,
+ &fe, NULL, true);
+
+ main_loop();
+
+ close(fd);
+
+ g_assert_cmpint(fe.read_count, ==, 8);
+ g_assert_cmpstr(fe.read_buf, ==, "fifo-in");
+ qemu_chr_fe_deinit(&be);
+ object_unref(OBJECT(chr));
+ g_unlink(fifo);
+ g_free(fifo);
+ }
+#endif
+
+ g_unlink(out);
+ g_rmdir(tmp_path);
+ g_free(tmp_path);
+ g_free(out);
+}
+
static void char_null_test(void)
{
Error *err = NULL;
@@ -348,6 +418,7 @@ int main(int argc, char **argv)
#ifndef _WIN32
g_test_add_func("/char/pipe", char_pipe_test);
#endif
+ g_test_add_func("/char/file", char_file_test);
return g_test_run();
}
--
2.12.0.191.gc5d8de91d
- [Qemu-devel] [PATCH v3 08/21] char: remove qemu_chardev_add, (continued)
- [Qemu-devel] [PATCH v3 08/21] char: remove qemu_chardev_add, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 09/21] char: remove chardevs list, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 10/21] char: useless NULL check, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 12/21] char-socket: update local address after listen, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 11/21] char-socket: introduce update_disconnected_filename(), Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 13/21] char-socket: add 'addr' property, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 14/21] char-socket: add 'connected' property, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 15/21] char-udp: flush as much buffer as possible, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 16/21] tests: add alias check in /char/ringbuf, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 17/21] tests: add /char/pipe test, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 18/21] tests: add /char/file test,
Marc-André Lureau <=
- [Qemu-devel] [PATCH v3 19/21] tests: add /char/socket test, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 20/21] tests: add /char/udp test, Marc-André Lureau, 2017/03/16
- [Qemu-devel] [PATCH v3 21/21] tests: add /char/console test, Marc-André Lureau, 2017/03/16