Mon, 14 Jul 2014 13:20:03 +0200
fixed stream copy bug + fixed doc issues in mempool
1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2014 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 */
29 #include "logging_tests.h"
30 #include <time.h>
32 UCX_TEST(test_ucx_logger_new) {
34 FILE *stream = tmpfile();
35 UcxLogger *logger = ucx_logger_new(stream,
36 UCX_LOGGER_INFO, UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL);
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\"");
49 UCX_TEST_ASSERT(logger->levels->count == 4,
50 "incorrect number of registered log levels");
52 int level = UCX_LOGGER_ERROR;
53 UCX_TEST_ASSERT(strcmp(ucx_map_int_get(logger->levels, level),
54 "[ERROR]") == 0, "invalid error level");
55 level = UCX_LOGGER_WARN;
56 UCX_TEST_ASSERT(strcmp(ucx_map_int_get(logger->levels, level),
57 "[WARNING]") == 0, "invalid warning level");
58 level = UCX_LOGGER_INFO;
59 UCX_TEST_ASSERT(strcmp(ucx_map_int_get(logger->levels, level),
60 "[INFO]") == 0, "invalid info level");
61 level = UCX_LOGGER_TRACE;
62 UCX_TEST_ASSERT(strcmp(ucx_map_int_get(logger->levels, level),
63 "[TRACE]") == 0, "invalid trace level");
65 UCX_TEST_END
67 fclose(stream);
68 ucx_logger_free(logger);
69 }
71 UCX_TEST(test_ucx_logger_log) {
72 char buffer[100];
74 FILE *stream = tmpfile();
76 UcxLogger *logger = ucx_logger_new(stream,
77 UCX_LOGGER_INFO, UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL);
78 logger->dateformat = "%F:";
80 UCX_TEST_BEGIN
81 const uint line1 = __LINE__; ucx_logger_info(logger, "allright");
83 ucx_logger_trace(logger, "dont log this!");
85 logger->mask |= UCX_LOGGER_TIMESTAMP;
86 time_t now = time(NULL);
87 char timestr[13];
88 strftime(timestr, 12, "%F:", localtime(&now));
89 const uint line2 = __LINE__; ucx_logger_error(logger, "error %d!", 42);
91 fseek(stream, 0, SEEK_SET);
92 size_t r = fread(buffer, 1, 100, stream);
94 const size_t expected_length = 87;
95 char expected[expected_length+1];
96 snprintf(expected, expected_length+1,
97 "[INFO] logging_tests.c:%u - allright\n"
98 "[ERROR] %slogging_tests.c:%u - error 42!\n", line1, timestr, line2);
100 UCX_TEST_ASSERT(r == expected_length, "incorrect log length");
101 UCX_TEST_ASSERT(strncmp(buffer, expected, expected_length) == 0,
102 "incorrect logs");
104 UCX_TEST_END
106 ucx_logger_free(logger);
107 fclose(stream);
108 }