From 2bfce2fa2c20fcf9c3fdb7a694a9f9b57acdb428 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Tue, 12 Apr 2022 17:28:00 +0200
Subject: [PATCH] main/busybox-initscripts: add basic tests

start with ptpdev script which was relatively simple
---
 main/busybox-initscripts/APKBUILD    | 12 +++++--
 main/busybox-initscripts/ptpdev      |  2 +-
 main/busybox-initscripts/ptpdev.bats | 49 ++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+), 3 deletions(-)
 create mode 100644 main/busybox-initscripts/ptpdev.bats

diff --git a/main/busybox-initscripts/APKBUILD b/main/busybox-initscripts/APKBUILD
index d336e2919436..ca5aa8c09b35 100644
--- a/main/busybox-initscripts/APKBUILD
+++ b/main/busybox-initscripts/APKBUILD
@@ -11,15 +11,22 @@ depends="busybox openrc>=0.24.1-r6"
 makedepends=""
 install="$pkgname.post-install $pkgname.post-upgrade"
 subpackages=""
-options="!check"
+checkdepends="bats"
 replaces="alpine-baselayout openntpd"
 source="acpid.initd crond.initd dnsd.initd httpd.initd inetd.initd klogd.initd
 	mdev.initd ntpd.initd rdate.initd syslog.initd udhcpd.initd loadkmap.initd
 	watchdog.initd crond.confd klogd.confd ntpd.confd rdate.confd syslog.confd
 	watchdog.confd loadkmap.confd mdev.conf dvbdev usbdev persistent-storage
 	ptpdev
+	ptpdev.bats
 	"
 
+check() {
+	cd "$srcdir"
+	msg "running tests"
+	bats *.bats
+}
+
 package() {
 	local i
 	cd "$srcdir"
@@ -69,5 +76,6 @@ b5c299d5dcd854eb23717aab6938e2e1c9572d10ed667595b4a98f9cddca9f81c3f8f7ae508b62db
 ebd82f935da2ca89097234dd8a8f47e179a423652c151123a1f3343f3e1e7bfaba2b8800380e988d4e8f4294545d3a9ab6708ae2e77c5b108b5f091bbce8f94a  dvbdev
 b2dcf0ded9264334d79fbbb05dd12d649dc3119a060db5893f0e8aeca2141323961c3ba4c822a0ffb00dba848742d5cb374dc77e776b57cecde352a3e8e30f8a  usbdev
 0f54666072a8ee32965cc1b5205a6d35bc2ba6655f298c37ba9ccd72949fa7c41b1e540ec91f41b11f4b261ace614cdcc42dccf390bf0a22698d0ba499feae39  persistent-storage
-d1d6ba7fd19ef2ce2f9edaeda5b1dc57b34678a0057f8f331bbebff3185b8856f5c5276381b4ea7b42c980a74362e2dd3963ce5c344285e73d03e4b7ac2cda0d  ptpdev
+46b9379a5def08ce0afffae546693c19be158ca4fa4ce3c619ec81e0adbaa087ea5dd6df10abbfcd59bfdaf351d7170a7d24c2b403eceeb80f4f04f090630227  ptpdev
+5e1f6fabd7845f9cd6f90477f10a0b428b4414caed18a6dfe8e86e2ce3d373521d593aa6a9ee475b138a18b15c7a403a2bb0e1987b1dbdb6d465ebd7d5836a86  ptpdev.bats
 "
diff --git a/main/busybox-initscripts/ptpdev b/main/busybox-initscripts/ptpdev
index 63431b627d3b..56757fba2825 100755
--- a/main/busybox-initscripts/ptpdev
+++ b/main/busybox-initscripts/ptpdev
@@ -7,7 +7,7 @@ symlink_action() {
 	esac
 }
 
-clock_name=$(cat /sys/class/ptp/$MDEV/clock_name 2>/dev/null | sed -e 's/ /_/g')
+clock_name=$(cat ${SYSFS:-/sys}/class/ptp/$MDEV/clock_name 2>/dev/null | sed -e 's/ /_/g')
 case "$clock_name" in
 	KVM_virtual_PTP)	symlink_action $MDEV ptp_kvm ;;
 	ptp_vmw)		symlink_action $MDEV ptp_vmw ;;
diff --git a/main/busybox-initscripts/ptpdev.bats b/main/busybox-initscripts/ptpdev.bats
new file mode 100644
index 000000000000..7c43c482d0e5
--- /dev/null
+++ b/main/busybox-initscripts/ptpdev.bats
@@ -0,0 +1,49 @@
+setup() {
+	mdevscript=${BATS_TEST_FILENAME%.bats}
+	root="$BATS_FILE_TMPDIR"
+	mkdir -p "$root"/dev "$root"/sys "$root"/bin
+	PATH="$root/bin:$PATH"
+	export SYSFS="$root/sys"
+
+	mkdir -p "$root"/sys/class/ptp/ptp0 \
+		"$root"/sys/class/ptp/ptp1 \
+		"$root"/sys/class/ptp/ptp2
+
+	echo "KVM virtual PTP" > "$root"/sys/class/ptp/ptp0/clock_name
+	echo "ptp vmw" > "$root"/sys/class/ptp/ptp1/clock_name
+	echo hyperv > "$root"/sys/class/ptp/ptp2/clock_name
+
+	cd "$root"/dev
+}
+
+teardown() {
+	rm -r "$root"
+}
+
+@test "ptpdev kvm" {
+	MDEV=ptp0 ACTION=add sh $mdevscript
+	[ $(readlink ptp_kvm) = ptp0 ]
+
+	MDEV=ptp0 ACTION=remove sh $mdevscript
+	run readlink ptp_kvm
+	[ "$status" -ne 0 ]
+}
+
+@test "ptpdev vmw" {
+	MDEV=ptp1 ACTION=add sh $mdevscript
+	[ $(readlink ptp_vmw) = ptp1 ]
+
+	MDEV=ptp1 ACTION=remove sh $mdevscript
+	run readlink ptp_vmw
+	[ "$status" -ne 0 ]
+}
+
+@test "ptpdev hyperv" {
+	MDEV=ptp2 ACTION=add sh $mdevscript
+	run readlink ptp_hyperv
+	[ $(readlink ptp_hyperv) = ptp2 ]
+
+	MDEV=ptp2 ACTION=remove sh $mdevscript
+	run readlink ptp_hyperv
+	[ "$status" -ne 0 ]
+}
-- 
GitLab