test/logging_tests.c

Sat, 12 May 2018 13:57:12 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 12 May 2018 13:57:12 +0200
changeset 296
e325716a442c
parent 259
2f5dea574a75
permissions
-rw-r--r--

fixes logger test case

universe@54 1 /*
universe@103 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
universe@54 3 *
universe@259 4 * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
universe@103 5 *
universe@103 6 * Redistribution and use in source and binary forms, with or without
universe@103 7 * modification, are permitted provided that the following conditions are met:
universe@103 8 *
universe@103 9 * 1. Redistributions of source code must retain the above copyright
universe@103 10 * notice, this list of conditions and the following disclaimer.
universe@103 11 *
universe@103 12 * 2. Redistributions in binary form must reproduce the above copyright
universe@103 13 * notice, this list of conditions and the following disclaimer in the
universe@103 14 * documentation and/or other materials provided with the distribution.
universe@103 15 *
universe@103 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
universe@103 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
universe@103 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
universe@103 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
universe@103 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
universe@103 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
universe@103 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
universe@103 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
universe@103 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
universe@103 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
universe@103 26 * POSSIBILITY OF SUCH DAMAGE.
universe@54 27 */
universe@54 28
universe@54 29 #include "logging_tests.h"
universe@170 30 #include <time.h>
universe@170 31
universe@170 32 UCX_TEST(test_ucx_logger_new) {
universe@170 33
universe@170 34 FILE *stream = tmpfile();
universe@170 35 UcxLogger *logger = ucx_logger_new(stream,
universe@170 36 UCX_LOGGER_INFO, UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL);
universe@170 37
universe@170 38 UCX_TEST_BEGIN
universe@170 39 UCX_TEST_ASSERT(logger->stream == stream, "stream not set");
universe@170 40 UCX_TEST_ASSERT(logger->mask == (UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL),
universe@170 41 "mask not set");
universe@170 42 UCX_TEST_ASSERT(logger->level == UCX_LOGGER_INFO,
universe@170 43 "level not set");
universe@170 44 UCX_TEST_ASSERT(logger->writer == (write_func)fwrite,
universe@170 45 "writer not set to fwrite");
universe@170 46 UCX_TEST_ASSERT(strcmp(logger->dateformat, "%F %T %z ") == 0,
universe@170 47 "date format not set to \"%F %T %z\"");
universe@170 48
universe@296 49 UCX_TEST_ASSERT(logger->levels->count == 5,
universe@170 50 "incorrect number of registered log levels");
universe@170 51
universe@170 52 int level = UCX_LOGGER_ERROR;
universe@185 53 UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level),
universe@170 54 "[ERROR]") == 0, "invalid error level");
universe@170 55 level = UCX_LOGGER_WARN;
universe@185 56 UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level),
universe@170 57 "[WARNING]") == 0, "invalid warning level");
universe@296 58 level = UCX_LOGGER_DEBUG;
universe@296 59 UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level),
universe@296 60 "[DEBUG]") == 0, "invalid debug level");
universe@170 61 level = UCX_LOGGER_INFO;
universe@185 62 UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level),
universe@170 63 "[INFO]") == 0, "invalid info level");
universe@170 64 level = UCX_LOGGER_TRACE;
universe@185 65 UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level),
universe@170 66 "[TRACE]") == 0, "invalid trace level");
universe@170 67
universe@170 68 UCX_TEST_END
universe@170 69
universe@170 70 fclose(stream);
universe@170 71 ucx_logger_free(logger);
universe@170 72 }
universe@54 73
universe@134 74 UCX_TEST(test_ucx_logger_log) {
universe@54 75 char buffer[100];
universe@170 76
universe@55 77 FILE *stream = tmpfile();
universe@55 78
universe@80 79 UcxLogger *logger = ucx_logger_new(stream,
universe@80 80 UCX_LOGGER_INFO, UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL);
universe@187 81 logger->dateformat = (char*) "%Y-%m-%d:";
universe@54 82
universe@54 83 UCX_TEST_BEGIN
universe@187 84 const unsigned int line1 = __LINE__; ucx_logger_info(logger, "allright");
universe@170 85
universe@81 86 ucx_logger_trace(logger, "dont log this!");
universe@170 87
universe@170 88 logger->mask |= UCX_LOGGER_TIMESTAMP;
universe@170 89 time_t now = time(NULL);
universe@170 90 char timestr[13];
universe@186 91 strftime(timestr, 12, "%Y-%m-%d:", localtime(&now));
universe@187 92 const unsigned int line2 = __LINE__; ucx_logger_error(logger, "error %d!", 42);
universe@170 93
universe@54 94 fseek(stream, 0, SEEK_SET);
universe@95 95 size_t r = fread(buffer, 1, 100, stream);
universe@80 96
universe@170 97 const size_t expected_length = 87;
universe@185 98 char expected[88];
universe@170 99 snprintf(expected, expected_length+1,
universe@170 100 "[INFO] logging_tests.c:%u - allright\n"
universe@170 101 "[ERROR] %slogging_tests.c:%u - error 42!\n", line1, timestr, line2);
universe@170 102
universe@170 103 UCX_TEST_ASSERT(r == expected_length, "incorrect log length");
universe@170 104 UCX_TEST_ASSERT(strncmp(buffer, expected, expected_length) == 0,
universe@170 105 "incorrect logs");
universe@54 106
universe@54 107 UCX_TEST_END
universe@54 108
universe@80 109 ucx_logger_free(logger);
universe@54 110 fclose(stream);
universe@54 111 }

mercurial