[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 08/13] test-char: split char_file_test
From: |
Anton Nefedov |
Subject: |
[Qemu-devel] [PATCH v3 08/13] test-char: split char_file_test |
Date: |
Tue, 30 May 2017 16:57:58 +0300 |
makes it possible to test the existing chardev-file
Signed-off-by: Anton Nefedov <address@hidden>
---
tests/test-char.c | 127 +++++++++++++++++++++++++++++++++---------------------
1 file changed, 79 insertions(+), 48 deletions(-)
diff --git a/tests/test-char.c b/tests/test-char.c
index ad0752a..ed6b18f 100644
--- a/tests/test-char.c
+++ b/tests/test-char.c
@@ -484,75 +484,103 @@ static void char_udp_test(void)
char_udp_test_internal(NULL, 0);
}
-static void char_file_test(void)
+#ifndef _WIN32
+static void char_file_fifo_test(void)
{
+ Chardev *chr;
+ CharBackend be;
char *tmp_path = g_dir_make_tmp("qemu-test-char.XXXXXX", NULL);
+ char *fifo = g_build_filename(tmp_path, "fifo", NULL);
char *out = g_build_filename(tmp_path, "out", NULL);
- char *contents = NULL;
- ChardevFile file = { .out = out };
+ ChardevFile file = { .in = fifo,
+ .has_in = true,
+ .out = out };
ChardevBackend backend = { .type = CHARDEV_BACKEND_KIND_FILE,
.u.file.data = &file };
+ FeHandler fe = { 0, };
+ int fd, ret;
+
+ if (mkfifo(fifo, 0600) < 0) {
+ abort();
+ }
+
+ fd = open(fifo, O_RDWR);
+ ret = write(fd, "fifo-in", 8);
+ g_assert_cmpint(ret, ==, 8);
+
+ 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,
+ NULL,
+ &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);
+ g_unlink(out);
+ g_free(out);
+ g_rmdir(tmp_path);
+ g_free(tmp_path);
+}
+#endif
+
+static void char_file_test_internal(Chardev *ext_chr, const char *filepath)
+{
+ char *tmp_path = g_dir_make_tmp("qemu-test-char.XXXXXX", NULL);
+ char *out;
Chardev *chr;
+ char *contents = NULL;
+ ChardevFile file = {};
+ ChardevBackend backend = { .type = CHARDEV_BACKEND_KIND_FILE,
+ .u.file.data = &file };
gsize length;
int ret;
- chr = qemu_chardev_new(NULL, TYPE_CHARDEV_FILE, &backend,
- &error_abort);
+ if (ext_chr) {
+ chr = ext_chr;
+ out = g_strdup(filepath);
+ file.out = out;
+ } else {
+ out = g_build_filename(tmp_path, "out", NULL);
+ file.out = out;
+ 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,
- NULL,
- &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);
+ if (!ext_chr) {
object_unref(OBJECT(chr));
- g_unlink(fifo);
- g_free(fifo);
+ g_unlink(out);
+ g_free(out);
}
-#endif
-
- g_unlink(out);
+ g_free(contents);
g_rmdir(tmp_path);
g_free(tmp_path);
- g_free(out);
+}
+
+static void char_file_test(void)
+{
+ char_file_test_internal(NULL, NULL);
}
static void char_null_test(void)
@@ -633,6 +661,9 @@ int main(int argc, char **argv)
g_test_add_func("/char/pipe", char_pipe_test);
#endif
g_test_add_func("/char/file", char_file_test);
+#ifndef _WIN32
+ g_test_add_func("/char/file-fifo", char_file_fifo_test);
+#endif
g_test_add_func("/char/socket", char_socket_test);
g_test_add_func("/char/udp", char_udp_test);
--
2.7.4
- [Qemu-devel] [PATCH v3 04/13] char: forbid direct chardevice access for hotswap devices, (continued)
- [Qemu-devel] [PATCH v3 04/13] char: forbid direct chardevice access for hotswap devices, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 05/13] char: avoid chardevice direct access, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 06/13] test-char: unref chardev-udp after test, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 09/13] test-char: add hotswap test, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 07/13] test-char: split char_udp_test, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 08/13] test-char: split char_file_test,
Anton Nefedov <=
- [Qemu-devel] [PATCH v3 12/13] serial: move TIOCM update to a separate function, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 10/13] hmp: add hmp analogue for qmp-chardev-change, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 11/13] virtio-console: chardev hotswap support, Anton Nefedov, 2017/05/30
- [Qemu-devel] [PATCH v3 13/13] serial: chardev hotswap support, Anton Nefedov, 2017/05/30