diff mbox series

[33/51] tests/qtest: {ahci, ide}-test: Use relative path for temporary files

Message ID 20220824094029.1634519-34-bmeng.cn@gmail.com (mailing list archive)
State New, archived
Headers show
Series tests/qtest: Enable running qtest on Windows | expand

Commit Message

Bin Meng Aug. 24, 2022, 9:40 a.m. UTC
From: Bin Meng <bin.meng@windriver.com>

These test cases uses "blkdebug:path/to/config:path/to/image" for
testing. On Windows, absolute file paths contain the delimiter ':'
which causes the blkdebug filename parser fail to parse filenames.

Signed-off-by: Bin Meng <bin.meng@windriver.com>
---

 tests/qtest/ahci-test.c | 19 ++++++++++++++++---
 tests/qtest/ide-test.c  | 18 ++++++++++++++++--
 2 files changed, 32 insertions(+), 5 deletions(-)

Comments

Marc-André Lureau Sept. 1, 2022, 8:58 a.m. UTC | #1
On Wed, Aug 24, 2022 at 2:55 PM Bin Meng <bmeng.cn@gmail.com> wrote:

> From: Bin Meng <bin.meng@windriver.com>
>
> These test cases uses "blkdebug:path/to/config:path/to/image" for
> testing. On Windows, absolute file paths contain the delimiter ':'
> which causes the blkdebug filename parser fail to parse filenames.
>
>
hmm.. maybe it should learn to escape paths..


Signed-off-by: Bin Meng <bin.meng@windriver.com>
> ---
>
>  tests/qtest/ahci-test.c | 19 ++++++++++++++++---
>  tests/qtest/ide-test.c  | 18 ++++++++++++++++--
>  2 files changed, 32 insertions(+), 5 deletions(-)
>
> diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c
> index 0e88cd0eef..bce9ff770c 100644
> --- a/tests/qtest/ahci-test.c
> +++ b/tests/qtest/ahci-test.c
> @@ -1848,7 +1848,7 @@ static void create_ahci_io_test(enum IOMode type,
> enum AddrMode addr,
>
>  int main(int argc, char **argv)
>  {
> -    const char *arch;
> +    const char *arch, *base;
>      int ret;
>      int fd;
>      int c;
> @@ -1886,8 +1886,21 @@ int main(int argc, char **argv)
>          return 0;
>      }
>
> +    /*
> +     * "base" stores the starting point where we create temporary files.
> +     *
> +     * On Windows, this is set to the relative path of current working
> +     * directory, because the absolute path causes the blkdebug filename
> +     * parser fail to parse "blkdebug:path/to/config:path/to/image".
> +     */
> +#ifndef _WIN32
> +    base = g_get_tmp_dir();
> +#else
> +    base = ".";
> +#endif
>

Meanwhile, that seems reasonable. Perhaps chdir() to the temporary
directory first? (assuming other paths are absolute)


> +
>      /* Create a temporary image */
> -    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", g_get_tmp_dir());
> +    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", base);
>      fd = mkstemp(tmp_path);
>      g_assert(fd >= 0);
>      if (have_qemu_img()) {
> @@ -1905,7 +1918,7 @@ int main(int argc, char **argv)
>      close(fd);
>
>      /* Create temporary blkdebug instructions */
> -    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX",
> g_get_tmp_dir());
> +    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", base);
>      fd = mkstemp(debug_path);
>      g_assert(fd >= 0);
>      close(fd);
> diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c
> index ebbf8e0126..c5cad6c0be 100644
> --- a/tests/qtest/ide-test.c
> +++ b/tests/qtest/ide-test.c
> @@ -1011,17 +1011,31 @@ static void test_cdrom_dma(void)
>
>  int main(int argc, char **argv)
>  {
> +    const char *base;
>      int fd;
>      int ret;
>
> +    /*
> +     * "base" stores the starting point where we create temporary files.
> +     *
> +     * On Windows, this is set to the relative path of current working
> +     * directory, because the absolute path causes the blkdebug filename
> +     * parser fail to parse "blkdebug:path/to/config:path/to/image".
> +     */
> +#ifndef _WIN32
> +    base = g_get_tmp_dir();
> +#else
> +    base = ".";
> +#endif
> +
>      /* Create temporary blkdebug instructions */
> -    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX",
> g_get_tmp_dir());
> +    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", base);
>      fd = mkstemp(debug_path);
>      g_assert(fd >= 0);
>      close(fd);
>
>      /* Create a temporary raw image */
> -    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", g_get_tmp_dir());
> +    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", base);
>      fd = mkstemp(tmp_path);
>      g_assert(fd >= 0);
>      ret = ftruncate(fd, TEST_IMAGE_SIZE);
> --
> 2.34.1
>
>
>
Bin Meng Sept. 3, 2022, 1:30 p.m. UTC | #2
On Thu, Sep 1, 2022 at 4:58 PM Marc-André Lureau
<marcandre.lureau@gmail.com> wrote:
>
>
>
> On Wed, Aug 24, 2022 at 2:55 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>>
>> From: Bin Meng <bin.meng@windriver.com>
>>
>> These test cases uses "blkdebug:path/to/config:path/to/image" for
>> testing. On Windows, absolute file paths contain the delimiter ':'
>> which causes the blkdebug filename parser fail to parse filenames.
>>
>
> hmm.. maybe it should learn to escape paths..
>
>
>> Signed-off-by: Bin Meng <bin.meng@windriver.com>
>> ---
>>
>>  tests/qtest/ahci-test.c | 19 ++++++++++++++++---
>>  tests/qtest/ide-test.c  | 18 ++++++++++++++++--
>>  2 files changed, 32 insertions(+), 5 deletions(-)
>>
>> diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c
>> index 0e88cd0eef..bce9ff770c 100644
>> --- a/tests/qtest/ahci-test.c
>> +++ b/tests/qtest/ahci-test.c
>> @@ -1848,7 +1848,7 @@ static void create_ahci_io_test(enum IOMode type, enum AddrMode addr,
>>
>>  int main(int argc, char **argv)
>>  {
>> -    const char *arch;
>> +    const char *arch, *base;
>>      int ret;
>>      int fd;
>>      int c;
>> @@ -1886,8 +1886,21 @@ int main(int argc, char **argv)
>>          return 0;
>>      }
>>
>> +    /*
>> +     * "base" stores the starting point where we create temporary files.
>> +     *
>> +     * On Windows, this is set to the relative path of current working
>> +     * directory, because the absolute path causes the blkdebug filename
>> +     * parser fail to parse "blkdebug:path/to/config:path/to/image".
>> +     */
>> +#ifndef _WIN32
>> +    base = g_get_tmp_dir();
>> +#else
>> +    base = ".";
>> +#endif
>
>
> Meanwhile, that seems reasonable. Perhaps chdir() to the temporary directory first? (assuming other paths are absolute)

Other paths in the QEMU command line indeed are absolute, however the
QEMU executable path is set to a relative path from meson.build thus
we cannot chdir() to the temporary directory here.

>
>>
>> +
>>      /* Create a temporary image */
>> -    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", g_get_tmp_dir());
>> +    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", base);
>>      fd = mkstemp(tmp_path);
>>      g_assert(fd >= 0);
>>      if (have_qemu_img()) {
>> @@ -1905,7 +1918,7 @@ int main(int argc, char **argv)
>>      close(fd);
>>
>>      /* Create temporary blkdebug instructions */
>> -    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", g_get_tmp_dir());
>> +    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", base);
>>      fd = mkstemp(debug_path);
>>      g_assert(fd >= 0);
>>      close(fd);
>> diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c
>> index ebbf8e0126..c5cad6c0be 100644
>> --- a/tests/qtest/ide-test.c
>> +++ b/tests/qtest/ide-test.c
>> @@ -1011,17 +1011,31 @@ static void test_cdrom_dma(void)
>>
>>  int main(int argc, char **argv)
>>  {
>> +    const char *base;
>>      int fd;
>>      int ret;
>>
>> +    /*
>> +     * "base" stores the starting point where we create temporary files.
>> +     *
>> +     * On Windows, this is set to the relative path of current working
>> +     * directory, because the absolute path causes the blkdebug filename
>> +     * parser fail to parse "blkdebug:path/to/config:path/to/image".
>> +     */
>> +#ifndef _WIN32
>> +    base = g_get_tmp_dir();
>> +#else
>> +    base = ".";
>> +#endif
>> +
>>      /* Create temporary blkdebug instructions */
>> -    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", g_get_tmp_dir());
>> +    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", base);
>>      fd = mkstemp(debug_path);
>>      g_assert(fd >= 0);
>>      close(fd);
>>
>>      /* Create a temporary raw image */
>> -    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", g_get_tmp_dir());
>> +    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", base);
>>      fd = mkstemp(tmp_path);
>>      g_assert(fd >= 0);
>>      ret = ftruncate(fd, TEST_IMAGE_SIZE);
>> --
>> 2.34.1

Regards,
Bin
diff mbox series

Patch

diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c
index 0e88cd0eef..bce9ff770c 100644
--- a/tests/qtest/ahci-test.c
+++ b/tests/qtest/ahci-test.c
@@ -1848,7 +1848,7 @@  static void create_ahci_io_test(enum IOMode type, enum AddrMode addr,
 
 int main(int argc, char **argv)
 {
-    const char *arch;
+    const char *arch, *base;
     int ret;
     int fd;
     int c;
@@ -1886,8 +1886,21 @@  int main(int argc, char **argv)
         return 0;
     }
 
+    /*
+     * "base" stores the starting point where we create temporary files.
+     *
+     * On Windows, this is set to the relative path of current working
+     * directory, because the absolute path causes the blkdebug filename
+     * parser fail to parse "blkdebug:path/to/config:path/to/image".
+     */
+#ifndef _WIN32
+    base = g_get_tmp_dir();
+#else
+    base = ".";
+#endif
+
     /* Create a temporary image */
-    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", g_get_tmp_dir());
+    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", base);
     fd = mkstemp(tmp_path);
     g_assert(fd >= 0);
     if (have_qemu_img()) {
@@ -1905,7 +1918,7 @@  int main(int argc, char **argv)
     close(fd);
 
     /* Create temporary blkdebug instructions */
-    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", g_get_tmp_dir());
+    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", base);
     fd = mkstemp(debug_path);
     g_assert(fd >= 0);
     close(fd);
diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c
index ebbf8e0126..c5cad6c0be 100644
--- a/tests/qtest/ide-test.c
+++ b/tests/qtest/ide-test.c
@@ -1011,17 +1011,31 @@  static void test_cdrom_dma(void)
 
 int main(int argc, char **argv)
 {
+    const char *base;
     int fd;
     int ret;
 
+    /*
+     * "base" stores the starting point where we create temporary files.
+     *
+     * On Windows, this is set to the relative path of current working
+     * directory, because the absolute path causes the blkdebug filename
+     * parser fail to parse "blkdebug:path/to/config:path/to/image".
+     */
+#ifndef _WIN32
+    base = g_get_tmp_dir();
+#else
+    base = ".";
+#endif
+
     /* Create temporary blkdebug instructions */
-    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", g_get_tmp_dir());
+    debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", base);
     fd = mkstemp(debug_path);
     g_assert(fd >= 0);
     close(fd);
 
     /* Create a temporary raw image */
-    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", g_get_tmp_dir());
+    tmp_path = g_strdup_printf("%s/qtest.XXXXXX", base);
     fd = mkstemp(tmp_path);
     g_assert(fd >= 0);
     ret = ftruncate(fd, TEST_IMAGE_SIZE);