TESTUTIL: Separate TAP output and other output by BIO filter
[openssl.git] / test / testutil / basic_output.c
index 93afcd0fd1d37e0e74091d889dbdc58f1ea6d4a2..bbed57c55adf06bee770fc33b3c0617f965f81c8 100644 (file)
 #include <openssl/crypto.h>
 #include <openssl/bio.h>
 
+/* These are available for any test program */
 BIO *bio_out = NULL;
 BIO *bio_err = NULL;
 
+/* These are available for TAP output only (internally) */
+static BIO *tap_out = NULL;
+static BIO *tap_err = NULL;
+
 void test_open_streams(void)
 {
-    bio_out = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
-    bio_err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
+    tap_out = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
+    tap_err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
 #ifdef __VMS
-    bio_out = BIO_push(BIO_new(BIO_f_linebuffer()), bio_out);
-    bio_err = BIO_push(BIO_new(BIO_f_linebuffer()), bio_err);
+    tap_out = BIO_push(BIO_new(BIO_f_linebuffer()), tap_out);
+    tap_err = BIO_push(BIO_new(BIO_f_linebuffer()), tap_err);
 #endif
-    bio_err = BIO_push(BIO_new(BIO_f_tap()), bio_err);
+    tap_out = BIO_push(BIO_new(BIO_f_prefix()), tap_out);
+    tap_err = BIO_push(BIO_new(BIO_f_prefix()), tap_err);
+
+    bio_out = BIO_push(BIO_new(BIO_f_prefix()), tap_out);
+    bio_err = BIO_push(BIO_new(BIO_f_prefix()), tap_err);
+    BIO_set_prefix(bio_out, "# ");
+    BIO_set_prefix(bio_err, "# ");
 
     OPENSSL_assert(bio_out != NULL);
     OPENSSL_assert(bio_err != NULL);
 }
 
+void test_adjust_streams_tap_level(int level)
+{
+    BIO_set_indent(tap_out, level);
+    BIO_set_indent(tap_err, level);
+}
+
 void test_close_streams(void)
 {
-    BIO_free_all(bio_out);
-    BIO_free_all(bio_err);
+    /*
+     * The rest of the chain is freed by the BIO_free_all() calls below, so
+     * we only need to free the last one in the bio_out and bio_err chains.
+     */
+    BIO_free(bio_out);
+    BIO_free(bio_err);
+
+    BIO_free_all(tap_out);
+    BIO_free_all(tap_err);
 }
 
 int test_vprintf_stdout(const char *fmt, va_list ap)
@@ -56,3 +80,23 @@ int test_flush_stderr(void)
 {
     return BIO_flush(bio_err);
 }
+
+int test_vprintf_tapout(const char *fmt, va_list ap)
+{
+    return BIO_vprintf(tap_out, fmt, ap);
+}
+
+int test_vprintf_taperr(const char *fmt, va_list ap)
+{
+    return BIO_vprintf(tap_err, fmt, ap);
+}
+
+int test_flush_tapout(void)
+{
+    return BIO_flush(tap_out);
+}
+
+int test_flush_taperr(void)
+{
+    return BIO_flush(tap_err);
+}