From nobody Thu Sep 19 01:09:03 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 153727312737890.04488666900863; Tue, 18 Sep 2018 05:18:47 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6652C285B4; Tue, 18 Sep 2018 12:18:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1E9D878DEE; Tue, 18 Sep 2018 12:18:45 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BC163181A130; Tue, 18 Sep 2018 12:18:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w8ICIBpD015777 for ; Tue, 18 Sep 2018 08:18:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id 130FA176B9; Tue, 18 Sep 2018 12:18:11 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.181]) by smtp.corp.redhat.com (Postfix) with ESMTP id 60C4A176A2 for ; Tue, 18 Sep 2018 12:18:10 +0000 (UTC) From: Pavel Hrdina To: libvir-list@redhat.com Date: Tue, 18 Sep 2018 14:17:59 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 7/9] vircgroupmock: rewrite cgroup fopen mocking X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 18 Sep 2018 12:18:46 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Move all the cgroup data into separate files out of vircgroupmock.c and rework the fopen function to load data from files. This will make it easier to add more test cases. Signed-off-by: Pavel Hrdina Reviewed-by: Fabiano Fid=C3=AAncio --- tests/vircgroupdata/all-in-one.cgroups | 7 ++ tests/vircgroupdata/all-in-one.mounts | 2 +- tests/vircgroupdata/all-in-one.parsed | 12 +- tests/vircgroupdata/all-in-one.self.cgroup | 1 + tests/vircgroupdata/logind.cgroups | 10 ++ tests/vircgroupdata/logind.mounts | 2 + tests/vircgroupdata/logind.self.cgroup | 1 + tests/vircgroupdata/systemd.cgroups | 8 ++ tests/vircgroupdata/systemd.mounts | 11 ++ tests/vircgroupdata/systemd.self.cgroup | 6 + tests/vircgroupmock.c | 133 ++++----------------- tests/vircgrouptest.c | 10 +- 12 files changed, 79 insertions(+), 124 deletions(-) create mode 100644 tests/vircgroupdata/all-in-one.cgroups create mode 100644 tests/vircgroupdata/all-in-one.self.cgroup create mode 100644 tests/vircgroupdata/logind.cgroups create mode 100644 tests/vircgroupdata/logind.mounts create mode 100644 tests/vircgroupdata/logind.self.cgroup create mode 100644 tests/vircgroupdata/systemd.cgroups create mode 100644 tests/vircgroupdata/systemd.mounts create mode 100644 tests/vircgroupdata/systemd.self.cgroup diff --git a/tests/vircgroupdata/all-in-one.cgroups b/tests/vircgroupdata/a= ll-in-one.cgroups new file mode 100644 index 0000000000..7208e5a0b6 --- /dev/null +++ b/tests/vircgroupdata/all-in-one.cgroups @@ -0,0 +1,7 @@ +#subsys_name hierarchy num_cgroups enabled +cpuset 6 1 1 +cpu 6 1 1 +cpuacct 6 1 1 +memory 6 1 1 +devices 6 1 1 +blkio 6 1 1 diff --git a/tests/vircgroupdata/all-in-one.mounts b/tests/vircgroupdata/al= l-in-one.mounts index 14093b961c..76c579ff69 100644 --- a/tests/vircgroupdata/all-in-one.mounts +++ b/tests/vircgroupdata/all-in-one.mounts @@ -4,4 +4,4 @@ proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 udev /dev devtmpfs rw,relatime,size=3D16458560k,nr_inodes=3D4114640,mode= =3D755 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=3D5,mode=3D620,ptmxmo= de=3D000 0 0 nfsd /proc/fs/nfsd nfsd rw,relatime 0 0 -cgroup /sys/fs/cgroup cgroup rw,relatime,blkio,devices,memory,cpuacct,cpu,= cpuset 0 0 +cgroup /not/really/sys/fs/cgroup cgroup rw,relatime,blkio,devices,memory,c= puacct,cpu,cpuset 0 0 diff --git a/tests/vircgroupdata/all-in-one.parsed b/tests/vircgroupdata/al= l-in-one.parsed index 2701778fea..d703d08fb9 100644 --- a/tests/vircgroupdata/all-in-one.parsed +++ b/tests/vircgroupdata/all-in-one.parsed @@ -1,10 +1,10 @@ -cpu /sys/fs/cgroup -cpuacct /sys/fs/cgroup -cpuset /sys/fs/cgroup -memory /sys/fs/cgroup -devices /sys/fs/cgroup +cpu /not/really/sys/fs/cgroup +cpuacct /not/really/sys/fs/cgroup +cpuset /not/really/sys/fs/cgroup +memory /not/really/sys/fs/cgroup +devices /not/really/sys/fs/cgroup freezer -blkio /sys/fs/cgroup +blkio /not/really/sys/fs/cgroup net_cls perf_event name=3Dsystemd diff --git a/tests/vircgroupdata/all-in-one.self.cgroup b/tests/vircgroupda= ta/all-in-one.self.cgroup new file mode 100644 index 0000000000..cf237502e9 --- /dev/null +++ b/tests/vircgroupdata/all-in-one.self.cgroup @@ -0,0 +1 @@ +6:blkio,devices,memory,cpuacct,cpu,cpuset:/ diff --git a/tests/vircgroupdata/logind.cgroups b/tests/vircgroupdata/login= d.cgroups new file mode 100644 index 0000000000..9d46f130e0 --- /dev/null +++ b/tests/vircgroupdata/logind.cgroups @@ -0,0 +1,10 @@ +#subsys_name hierarchy num_cgroups enabled +cpuset 0 1 1 +cpu 0 1 1 +cpuacct 0 1 1 +memory 0 1 0 +devices 0 1 1 +freezer 0 1 1 +net_cls 0 1 1 +blkio 0 1 1 +perf_event 0 1 1 diff --git a/tests/vircgroupdata/logind.mounts b/tests/vircgroupdata/logind= .mounts new file mode 100644 index 0000000000..3ab908aee9 --- /dev/null +++ b/tests/vircgroupdata/logind.mounts @@ -0,0 +1,2 @@ +none /not/really/sys/fs/cgroup tmpfs rw,rootcontext=3Dsystem_u:object_r:sy= sfs_t:s0,seclabel,relatime,size=3D4k,mode=3D755 0 0 +systemd /not/really/sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,re= latime,name=3Dsystemd 0 0 diff --git a/tests/vircgroupdata/logind.self.cgroup b/tests/vircgroupdata/l= ogind.self.cgroup new file mode 100644 index 0000000000..31e0cfe8eb --- /dev/null +++ b/tests/vircgroupdata/logind.self.cgroup @@ -0,0 +1 @@ +0:name=3Dsystemd:/ diff --git a/tests/vircgroupdata/systemd.cgroups b/tests/vircgroupdata/syst= emd.cgroups new file mode 100644 index 0000000000..d32dfab222 --- /dev/null +++ b/tests/vircgroupdata/systemd.cgroups @@ -0,0 +1,8 @@ +#subsys_name hierarchy num_cgroups enabled +cpuset 2 4 1 +cpu 3 48 1 +cpuacct 3 48 1 +memory 4 4 1 +devices 5 4 1 +freezer 6 4 1 +blkio 8 4 1 diff --git a/tests/vircgroupdata/systemd.mounts b/tests/vircgroupdata/syste= md.mounts new file mode 100644 index 0000000000..75572c86f7 --- /dev/null +++ b/tests/vircgroupdata/systemd.mounts @@ -0,0 +1,11 @@ +rootfs / rootfs rw 0 0 +tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=3D755 0 0 +tmpfs /not/really/sys/fs/cgroup tmpfs rw,seclabel,nosuid,nodev,noexec,mode= =3D755 0 0 +cgroup /not/really/sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,rel= atime,release_agent=3D/usr/lib/systemd/systemd-cgroups-agent,name=3Dsystemd= 0 0 +cgroup /not/really/sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,rela= time,cpuset 0 0 +cgroup /not/really/sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec= ,relatime,cpuacct,cpu 0 0 +cgroup /not/really/sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,rel= atime,freezer 0 0 +cgroup /not/really/sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relat= ime,blkio 0 0 +cgroup /not/really/sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,rela= time,memory 0 0 +/dev/sda1 /boot ext4 rw,seclabel,relatime,data=3Dordered 0 0 +tmpfs /tmp tmpfs rw,seclabel,relatime,size=3D1024000k 0 0 diff --git a/tests/vircgroupdata/systemd.self.cgroup b/tests/vircgroupdata/= systemd.self.cgroup new file mode 100644 index 0000000000..2b95af79d2 --- /dev/null +++ b/tests/vircgroupdata/systemd.self.cgroup @@ -0,0 +1,6 @@ +115:memory:/ +8:blkio:/ +6:freezer:/ +3:cpuacct,cpu:/system +2:cpuset:/ +1:name=3Dsystemd:/user/berrange/123 diff --git a/tests/vircgroupmock.c b/tests/vircgroupmock.c index e0024b2c63..3afe2fe192 100644 --- a/tests/vircgroupmock.c +++ b/tests/vircgroupmock.c @@ -81,85 +81,6 @@ const char *fakedevicedir1 =3D FAKEDEVDIR1; * of files beneath it */ =20 -/* - * Intentionally missing the 'devices' mount. - * Co-mounting cpu & cpuacct controllers - * An anonymous controller for systemd - */ -const char *procmounts =3D - "rootfs / rootfs rw 0 0\n" - "tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=3D755 0 0\n" - "tmpfs /not/really/sys/fs/cgroup tmpfs rw,seclabel,nosuid,nodev,noexec= ,mode=3D755 0 0\n" - "cgroup /not/really/sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexe= c,relatime,release_agent=3D/usr/lib/systemd/systemd-cgroups-agent,name=3Dsy= stemd 0 0\n" - "cgroup /not/really/sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec= ,relatime,cpuset 0 0\n" - "cgroup /not/really/sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,n= oexec,relatime,cpuacct,cpu 0 0\n" - "cgroup /not/really/sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexe= c,relatime,freezer 0 0\n" - "cgroup /not/really/sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,= relatime,blkio 0 0\n" - "cgroup /not/really/sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec= ,relatime,memory 0 0\n" - "/dev/sda1 /boot ext4 rw,seclabel,relatime,data=3Dordered 0 0\n" - "tmpfs /tmp tmpfs rw,seclabel,relatime,size=3D1024000k 0 0\n"; - -const char *procselfcgroups =3D - "115:memory:/\n" - "8:blkio:/\n" - "6:freezer:/\n" - "3:cpuacct,cpu:/system\n" - "2:cpuset:/\n" - "1:name=3Dsystemd:/user/berrange/123\n"; - -const char *proccgroups =3D - "#subsys_name hierarchy num_cgroups enabled\n" - "cpuset 2 4 1\n" - "cpu 3 48 1\n" - "cpuacct 3 48 1\n" - "memory 4 4 1\n" - "devices 5 4 1\n" - "freezer 6 4 1\n" - "blkio 8 4 1\n"; - - -const char *procmountsallinone =3D - "rootfs / rootfs rw 0 0\n" - "sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0\n" - "proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0\n" - "udev /dev devtmpfs rw,relatime,size=3D16458560k,nr_inodes=3D4114640,m= ode=3D755 0 0\n" - "devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=3D5,mode=3D620,p= tmxmode=3D000 0 0\n" - "nfsd /proc/fs/nfsd nfsd rw,relatime 0 0\n" - "cgroup /not/really/sys/fs/cgroup cgroup rw,relatime,blkio,devices,mem= ory,cpuacct,cpu,cpuset 0 0\n"; - -const char *procselfcgroupsallinone =3D - "6:blkio,devices,memory,cpuacct,cpu,cpuset:/"; - -const char *proccgroupsallinone =3D - "#subsys_name hierarchy num_cgroups enabled\n" - "cpuset 6 1 1\n" - "cpu 6 1 1\n" - "cpuacct 6 1 1\n" - "memory 6 1 1\n" - "devices 6 1 1\n" - "blkio 6 1 1\n"; - -const char *procmountslogind =3D - "none /not/really/sys/fs/cgroup tmpfs rw,rootcontext=3Dsystem_u:object= _r:sysfs_t:s0,seclabel,relatime,size=3D4k,mode=3D755 0 0\n" - "systemd /not/really/sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noex= ec,relatime,name=3Dsystemd 0 0\n"; - -const char *procselfcgroupslogind =3D - "1:name=3Dsystemd:/\n"; - -const char *proccgroupslogind =3D - "#subsys_name hierarchy num_cgroups enabled\n" - "cpuset 0 1 1\n" - "cpu 0 1 1\n" - "cpuacct 0 1 1\n" - "memory 0 1 0\n" - "devices 0 1 1\n" - "freezer 0 1 1\n" - "net_cls 0 1 1\n" - "blkio 0 1 1\n" - "perf_event 0 1 1\n"; - - - static int make_file(const char *path, const char *name, const char *value) @@ -379,28 +300,16 @@ static void init_sysfs(void) =20 FILE *fopen(const char *path, const char *mode) { - const char *mock; - bool allinone =3D false, logind =3D false; - init_syms(); + char *filepath =3D NULL; + const char *type =3D NULL; + FILE *rc =3D NULL; + const char *filename =3D getenv("VIR_CGROUP_MOCK_FILENAME"); =20 - mock =3D getenv("VIR_CGROUP_MOCK_MODE"); - if (mock) { - if (STREQ(mock, "allinone")) - allinone =3D true; - else if (STREQ(mock, "logind")) - logind =3D true; - } + init_syms(); =20 if (STREQ(path, "/proc/mounts")) { if (STREQ(mode, "r")) { - if (allinone) - return fmemopen((void *)procmountsallinone, - strlen(procmountsallinone), mode); - else if (logind) - return fmemopen((void *)procmountslogind, - strlen(procmountslogind), mode); - else - return fmemopen((void *)procmounts, strlen(procmounts), mo= de); + type =3D "mounts"; } else { errno =3D EACCES; return NULL; @@ -408,14 +317,7 @@ FILE *fopen(const char *path, const char *mode) } if (STREQ(path, "/proc/cgroups")) { if (STREQ(mode, "r")) { - if (allinone) - return fmemopen((void *)proccgroupsallinone, - strlen(proccgroupsallinone), mode); - else if (logind) - return fmemopen((void *)proccgroupslogind, - strlen(proccgroupslogind), mode); - else - return fmemopen((void *)proccgroups, strlen(proccgroups), = mode); + type =3D "cgroups"; } else { errno =3D EACCES; return NULL; @@ -423,20 +325,25 @@ FILE *fopen(const char *path, const char *mode) } if (STREQ(path, "/proc/self/cgroup")) { if (STREQ(mode, "r")) { - if (allinone) - return fmemopen((void *)procselfcgroupsallinone, - strlen(procselfcgroupsallinone), mode); - else if (logind) - return fmemopen((void *)procselfcgroupslogind, - strlen(procselfcgroupslogind), mode); - else - return fmemopen((void *)procselfcgroups, strlen(procselfcg= roups), mode); + type =3D "self.cgroup"; } else { errno =3D EACCES; return NULL; } } =20 + if (type) { + if (!filename) + abort(); + if (virAsprintfQuiet(&filepath, "%s/vircgroupdata/%s.%s", + abs_srcdir, filename, type) < 0) { + abort(); + } + rc =3D real_fopen(filepath, mode); + free(filepath); + return rc; + } + return real_fopen(path, mode); } =20 diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index be50f3e73c..7968903cad 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -890,6 +890,7 @@ mymain(void) DETECT_MOUNTS("no-cgroups"); DETECT_MOUNTS("kubevirt"); =20 + setenv("VIR_CGROUP_MOCK_FILENAME", "systemd", 1); if (virTestRun("New cgroup for self", testCgroupNewForSelf, NULL) < 0) ret =3D -1; =20 @@ -925,20 +926,21 @@ mymain(void) =20 if (virTestRun("virCgroupGetPercpuStats works", testCgroupGetPercpuSta= ts, NULL) < 0) ret =3D -1; + unsetenv("VIR_CGROUP_MOCK_FILENAME"); =20 - setenv("VIR_CGROUP_MOCK_MODE", "allinone", 1); + setenv("VIR_CGROUP_MOCK_FILENAME", "all-in-one", 1); if (virTestRun("New cgroup for self (allinone)", testCgroupNewForSelfA= llInOne, NULL) < 0) ret =3D -1; if (virTestRun("Cgroup available", testCgroupAvailable, (void*)0x1) < = 0) ret =3D -1; - unsetenv("VIR_CGROUP_MOCK_MODE"); + unsetenv("VIR_CGROUP_MOCK_FILENAME"); =20 - setenv("VIR_CGROUP_MOCK_MODE", "logind", 1); + setenv("VIR_CGROUP_MOCK_FILENAME", "logind", 1); if (virTestRun("New cgroup for self (logind)", testCgroupNewForSelfLog= ind, NULL) < 0) ret =3D -1; if (virTestRun("Cgroup available", testCgroupAvailable, (void*)0x0) < = 0) ret =3D -1; - unsetenv("VIR_CGROUP_MOCK_MODE"); + unsetenv("VIR_CGROUP_MOCK_FILENAME"); =20 if (getenv("LIBVIRT_SKIP_CLEANUP") =3D=3D NULL) virFileDeleteTree(fakerootdir); --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list