test/logging_tests.c

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

mercurial