Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F168120284
D30949.id92829.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
15 KB
Referenced Files
None
Subscribers
None
D30949.id92829.diff
View Options
diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist
--- a/etc/mtree/BSD.tests.dist
+++ b/etc/mtree/BSD.tests.dist
@@ -860,6 +860,8 @@
..
posixshm
..
+ racct
+ ..
sys
..
vfs
diff --git a/tests/sys/Makefile b/tests/sys/Makefile
--- a/tests/sys/Makefile
+++ b/tests/sys/Makefile
@@ -28,6 +28,7 @@
TESTS_SUBDIRS+= netpfil
TESTS_SUBDIRS+= opencrypto
TESTS_SUBDIRS+= posixshm
+TESTS_SUBDIRS+= racct
TESTS_SUBDIRS+= sys
TESTS_SUBDIRS+= vfs
TESTS_SUBDIRS+= vm
diff --git a/tests/sys/racct/Makefile b/tests/sys/racct/Makefile
new file mode 100644
--- /dev/null
+++ b/tests/sys/racct/Makefile
@@ -0,0 +1,16 @@
+PACKAGE= tests
+
+TESTSDIR= ${TESTSBASE}/sys/racct
+
+BINDIR= ${TESTSDIR}
+
+ATF_TESTS_SH+= racct_jail_shm \
+ racct_jail_cpu \
+ racct_jail_proc
+
+PROGS+= loop \
+ manyforks
+
+${PACKAGE}FILES+= utils.subr
+
+.include <bsd.test.mk>
diff --git a/tests/sys/racct/loop.c b/tests/sys/racct/loop.c
new file mode 100644
--- /dev/null
+++ b/tests/sys/racct/loop.c
@@ -0,0 +1,43 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 The FreeBSD Foundation
+ *
+ * This software was developed by Cyril Zhang under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/time.h>
+#include <stdlib.h>
+
+int
+main()
+{
+ struct timeval zero = { 0, 0 };
+ struct timeval three = { 3, 0 };
+ struct itimerval timer = { zero, three };
+ setitimer(ITIMER_REAL, &timer, NULL);
+ for (;;)
+ system("true");
+}
diff --git a/tests/sys/racct/manyforks.c b/tests/sys/racct/manyforks.c
new file mode 100644
--- /dev/null
+++ b/tests/sys/racct/manyforks.c
@@ -0,0 +1,61 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 The FreeBSD Foundation
+ *
+ * This software was developed by Cyril Zhang under sponsorship from
+ * the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+
+static void
+fork_and_handle(int fail)
+{
+ pid_t pid = fork();
+ if (pid == 0) {
+ usleep(2000000);
+ exit(0);
+ }
+ else if (fail) {
+ exit(!(pid == -1));
+ }
+ else if (pid == -1) {
+ exit(1);
+ }
+}
+
+int
+main()
+{
+ /*
+ * Fork 5 times successfully,
+ * 1 time unsuccessfully.
+ */
+ for (int i = 0; i < 5; ++i) {
+ fork_and_handle(0);
+ }
+ fork_and_handle(1);
+}
diff --git a/tests/sys/racct/racct_jail_cpu.sh b/tests/sys/racct/racct_jail_cpu.sh
new file mode 100644
--- /dev/null
+++ b/tests/sys/racct/racct_jail_cpu.sh
@@ -0,0 +1,66 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2021 The FreeBSD Foundation
+#
+# This software was developed by Cyril Zhang under sponsorship from
+# the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+. $(atf_get_srcdir)/utils.subr
+
+atf_test_case racct_cpu cleanup
+racct_cpu_head()
+{
+ atf_set "descr" "Tests pcpu and cputime for a jail racct."
+ atf_set "require.user" "root"
+}
+racct_cpu_body()
+{
+ # This test checks pctcpu and cputime at once,
+ # in order to avoid running the 3s loop twice.
+ racct_mkjail myjail
+ jexec myjail $(atf_get_srcdir)/loop &
+ sleep 2
+ pcpu=$(rctl -u jail:myjail | grep "pcpu" | sed 's/.*=//')
+ sleep 2
+ cputime=$(rctl -u jail:myjail | grep "cputime" | sed 's/.*=//')
+ # We'll give a very large tolerance for pcpu,
+ # due to the decay factor involved in its calculation.
+ # cputime may be rounded down to 2 but should
+ # not exceed 3.
+ if [ $cputime -lt 2 ] || [ $cputime -gt 3 ] || [ $pcpu -lt 60 ] || [ $pcpu -gt 140 ]; then
+ atf_fail "expected pcpu: ~100, actual: $pcpu | expected cputime: ~3, actual: $cputime"
+ fi
+
+}
+racct_cpu_cleanup()
+{
+ racct_cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case racct_cpu
+}
diff --git a/tests/sys/racct/racct_jail_proc.sh b/tests/sys/racct/racct_jail_proc.sh
new file mode 100644
--- /dev/null
+++ b/tests/sys/racct/racct_jail_proc.sh
@@ -0,0 +1,55 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2021 The FreeBSD Foundation
+#
+# This software was developed by Cyril Zhang under sponsorship from
+# the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+. $(atf_get_srcdir)/utils.subr
+
+atf_test_case racct_max_proc cleanup
+racct_max_proc_head()
+{
+ atf_set "descr" "Tests maxproc for a jail racct."
+ atf_set "require.user" "root"
+}
+racct_max_proc_body()
+{
+ racct_mkjail myjail
+ rctl -a "jail:myjail:maxproc:deny=5"
+
+ atf_check -s exit:0 "$(atf_get_srcdir)/manyforks"
+}
+racct_max_proc_cleanup()
+{
+ rctl -r "jail:myjail:maxproc:deny=5"
+ racct_cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case racct_max_proc
+}
diff --git a/tests/sys/racct/racct_jail_shm.sh b/tests/sys/racct/racct_jail_shm.sh
new file mode 100644
--- /dev/null
+++ b/tests/sys/racct/racct_jail_shm.sh
@@ -0,0 +1,158 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2021 The FreeBSD Foundation
+#
+# This software was developed by Cyril Zhang under sponsorship from
+# the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+. $(atf_get_srcdir)/utils.subr
+
+atf_test_case racct_shm_count cleanup
+racct_shm_count_head()
+{
+ atf_set "descr" "Tests nshm for a jail racct."
+ atf_set "require.user" "root"
+}
+racct_shm_count_body()
+{
+ racct_mkjail myjail
+ rctl -a "jail:myjail:nshm:deny=20"
+
+ racct_make_objects myjail 20
+ racct_make_forbidden_object myjail 21
+ racct_remove_objects myjail 20
+ racct_make_objects myjail 20
+ racct_make_forbidden_object myjail 21
+}
+racct_shm_count_cleanup()
+{
+ rctl -r "jail:myjail:nshm:deny=20"
+ # This is due to a bug in posix shared memory objects, and
+ # is subject for removal.
+ # Removing the shared memory objects should not be necessary.
+ racct_remove_objects myjail 21
+ racct_cleanup
+}
+
+atf_test_case racct_shm_size cleanup
+racct_shm_size_head()
+{
+ atf_set "descr" "Tests shmsize for a jail racct."
+ atf_set "require.user" "root"
+}
+racct_shm_size_body()
+{
+ racct_mkjail myjail
+ rctl -a "jail:myjail:shmsize:deny=10000"
+
+ racct_make_objects myjail 20
+ racct_truncate_objects myjail 19 512
+ racct_truncate_forbidden_object myjail 20 512
+ racct_truncate_objects myjail 19 0
+ racct_truncate_objects myjail 19 512
+ racct_truncate_forbidden_object myjail 20 512
+}
+racct_shm_size_cleanup()
+{
+ rctl -r "jail:myjail:shmsize:deny=10000"
+ # This is due to a bug in posix shared memory objects, and
+ # is subject for removal.
+ # Removing the shared memory objects should not be necessary.
+ racct_remove_objects myjail 20
+ racct_cleanup
+}
+
+racct_mkjail()
+{
+ jailname=$1
+ jail -c name=${jailname} persist
+ echo $jailname >> created_jails.lst
+}
+racct_cleanup()
+{
+ if [ -f created_jails.lst ]
+ then
+ for jailname in `cat created_jails.lst`
+ do
+ jail -r ${jailname}
+ done
+ rm created_jails.lst
+ fi
+}
+
+racct_make_objects()
+{
+ local jailname max
+ jailname=$1
+ max=$2
+ for i in $(seq 1 $max); do
+ atf_check -s exit:0 jexec "$jailname" posixshmcontrol create "/$jailname$i"
+ done
+}
+
+racct_make_forbidden_object()
+{
+ local jailname i
+ jailname=$1
+ i=$2
+ atf_check -s exit:1 -e ignore jexec "$jailname" posixshmcontrol create "/$jailname$i"
+}
+
+racct_truncate_objects()
+{
+ local jailname max size
+ jailname=$1
+ max=$2
+ size=$3
+ for i in $(seq 1 $max); do
+ atf_check -s exit:0 jexec "$jailname" posixshmcontrol truncate -s "$size" "/$jailname$i"
+ done
+}
+
+racct_truncate_forbidden_object()
+{
+ local jailname i size
+ jailname=$1
+ i=$2
+ size=$3
+ atf_check -s exit:1 -e ignore jexec "$jailname" posixshmcontrol truncate -s "$size" "/$jailname$i"
+}
+
+racct_remove_objects()
+{
+ local jailname max
+ jailname=$1
+ max=$2
+ for i in $(seq 1 $max); do
+ jexec $jailname posixshmcontrol rm "/$jailname$i"
+ done
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case racct_shm_count
+ atf_add_test_case racct_shm_size
+}
diff --git a/tests/sys/racct/utils.subr b/tests/sys/racct/utils.subr
new file mode 100644
--- /dev/null
+++ b/tests/sys/racct/utils.subr
@@ -0,0 +1,47 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2021 The FreeBSD Foundation
+#
+# This software was developed by Cyril Zhang under sponsorship from
+# the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+racct_mkjail()
+{
+ jailname=$1
+ jail -c name=${jailname} persist
+ echo $jailname >> created_jails.lst
+}
+racct_cleanup()
+{
+ if [ -f created_jails.lst ]
+ then
+ for jailname in `cat created_jails.lst`
+ do
+ jail -r ${jailname}
+ done
+ rm created_jails.lst
+ fi
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Aug 27, 11:41 AM (26 m, 55 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37322364
Default Alt Text
D30949.id92829.diff (15 KB)
Attached To
Mode
D30949: racct: Add some tests
Attached
Detach File
Event Timeline
Log In to Comment