diff options
| author | Mattias Andrée <m@maandree.se> | 2025-02-22 00:54:23 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2025-02-22 00:54:23 +0100 |
| commit | 1aa5c5fcc55f65bb48396a6fb45af060eb24b8e6 (patch) | |
| tree | 21d6c69c2f64226e98c28413a8e95534c36f939f /liblog_use_output.c | |
| parent | Fix doc style (diff) | |
| download | liblog-1aa5c5fcc55f65bb48396a6fb45af060eb24b8e6.tar.gz liblog-1aa5c5fcc55f65bb48396a6fb45af060eb24b8e6.tar.bz2 liblog-1aa5c5fcc55f65bb48396a6fb45af060eb24b8e6.tar.xz | |
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to '')
| -rw-r--r-- | liblog_use_output.c | 75 |
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 |
