Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F147607428
D50559.1783873600.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D50559.1783873600.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
@@ -505,6 +505,8 @@
..
ping
..
+ rcorder
+ ..
route
..
savecore
diff --git a/sbin/rcorder/Makefile b/sbin/rcorder/Makefile
--- a/sbin/rcorder/Makefile
+++ b/sbin/rcorder/Makefile
@@ -1,5 +1,7 @@
# $NetBSD: Makefile,v 1.1 1999/11/23 05:28:20 mrg Exp $
+.include <src.opts.mk>
+
PACKAGE=rc
PROG= rcorder
SRCS= ealloc.c hash.c rcorder.c
@@ -11,4 +13,7 @@
#CFLAGS+= -DDEBUG
+HAS_TESTS=
+SUBDIR.${MK_TESTS}+= tests
+
.include <bsd.prog.mk>
diff --git a/sbin/rcorder/tests/Makefile b/sbin/rcorder/tests/Makefile
new file mode 100644
--- /dev/null
+++ b/sbin/rcorder/tests/Makefile
@@ -0,0 +1,5 @@
+PACKAGE= tests
+
+ATF_TESTS_SH+= rcorder_test
+
+.include <bsd.test.mk>
diff --git a/sbin/rcorder/tests/rcorder_test.sh b/sbin/rcorder/tests/rcorder_test.sh
new file mode 100755
--- /dev/null
+++ b/sbin/rcorder/tests/rcorder_test.sh
@@ -0,0 +1,169 @@
+#
+# Copyright (c) 2025 Kyle Evans <kevans@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+atf_test_case basic
+basic_body()
+{
+ mkdir -p rc
+ for f in a b c; do
+ echo "# PROVIDE: $f" > rc/"$f"
+ done
+
+ cat >expected <<EOF
+rc/c
+rc/b
+rc/a
+EOF
+
+ # rcorder will enumerate them in reverse order, all else being equal.
+ atf_check -o file:expected rcorder rc/*
+}
+
+atf_test_case basic_before
+basic_before_body()
+{
+ mkdir -p rc
+ for f in a b c; do
+ echo "# PROVIDE: $f" > rc/"$f"
+ done
+
+ echo "# BEFORE: c" >> rc/b
+ cat >expected <<EOF
+rc/b
+rc/a
+rc/c
+EOF
+
+ # rcorder will enumerate them in reverse order, all else being equal.
+ atf_check -o file:expected rcorder rc/*
+}
+
+atf_test_case basic_require
+basic_require_body()
+{
+ mkdir -p rc
+ for f in a b c; do
+ echo "# PROVIDE: $f" > rc/"$f"
+ done
+
+ echo "# REQUIRE: b" >> rc/c
+ cat >expected <<EOF
+rc/b
+rc/a
+rc/c
+EOF
+
+ # rcorder will enumerate them in reverse order, all else being equal,
+ # but the BEFORE constraint forces `c` to appear later.
+ atf_check -o file:expected rcorder rc/*
+
+ # The c -> b -> a chain forces a total ordering and we end up executing
+ # them as you'd expect.
+ echo "# REQUIRE: a" >> rc/b
+ cat >expected <<EOF
+rc/a
+rc/b
+rc/c
+EOF
+
+ atf_check -o file:expected rcorder rc/*
+}
+
+atf_test_case keywords
+keywords_body()
+{
+ mkdir -p rc
+ for f in a b c d e f; do
+ echo "# PROVIDE: $f" > rc/"$f"
+ done
+ for f in b e; do
+ echo "# KEYWORD: red" >> rc/"$f"
+ done
+ # Leave c untagged entirely
+ for f in a d; do
+ echo "# KEYWORD: black" >> rc/"$f"
+ done
+ echo "# KEYWORD: none" > rc/f
+
+ cat >expected-nofilter <<EOF
+rc/f
+rc/e
+rc/d
+rc/c
+rc/b
+rc/a
+EOF
+ cat >expected-red <<EOF
+rc/e
+rc/b
+EOF
+ cat >expected-black <<EOF
+rc/d
+rc/a
+EOF
+ cat >expected-redless <<EOF
+rc/f
+rc/d
+rc/c
+rc/a
+EOF
+ cat >expected-fullcolor <<EOF
+rc/e
+rc/d
+rc/b
+rc/a
+EOF
+ cat >expected-colorless <<EOF
+rc/f
+rc/c
+EOF
+
+ # Everything with keywords appears by default
+ atf_check -o file:expected-nofilter rcorder rc/*
+
+ # Simple filtering on a single keyword
+ atf_check -o file:expected-red rcorder -k red rc/*
+ atf_check -o file:expected-black rcorder -k black rc/*
+ atf_check -o file:expected-fullcolor rcorder -k black -k red rc/*
+ # Not sensitive to ordering
+ atf_check -o file:expected-fullcolor rcorder -k red -k black rc/*
+
+ atf_check -o file:expected-redless rcorder -s red rc/*
+ atf_check -o file:expected-colorless rcorder -s red -s black rc/*
+}
+
+atf_test_case missing_require
+missing_require_body()
+{
+ mkdir -p rc
+ for f in a b c; do
+ echo "# PROVIDE: $f" > rc/"$f"
+ echo "# REQUIRE: nonexistent" >> rc/"$f"
+ done
+
+ cat >expected <<EOF
+rc/c
+rc/b
+rc/a
+EOF
+
+ # rcorder(8) should produce errors, but it will still output some kind
+ # of an order that includes them rather than omitting them entirely.
+ atf_check -e save:errors -o file:expected -s exit:1 rcorder rc/*
+ for f in a b c; do
+ atf_check grep -Eqo "nonexistent.+rc/${f}.+has no providers" \
+ errors
+ done
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case basic
+ atf_add_test_case basic_before
+ atf_add_test_case basic_require
+ atf_add_test_case keywords
+ atf_add_test_case missing_require
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jul 12, 4:26 PM (2 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29097063
Default Alt Text
D50559.1783873600.diff (4 KB)
Attached To
Mode
D50559: rcorder: add some primitive tests
Attached
Detach File
Event Timeline
Log In to Comment