Module Name:    src
Committed By:   pgoyette
Date:           Sun Oct 24 13:11:41 UTC 2010

Modified Files:
        src/tests/dev/sysmon: t_swwdog.c

Log Message:
Add a third test-case to verify that disarming of the watchdog works.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/dev/sysmon/t_swwdog.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/dev/sysmon/t_swwdog.c
diff -u src/tests/dev/sysmon/t_swwdog.c:1.2 src/tests/dev/sysmon/t_swwdog.c:1.3
--- src/tests/dev/sysmon/t_swwdog.c:1.2	Mon Aug 30 08:30:17 2010
+++ src/tests/dev/sysmon/t_swwdog.c	Sun Oct 24 13:11:41 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_swwdog.c,v 1.2 2010/08/30 08:30:17 pooka Exp $	*/
+/*	$NetBSD: t_swwdog.c,v 1.3 2010/10/24 13:11:41 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -60,7 +60,7 @@
  * something sensible back to atf.
  */
 static int
-testbody(void)
+testbody(int max)
 {
 	char wname[WDOG_NAMESIZE];
 	struct wdog_conf wc;
@@ -80,7 +80,7 @@
 	default:
 		p2 = wait(&status);
 		ATF_REQUIRE_EQ(p1, p2);
-		ATF_REQUIRE_EQ(tcount, 1);
+		ATF_REQUIRE_EQ(tcount, max);
 		return status;
 	}
 
@@ -106,11 +106,18 @@
 			atf_tc_fail_errno("failed to set tickle");
 
 		usleep(500000);
-		rump_sys_ioctl(fd, WDOGIOC_TICKLE);
+		if (max == 1)
+			rump_sys_ioctl(fd, WDOGIOC_TICKLE);
+		else {
+			wm.wm_mode = WDOG_MODE_DISARMED;
+			rump_sys_ioctl(fd, WDOGIOC_SMODE, &wm);
+		}
 		kill(getppid(), SIGUSR1);
 
 		sleep(2);
 		printf("staying alive\n");
+		kill(getppid(), SIGUSR1);
+		_exit(2);
 	}
 	/* fail */
 	_exit(1);
@@ -130,7 +137,7 @@
 
 	/* XXX: should use sysctl */
 	rumpns_swwdog_reboot = true;
-	status = testbody();
+	status = testbody(1);
 
 	ATF_REQUIRE(WIFEXITED(status));
 	ATF_REQUIRE_EQ(WEXITSTATUS(status), 0);
@@ -150,17 +157,35 @@
 
 	/* XXX: should use sysctl */
 	rumpns_swwdog_reboot = false;
-	status = testbody();
+	status = testbody(1);
 
 	ATF_REQUIRE(WIFSIGNALED(status));
 	ATF_REQUIRE_EQ(WTERMSIG(status), SIGABRT);
 }
 
+ATF_TC(disarm);
+ATF_TC_HEAD(disarm, tc)
+{
+
+	atf_tc_set_md_var(tc, "descr", "check swwdog disarm capability");
+}
+
+ATF_TC_BODY(disarm, tc)
+{
+	int status;
+
+	status = testbody(2);
+
+	ATF_REQUIRE(WIFEXITED(status));
+	ATF_REQUIRE_EQ(WEXITSTATUS(status), 2);
+}
+
 ATF_TP_ADD_TCS(tp)
 {
 
 	ATF_TP_ADD_TC(tp, panic);
 	ATF_TP_ADD_TC(tp, reboot);
+	ATF_TP_ADD_TC(tp, disarm);
 
 	return atf_no_error();
 }

Reply via email to