[libvirt] [PATCH 8/9] vircgrouptest: call virCgroupDetectMounts directly

Pavel Hrdina posted 9 patches 5 years, 12 months ago
There is a newer version of this series
[libvirt] [PATCH 8/9] vircgrouptest: call virCgroupDetectMounts directly
Posted by Pavel Hrdina 5 years, 12 months ago
Because we can set which files to return for cgroup tests there
is no need to have special function tailored to run tests.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
---
 src/libvirt_private.syms |  2 +-
 src/util/vircgroup.c     | 21 +++++----------------
 src/util/vircgrouppriv.h |  4 +---
 tests/vircgrouptest.c    | 16 ++++++++--------
 4 files changed, 15 insertions(+), 28 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index ad7ce57b65..7f3b5738c4 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1513,7 +1513,7 @@ virCgroupDelThread;
 virCgroupDenyAllDevices;
 virCgroupDenyDevice;
 virCgroupDenyDevicePath;
-virCgroupDetectMountsFromFile;
+virCgroupDetectMounts;
 virCgroupFree;
 virCgroupGetBlkioDeviceReadBps;
 virCgroupGetBlkioDeviceReadIops;
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 3211f63cb1..f8ef76136b 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -430,9 +430,7 @@ virCgroupMountOptsMatchController(const char *mntOpts,
  * mounted and where
  */
 int
-virCgroupDetectMountsFromFile(virCgroupPtr group,
-                              const char *path,
-                              bool checkLinks)
+virCgroupDetectMounts(virCgroupPtr group)
 {
     size_t i;
     FILE *mounts = NULL;
@@ -440,9 +438,9 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
     char buf[CGROUP_MAX_VAL];
     int ret = -1;
 
-    mounts = fopen(path, "r");
+    mounts = fopen("/proc/mounts", "r");
     if (mounts == NULL) {
-        virReportSystemError(errno, _("Unable to open %s"), path);
+        virReportSystemError(errno, "%s", _("Unable to open /proc/mounts"));
         return -1;
     }
 
@@ -470,8 +468,7 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
 
                 /* If it is a co-mount it has a filename like "cpu,cpuacct"
                  * and we must identify the symlink path */
-                if (checkLinks &&
-                    virCgroupResolveMountLink(entry.mnt_dir, typestr,
+                if (virCgroupResolveMountLink(entry.mnt_dir, typestr,
                                               controller) < 0) {
                     goto cleanup;
                 }
@@ -485,12 +482,6 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
     return ret;
 }
 
-static int
-virCgroupDetectMounts(virCgroupPtr group)
-{
-    return virCgroupDetectMountsFromFile(group, "/proc/mounts", true);
-}
-
 
 static int
 virCgroupCopyPlacement(virCgroupPtr group,
@@ -4082,9 +4073,7 @@ virCgroupAvailable(void)
 
 
 int
-virCgroupDetectMountsFromFile(virCgroupPtr group ATTRIBUTE_UNUSED,
-                              const char *path ATTRIBUTE_UNUSED,
-                              bool checkLinks ATTRIBUTE_UNUSED)
+virCgroupDetectMounts(virCgroupPtr group ATTRIBUTE_UNUSED)
 {
     virReportSystemError(ENXIO, "%s",
                          _("Control groups not supported on this platform"));
diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h
index a0034f3889..f78fe8bb9c 100644
--- a/src/util/vircgrouppriv.h
+++ b/src/util/vircgrouppriv.h
@@ -50,9 +50,7 @@ struct _virCgroup {
     virCgroupController controllers[VIR_CGROUP_CONTROLLER_LAST];
 };
 
-int virCgroupDetectMountsFromFile(virCgroupPtr group,
-                                  const char *path,
-                                  bool checkLinks);
+int virCgroupDetectMounts(virCgroupPtr group);
 
 int virCgroupNewPartition(const char *path,
                           bool create,
diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
index 7968903cad..6a38091a86 100644
--- a/tests/vircgrouptest.c
+++ b/tests/vircgrouptest.c
@@ -164,21 +164,21 @@ testCgroupDetectMounts(const void *args)
 {
     int result = -1;
     const char *file = args;
-    char *mounts = NULL;
     char *parsed = NULL;
     const char *actual;
     virCgroupPtr group = NULL;
     virBuffer buf = VIR_BUFFER_INITIALIZER;
     size_t i;
 
-    if (virAsprintf(&mounts, "%s/vircgroupdata/%s.mounts",
-                    abs_srcdir, file) < 0 ||
-        virAsprintf(&parsed, "%s/vircgroupdata/%s.parsed",
-                    abs_srcdir, file) < 0 ||
-        VIR_ALLOC(group) < 0)
+    setenv("VIR_CGROUP_MOCK_FILENAME", file, 1);
+
+    if (virAsprintf(&parsed, "%s/vircgroupdata/%s.parsed", abs_srcdir, file) < 0)
+        goto cleanup;
+
+    if (VIR_ALLOC(group) < 0)
         goto cleanup;
 
-    if (virCgroupDetectMountsFromFile(group, mounts, false) < 0)
+    if (virCgroupDetectMounts(group) < 0)
         goto cleanup;
 
     for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
@@ -196,7 +196,7 @@ testCgroupDetectMounts(const void *args)
     result = 0;
 
  cleanup:
-    VIR_FREE(mounts);
+    unsetenv("VIR_CGROUP_MOCK_FILENAME");
     VIR_FREE(parsed);
     virCgroupFree(&group);
     virBufferFreeAndReset(&buf);
-- 
2.17.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 8/9] vircgrouptest: call virCgroupDetectMounts directly
Posted by Fabiano Fidêncio 5 years, 12 months ago
On Tue, Sep 18, 2018 at 2:18 PM, Pavel Hrdina <phrdina@redhat.com> wrote:

> Because we can set which files to return for cgroup tests there
> is no need to have special function tailored to run tests.
>
> Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
> ---
>  src/libvirt_private.syms |  2 +-
>  src/util/vircgroup.c     | 21 +++++----------------
>  src/util/vircgrouppriv.h |  4 +---
>  tests/vircgrouptest.c    | 16 ++++++++--------
>  4 files changed, 15 insertions(+), 28 deletions(-)
>
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index ad7ce57b65..7f3b5738c4 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -1513,7 +1513,7 @@ virCgroupDelThread;
>  virCgroupDenyAllDevices;
>  virCgroupDenyDevice;
>  virCgroupDenyDevicePath;
> -virCgroupDetectMountsFromFile;
> +virCgroupDetectMounts;
>  virCgroupFree;
>  virCgroupGetBlkioDeviceReadBps;
>  virCgroupGetBlkioDeviceReadIops;
> diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
> index 3211f63cb1..f8ef76136b 100644
> --- a/src/util/vircgroup.c
> +++ b/src/util/vircgroup.c
> @@ -430,9 +430,7 @@ virCgroupMountOptsMatchController(const char *mntOpts,
>   * mounted and where
>   */
>  int
> -virCgroupDetectMountsFromFile(virCgroupPtr group,
> -                              const char *path,
> -                              bool checkLinks)
> +virCgroupDetectMounts(virCgroupPtr group)
>  {
>      size_t i;
>      FILE *mounts = NULL;
> @@ -440,9 +438,9 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
>      char buf[CGROUP_MAX_VAL];
>      int ret = -1;
>
> -    mounts = fopen(path, "r");
> +    mounts = fopen("/proc/mounts", "r");
>      if (mounts == NULL) {
> -        virReportSystemError(errno, _("Unable to open %s"), path);
> +        virReportSystemError(errno, "%s", _("Unable to open
> /proc/mounts"));
>          return -1;
>      }
>
> @@ -470,8 +468,7 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
>
>                  /* If it is a co-mount it has a filename like
> "cpu,cpuacct"
>                   * and we must identify the symlink path */
> -                if (checkLinks &&
> -                    virCgroupResolveMountLink(entry.mnt_dir, typestr,
> +                if (virCgroupResolveMountLink(entry.mnt_dir, typestr,
>                                                controller) < 0) {
>                      goto cleanup;
>                  }
> @@ -485,12 +482,6 @@ virCgroupDetectMountsFromFile(virCgroupPtr group,
>      return ret;
>  }
>
> -static int
> -virCgroupDetectMounts(virCgroupPtr group)
> -{
> -    return virCgroupDetectMountsFromFile(group, "/proc/mounts", true);
> -}
> -
>
>  static int
>  virCgroupCopyPlacement(virCgroupPtr group,
> @@ -4082,9 +4073,7 @@ virCgroupAvailable(void)
>
>
>  int
> -virCgroupDetectMountsFromFile(virCgroupPtr group ATTRIBUTE_UNUSED,
> -                              const char *path ATTRIBUTE_UNUSED,
> -                              bool checkLinks ATTRIBUTE_UNUSED)
> +virCgroupDetectMounts(virCgroupPtr group ATTRIBUTE_UNUSED)
>  {
>      virReportSystemError(ENXIO, "%s",
>                           _("Control groups not supported on this
> platform"));
> diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h
> index a0034f3889..f78fe8bb9c 100644
> --- a/src/util/vircgrouppriv.h
> +++ b/src/util/vircgrouppriv.h
> @@ -50,9 +50,7 @@ struct _virCgroup {
>      virCgroupController controllers[VIR_CGROUP_CONTROLLER_LAST];
>  };
>
> -int virCgroupDetectMountsFromFile(virCgroupPtr group,
> -                                  const char *path,
> -                                  bool checkLinks);
> +int virCgroupDetectMounts(virCgroupPtr group);
>
>  int virCgroupNewPartition(const char *path,
>                            bool create,
> diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
> index 7968903cad..6a38091a86 100644
> --- a/tests/vircgrouptest.c
> +++ b/tests/vircgrouptest.c
> @@ -164,21 +164,21 @@ testCgroupDetectMounts(const void *args)
>  {
>      int result = -1;
>      const char *file = args;
> -    char *mounts = NULL;
>      char *parsed = NULL;
>      const char *actual;
>      virCgroupPtr group = NULL;
>      virBuffer buf = VIR_BUFFER_INITIALIZER;
>      size_t i;
>
> -    if (virAsprintf(&mounts, "%s/vircgroupdata/%s.mounts",
> -                    abs_srcdir, file) < 0 ||
> -        virAsprintf(&parsed, "%s/vircgroupdata/%s.parsed",
> -                    abs_srcdir, file) < 0 ||
> -        VIR_ALLOC(group) < 0)
> +    setenv("VIR_CGROUP_MOCK_FILENAME", file, 1);
> +
> +    if (virAsprintf(&parsed, "%s/vircgroupdata/%s.parsed", abs_srcdir,
> file) < 0)
> +        goto cleanup;
> +
> +    if (VIR_ALLOC(group) < 0)
>

Just a comment ... although there was no need to split this in two
different checks, I do believe it's cleaner to read.


>          goto cleanup;
>
> -    if (virCgroupDetectMountsFromFile(group, mounts, false) < 0)
> +    if (virCgroupDetectMounts(group) < 0)
>          goto cleanup;
>
>      for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
> @@ -196,7 +196,7 @@ testCgroupDetectMounts(const void *args)
>      result = 0;
>
>   cleanup:
> -    VIR_FREE(mounts);
> +    unsetenv("VIR_CGROUP_MOCK_FILENAME");
>      VIR_FREE(parsed);
>      virCgroupFree(&group);
>      virBufferFreeAndReset(&buf);
> --
> 2.17.1
>
> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>

Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list