Module Name:    src
Committed By:   ozaki-r
Date:           Thu Dec 28 07:10:26 UTC 2017

Modified Files:
        src/tests/rump/kernspace: kernspace.h workqueue.c
        src/tests/rump/rumpkern: t_workqueue.c

Log Message:
Add a test case for workqueue_wait


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/rump/kernspace/kernspace.h
cvs rdiff -u -r1.4 -r1.5 src/tests/rump/kernspace/workqueue.c
cvs rdiff -u -r1.1 -r1.2 src/tests/rump/rumpkern/t_workqueue.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/rump/kernspace/kernspace.h
diff -u src/tests/rump/kernspace/kernspace.h:1.5 src/tests/rump/kernspace/kernspace.h:1.6
--- src/tests/rump/kernspace/kernspace.h:1.5	Fri Sep 29 13:19:57 2017
+++ src/tests/rump/kernspace/kernspace.h	Thu Dec 28 07:10:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: kernspace.h,v 1.5 2017/09/29 13:19:57 maya Exp $	*/
+/*	$NetBSD: kernspace.h,v 1.6 2017/12/28 07:10:25 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -41,6 +41,7 @@ void rumptest_tsleep(void);
 void rumptest_alloc(size_t);
 void rumptest_lockme(enum locktest);
 void rumptest_workqueue1(void);
+void rumptest_workqueue_wait(void);
 
 void rumptest_sendsig(char *);
 void rumptest_localsig(int);

Index: src/tests/rump/kernspace/workqueue.c
diff -u src/tests/rump/kernspace/workqueue.c:1.4 src/tests/rump/kernspace/workqueue.c:1.5
--- src/tests/rump/kernspace/workqueue.c:1.4	Thu Dec 28 07:09:31 2017
+++ src/tests/rump/kernspace/workqueue.c	Thu Dec 28 07:10:25 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: workqueue.c,v 1.4 2017/12/28 07:09:31 ozaki-r Exp $	*/
+/*	$NetBSD: workqueue.c,v 1.5 2017/12/28 07:10:25 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>
 #if !defined(lint)
-__RCSID("$NetBSD: workqueue.c,v 1.4 2017/12/28 07:09:31 ozaki-r Exp $");
+__RCSID("$NetBSD: workqueue.c,v 1.5 2017/12/28 07:10:25 ozaki-r Exp $");
 #endif /* !lint */
 
 #include <sys/param.h>
@@ -112,3 +112,28 @@ rumptest_workqueue1()
 	destroy_sc(sc);
 #undef ITERATIONS
 }
+
+void
+rumptest_workqueue_wait(void)
+{
+	struct test_softc *sc;
+	struct work dummy;
+
+	sc = create_sc();
+
+#define ITERATIONS 12435
+	for (size_t i = 0; i < ITERATIONS; ++i) {
+		KASSERT(sc->counter == i);
+		workqueue_enqueue(sc->wq, &sc->wk, NULL);
+		workqueue_wait(sc->wq, &sc->wk);
+		KASSERT(sc->counter == (i + 1));
+	}
+
+	KASSERT(sc->counter == ITERATIONS);
+
+	/* Wait for a work that is not enqueued. Just return immediately. */
+	workqueue_wait(sc->wq, &dummy);
+
+	destroy_sc(sc);
+#undef ITERATIONS
+}

Index: src/tests/rump/rumpkern/t_workqueue.c
diff -u src/tests/rump/rumpkern/t_workqueue.c:1.1 src/tests/rump/rumpkern/t_workqueue.c:1.2
--- src/tests/rump/rumpkern/t_workqueue.c:1.1	Fri Sep 29 12:42:37 2017
+++ src/tests/rump/rumpkern/t_workqueue.c	Thu Dec 28 07:10:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_workqueue.c,v 1.1 2017/09/29 12:42:37 maya Exp $	*/
+/*	$NetBSD: t_workqueue.c,v 1.2 2017/12/28 07:10:26 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -55,9 +55,27 @@ ATF_TC_BODY(workqueue1, tc)
 	rump_unschedule();
 }
 
+ATF_TC(workqueue_wait);
+ATF_TC_HEAD(workqueue_wait, tc)
+{
+
+	atf_tc_set_md_var(tc, "descr", "Checks workqueue_wait");
+}
+
+ATF_TC_BODY(workqueue_wait, tc)
+{
+
+	rump_init();
+
+	rump_schedule();
+	rumptest_workqueue_wait(); /* panics if fails */
+	rump_unschedule();
+}
+
 ATF_TP_ADD_TCS(tp)
 {
 	ATF_TP_ADD_TC(tp, workqueue1);
+	ATF_TP_ADD_TC(tp, workqueue_wait);
 
 	return atf_no_error();
 }

Reply via email to