Commit 54f153414a00b2de606f1aeaf9d76f8792e062f6

Guillem Jover 2015-09-22T20:56:15

test: Refactor stream testing functions into a new module

diff --git a/test/Makefile.am b/test/Makefile.am
index 0f5ff4e..b92aeeb 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -25,6 +25,8 @@ if BUILD_LIBBSD_CTOR
 check_PROGRAMS += proctitle
 endif
 
+fgetln_SOURCES = test-stream.c test-stream.h fgetln.c
+
 proctitle_init_SOURCES = proctitle.c
 proctitle_init_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_USE_SETPROCTITLE_INIT=1
 
diff --git a/test/fgetln.c b/test/fgetln.c
index d3814d8..7d1e9dc 100644
--- a/test/fgetln.c
+++ b/test/fgetln.c
@@ -24,15 +24,15 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/wait.h>
 #include <assert.h>
-#include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <locale.h>
 #include <wchar.h>
 
+#include "test-stream.h"
+
 #define skip(msg) \
 	do { \
 		printf("skip: %s\n", (msg)); \
@@ -67,58 +67,6 @@ struct file {
 	int got_len;
 };
 
-static FILE *
-pipe_feed(const char *fmt, const void **buf, int buf_nmemb)
-{
-	FILE *fp;
-	int rc;
-	int pipefd[2];
-	pid_t pid;
-
-	rc = pipe(pipefd);
-	assert(rc >= 0);
-
-	pid = fork();
-	assert(pid >= 0);
-
-	if (pid == 0) {
-		int line;
-
-		/* Child writes data to pipe. */
-		rc = close(pipefd[0]);
-		assert(rc >= 0);
-
-		fp = fdopen(pipefd[1], "w");
-		assert(fp);
-
-		for (line = 0; line < buf_nmemb; line++) {
-			rc = fprintf(fp, fmt, buf[line]);
-			assert(rc >= 0);
-		}
-
-		rc = fclose(fp);
-		assert(rc >= 0);
-
-		_exit(0);
-	} else {
-		/* Parent gets a FILE and reads from it. */
-		rc = close(pipefd[1]);
-		assert(rc >= 0);
-
-		fp = fdopen(pipefd[0], "r");
-		assert(fp);
-
-		return fp;
-	}
-}
-
-static void
-pipe_close(FILE *fp)
-{
-	fclose(fp);
-	wait(NULL);
-}
-
 static void
 test_fgetln_single(void)
 {
diff --git a/test/test-stream.c b/test/test-stream.c
new file mode 100644
index 0000000..849f419
--- /dev/null
+++ b/test/test-stream.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright © 2013 Guillem Jover <guillem@hadrons.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/wait.h>
+#include <assert.h>
+#include <unistd.h>
+#include <stdio.h>
+
+#include "test-stream.h"
+
+FILE *
+pipe_feed(const char *fmt, const void **buf, int buf_nmemb)
+{
+	FILE *fp;
+	int rc;
+	int pipefd[2];
+	pid_t pid;
+
+	rc = pipe(pipefd);
+	assert(rc >= 0);
+
+	pid = fork();
+	assert(pid >= 0);
+
+	if (pid == 0) {
+		int line;
+
+		/* Child writes data to pipe. */
+		rc = close(pipefd[0]);
+		assert(rc >= 0);
+
+		fp = fdopen(pipefd[1], "w");
+		assert(fp);
+
+		for (line = 0; line < buf_nmemb; line++) {
+			rc = fprintf(fp, fmt, buf[line]);
+			assert(rc >= 0);
+		}
+
+		rc = fclose(fp);
+		assert(rc >= 0);
+
+		_exit(0);
+	} else {
+		/* Parent gets a FILE and reads from it. */
+		rc = close(pipefd[1]);
+		assert(rc >= 0);
+
+		fp = fdopen(pipefd[0], "r");
+		assert(fp);
+
+		return fp;
+	}
+}
+
+void
+pipe_close(FILE *fp)
+{
+	fclose(fp);
+	wait(NULL);
+}
diff --git a/test/test-stream.h b/test/test-stream.h
new file mode 100644
index 0000000..cee4e60
--- /dev/null
+++ b/test/test-stream.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2013 Guillem Jover <guillem@hadrons.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LIBBSD_TEST_STREAM
+#define LIBBSD_TEST_STREAM
+
+#include <stdio.h>
+
+FILE *
+pipe_feed(const char *fmt, const void **buf, int buf_nmemb);
+void
+pipe_close(FILE *fp);
+
+#endif