Page MenuHomeFreeBSD

D50559.1783873600.diff
No OneTemporary

Size
4 KB
Referenced Files
None
Subscribers
None

D50559.1783873600.diff

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

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)

Event Timeline