This commit adds unit tests for cgroup_process_v1_mnt().  Note
that the compiler flag -Wno-write-strings was also added because
C++ throws a warning due to how the controllers[] array is
utilized.

[----------] 4 tests from CgroupProcessV1MntTest
[ RUN      ] CgroupProcessV1MntTest.AddV1Mount
[       OK ] CgroupProcessV1MntTest.AddV1Mount (0 ms)
[ RUN      ] CgroupProcessV1MntTest.AddV1Mount_Duplicate
[       OK ] CgroupProcessV1MntTest.AddV1Mount_Duplicate (0 ms)
[ RUN      ] CgroupProcessV1MntTest.AddV1NamedMount
[       OK ] CgroupProcessV1MntTest.AddV1NamedMount (0 ms)
[ RUN      ] CgroupProcessV1MntTest.AddV1NamedMount_Duplicate
[       OK ] CgroupProcessV1MntTest.AddV1NamedMount_Duplicate (0 ms)
[----------] 4 tests from CgroupProcessV1MntTest (0 ms total)

Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com>
---
 gunit/007-cgroup_process_v1_mount.cpp | 111 ++++++++++++++++++++++++++
 gunit/Makefile.am                     |   4 +-
 2 files changed, 114 insertions(+), 1 deletion(-)
 create mode 100644 gunit/007-cgroup_process_v1_mount.cpp

diff --git a/gunit/007-cgroup_process_v1_mount.cpp 
b/gunit/007-cgroup_process_v1_mount.cpp
new file mode 100644
index 000000000000..7a82f4001eaf
--- /dev/null
+++ b/gunit/007-cgroup_process_v1_mount.cpp
@@ -0,0 +1,111 @@
+/**
+ * libcgroup googletest for cgroup_process_v1_mnt()
+ *
+ * Copyright (c) 2020 Oracle and/or its affiliates.
+ * Author: Tom Hromatka <tom.hroma...@oracle.com>
+ */
+
+/*
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, see <http://www.gnu.org/licenses>.
+ */
+
+#include <mntent.h>
+
+#include "gtest/gtest.h"
+#include "libcgroup-internal.h"
+
+static int mnt_tbl_idx = 0;
+
+class CgroupProcessV1MntTest : public ::testing::Test {
+};
+
+TEST_F(CgroupProcessV1MntTest, AddV1Mount)
+{
+       char *controllers[] = {"cpu", "memory", NULL};
+       struct mntent ent = (struct mntent) {
+               .mnt_fsname = "cgroup",
+               .mnt_dir = "/sys/fs/cgroup/memory",
+               .mnt_type = "cgroup",
+               .mnt_opts = "rw,nosuid,nodev,noexec,relatime,seclabel,memory",
+       };
+       int ret;
+
+       ret = cgroup_process_v1_mnt(controllers, &ent, &mnt_tbl_idx);
+
+       ASSERT_EQ(ret, 0);
+       ASSERT_EQ(mnt_tbl_idx, 1);
+       ASSERT_STREQ(cg_mount_table[0].name, "memory");
+       ASSERT_STREQ(cg_mount_table[0].mount.path, ent.mnt_dir);
+}
+
+/* The AddV1Mount() test above added the memory controller to the
+ * cg_mount_table[].  Now let's add another mount point of the
+ * memory controller to test the duplicate mount handling
+ */
+TEST_F(CgroupProcessV1MntTest, AddV1Mount_Duplicate)
+{
+       char *controllers[] = {"cpu", "cpuset", "memory", NULL};
+       struct mntent ent = (struct mntent) {
+               .mnt_fsname = "cgroup",
+               .mnt_dir = "/cgroup/memory",
+               .mnt_type = "cgroup",
+               .mnt_opts = "rw,nosuid,nodev,noexec,relatime,seclabel,memory",
+       };
+       int ret;
+
+       ASSERT_EQ(NULL, cg_mount_table[0].mount.next);
+
+       ret = cgroup_process_v1_mnt(controllers, &ent, &mnt_tbl_idx);
+
+       ASSERT_EQ(ret, 0);
+       ASSERT_EQ(mnt_tbl_idx, 1);
+       ASSERT_STREQ(cg_mount_table[0].mount.next->path, ent.mnt_dir);
+}
+
+TEST_F(CgroupProcessV1MntTest, AddV1NamedMount)
+{
+       char *controllers[] = {"cpu", "memory", "systemd", NULL};
+       struct mntent ent = (struct mntent) {
+               .mnt_fsname = "cgroup",
+               .mnt_dir = "/sys/fs/cgroup/systemd",
+               .mnt_type = "cgroup",
+               .mnt_opts = 
"rw,nosuid,nodev,noexec,relatime,seclabel,name=systemd",
+       };
+       int ret;
+
+       ret = cgroup_process_v1_mnt(controllers, &ent, &mnt_tbl_idx);
+
+       ASSERT_EQ(ret, 0);
+       ASSERT_EQ(mnt_tbl_idx, 2);
+       ASSERT_STREQ(cg_mount_table[1].name, "name=systemd");
+       ASSERT_STREQ(cg_mount_table[1].mount.path, ent.mnt_dir);
+}
+
+TEST_F(CgroupProcessV1MntTest, AddV1NamedMount_Duplicate)
+{
+       char *controllers[] = {"cpu", "memory", "systemd", NULL};
+       struct mntent ent = (struct mntent) {
+               .mnt_fsname = "cgroup",
+               .mnt_dir = "/cgroup2/systemd",
+               .mnt_type = "cgroup",
+               .mnt_opts = 
"rw,nosuid,nodev,noexec,relatime,seclabel,name=systemd",
+       };
+       int ret;
+
+       ret = cgroup_process_v1_mnt(controllers, &ent, &mnt_tbl_idx);
+
+       ASSERT_EQ(ret, 0);
+       ASSERT_EQ(mnt_tbl_idx, 2);
+       ASSERT_STREQ(cg_mount_table[1].name, "name=systemd");
+       ASSERT_STREQ(cg_mount_table[1].mount.next->path, ent.mnt_dir);
+}
diff --git a/gunit/Makefile.am b/gunit/Makefile.am
index c06e04295cc1..a3e8ef0835f7 100644
--- a/gunit/Makefile.am
+++ b/gunit/Makefile.am
@@ -24,6 +24,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include \
              -I$(top_builddir)/googletest/googletest/include \
              -I$(top_builddir)/googletest/googletest \
              -std=c++11 \
+             -Wno-write-strings \
              -DSTATIC= \
              -DUNIT_TEST
 LDADD = $(top_builddir)/src/.libs/libcgroupfortesting.la
@@ -42,6 +43,7 @@ gtest_SOURCES = gtest.cpp \
                003-cg_get_cgroups_from_proc_cgroups.cpp \
                004-cgroup_compare_ignore_rule.cpp \
                005-cgroup_compare_wildcard_procname.cpp \
-               006-cgroup_get_cgroup.cpp
+               006-cgroup_get_cgroup.cpp \
+               007-cgroup_process_v1_mount.cpp
 gtest_LDFLAGS = -L$(top_builddir)/googletest/googletest -l:libgtest.so \
                -rpath $(abs_top_builddir)/googletest/googletest
-- 
2.25.3



_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to