summaryrefslogtreecommitdiffstats
path: root/liblog_use_output.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--liblog_use_output.c75
1 files changed, 74 insertions, 1 deletions
diff --git a/liblog_use_output.c b/liblog_use_output.c
index 3471722..b2c3ec4 100644
--- a/liblog_use_output.c
+++ b/liblog_use_output.c
@@ -38,6 +38,7 @@ liblog_use_output(struct liblog_context *ctx, const struct liblog_output *output
errno = ENOMEM;
return NULL;
}
+ ctx->outputs = new;
memcpy(&ctx->outputs[ctx->noutputs], output, sizeof(*output));
@@ -49,6 +50,78 @@ liblog_use_output(struct liblog_context *ctx, const struct liblog_output *output
#else
-int main(void) {return 0;} /* TODO test */
+int
+main(void)
+{
+ struct liblog_context ctx;
+ struct liblog_output output;
+ struct liblog_output *new_output;
+
+ ASSERT_ZERO(liblog_init_context(&ctx));
+
+ errno = 0;
+ ASSERT_IS_NULL(liblog_use_output(NULL, NULL));
+ ASSERT_EQ_INT(errno, EINVAL);
+
+ errno = 0;
+ ASSERT_IS_NULL(liblog_use_output(&ctx, NULL));
+ ASSERT_EQ_INT(errno, EINVAL);
+
+ errno = 0;
+ ASSERT_IS_NULL(liblog_use_output(NULL, &output));
+ ASSERT_EQ_INT(errno, EINVAL);
+
+ memset(&ctx, 0, sizeof(ctx));
+
+ errno = 0;
+ output.lowest_verbosity_unlimited = 1;
+ output.highest_verbosity_unlimited = 1;
+ output.lowest_verbosity = (enum liblog_level)400;
+ output.highest_verbosity = (enum liblog_level)100;
+ ASSERT_IS_NULL(liblog_use_output(&ctx, &output));
+ ASSERT_EQ_INT(errno, EINVAL);
+ memset(&output, 0, sizeof(output));
+
+ errno = 0;
+ output.sink_type = (enum liblog_sink)99;
+ ASSERT_IS_NULL(liblog_use_output(&ctx, &output));
+ ASSERT_EQ_INT(errno, EINVAL);
+
+ errno = 0;
+ output.sink_type = (enum liblog_sink)-1;
+ ASSERT_IS_NULL(liblog_use_output(&ctx, &output));
+ ASSERT_EQ_INT(errno, EINVAL);
+
+ errno = 0;
+ output.sink_type = LIBLOG_STREAM;
+ output.sink.stream.stream = NULL;
+ ASSERT_IS_NULL(liblog_use_output(&ctx, &output));
+ ASSERT_EQ_INT(errno, EINVAL);
+
+ errno = 0;
+ output.sink_type = LIBLOG_FILE;
+ ctx.noutputs = SIZE_MAX / sizeof(*ctx.outputs);
+ ASSERT_IS_NULL(liblog_use_output(&ctx, &output));
+ ASSERT_EQ_INT(errno, ENOMEM);
+ ctx.noutputs = 0;
+
+ output.sink_type = LIBLOG_FILE;
+ output.sink.file.fd = 0;
+ output.sink.file.owns_fd = 0;
+ output.prefixfmt = NULL;
+ new_output = liblog_use_output(&ctx, &output);
+ ASSERT_NOT_NULL(new_output);
+ ASSERT_IS_NULL(output.prefixfmt);
+ ASSERT_NOT_NULL(new_output->prefixfmt);
+ ASSERT_EQ_STR(new_output->prefixfmt, DEFAULT_PREFIXFMT);
+ ASSERT_EQ_INT(new_output->sink_type, output.sink_type);
+ ASSERT_EQ_INT(new_output->sink.file.fd, output.sink.file.fd);
+ ASSERT_EQ_INT(new_output->sink.file.owns_fd, output.sink.file.owns_fd);
+ ASSERT_EQ_UINT(ctx.noutputs, 1);
+ ASSERT_NOT_NULL(ctx.outputs);
+
+ liblog_destroy_context(&ctx);
+ return 0;
+}
#endif