| /* | |
| * Licensed to the Apache Software Foundation (ASF) under one or more | |
| * contributor license agreements. See the NOTICE file distributed with | |
| * this work for additional information regarding copyright ownership. | |
| * The ASF licenses this file to You under the Apache License, Version 2.0 | |
| * (the "License"); you may not use this file except in compliance with | |
| * the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| #include "logunit.h" | |
| #include <log4cxx/logger.h> | |
| #include <log4cxx/simplelayout.h> | |
| #include <log4cxx/fileappender.h> | |
| #include <log4cxx/helpers/absolutetimedateformat.h> | |
| #include "util/compare.h" | |
| #include "util/transformer.h" | |
| #include "util/linenumberfilter.h" | |
| #include "util/controlfilter.h" | |
| #include "util/absolutedateandtimefilter.h" | |
| #include "util/threadfilter.h" | |
| #include <log4cxx/file.h> | |
| #include <iostream> | |
| #include <log4cxx/helpers/pool.h> | |
| #include <apr_strings.h> | |
| #include "testchar.h" | |
| #include <log4cxx/spi/loggerrepository.h> | |
| #include <log4cxx/helpers/stringhelper.h> | |
| #include <apr_strings.h> | |
| using namespace log4cxx; | |
| using namespace log4cxx::helpers; | |
| LOGUNIT_CLASS(MinimumTestCase) | |
| { | |
| LOGUNIT_TEST_SUITE(MinimumTestCase); | |
| LOGUNIT_TEST(simple); | |
| LOGUNIT_TEST_SUITE_END(); | |
| public: | |
| void setUp() | |
| { | |
| root = Logger::getRootLogger(); | |
| root->removeAllAppenders(); | |
| } | |
| void tearDown() | |
| { | |
| auto rep = root->getLoggerRepository(); | |
| if (rep) | |
| { | |
| rep->resetConfiguration(); | |
| } | |
| } | |
| void simple() | |
| { | |
| LayoutPtr layout = LayoutPtr(new SimpleLayout()); | |
| AppenderPtr appender = FileAppenderPtr(new FileAppender(layout, LOG4CXX_STR("output/simple"), false)); | |
| root->addAppender(appender); | |
| common(); | |
| LOGUNIT_ASSERT(Compare::compare(LOG4CXX_FILE("output/simple"), LOG4CXX_FILE("witness/simple"))); | |
| } | |
| std::string createMessage(int i, Pool & pool) | |
| { | |
| std::string msg("Message "); | |
| msg.append(pool.itoa(i)); | |
| return msg; | |
| } | |
| void common() | |
| { | |
| int i = 0; | |
| // In the lines below, the logger names are chosen as an aid in | |
| // remembering their level values. In general, the logger names | |
| // have no bearing to level values. | |
| LoggerPtr ERRlogger = Logger::getLogger(LOG4CXX_TEST_STR("ERR")); | |
| ERRlogger->setLevel(Level::getError()); | |
| LoggerPtr INF = Logger::getLogger(LOG4CXX_TEST_STR("INF")); | |
| INF->setLevel(Level::getInfo()); | |
| LoggerPtr INF_ERR = Logger::getLogger(LOG4CXX_TEST_STR("INF.ERR")); | |
| INF_ERR->setLevel(Level::getError()); | |
| LoggerPtr DEB = Logger::getLogger(LOG4CXX_TEST_STR("DEB")); | |
| DEB->setLevel(Level::getDebug()); | |
| // Note: categories with undefined level | |
| LoggerPtr INF_UNDEF = Logger::getLogger(LOG4CXX_TEST_STR("INF.UNDEF")); | |
| LoggerPtr INF_ERR_UNDEF = Logger::getLogger(LOG4CXX_TEST_STR("INF.ERR.UNDEF")); | |
| LoggerPtr UNDEF = Logger::getLogger(LOG4CXX_TEST_STR("UNDEF")); | |
| std::string msg("Message "); | |
| Pool pool; | |
| // These should all log.---------------------------- | |
| LOG4CXX_FATAL(ERRlogger, createMessage(i, pool)); | |
| i++; //0 | |
| LOG4CXX_ERROR(ERRlogger, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_FATAL(INF, createMessage(i, pool)); | |
| i++; // 2 | |
| LOG4CXX_ERROR(INF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_WARN(INF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_INFO(INF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_FATAL(INF_UNDEF, createMessage(i, pool)); | |
| i++; //6 | |
| LOG4CXX_ERROR(INF_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_WARN(INF_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_INFO(INF_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_FATAL(INF_ERR, createMessage(i, pool)); | |
| i++; // 10 | |
| LOG4CXX_ERROR(INF_ERR, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_FATAL(INF_ERR_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_ERROR(INF_ERR_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_FATAL(DEB, createMessage(i, pool)); | |
| i++; //14 | |
| LOG4CXX_ERROR(DEB, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_WARN(DEB, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_INFO(DEB, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_DEBUG(DEB, createMessage(i, pool)); | |
| i++; | |
| // defaultLevel=DEBUG | |
| LOG4CXX_FATAL(UNDEF, createMessage(i, pool)); | |
| i++; // 19 | |
| LOG4CXX_ERROR(UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_WARN(UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_INFO(UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_DEBUG(UNDEF, createMessage(i, pool)); | |
| i++; | |
| // ------------------------------------------------- | |
| // The following should not log | |
| LOG4CXX_WARN(ERRlogger, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_INFO(ERRlogger, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_DEBUG(ERRlogger, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_DEBUG(INF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_DEBUG(INF_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_WARN(INF_ERR, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_INFO(INF_ERR, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_DEBUG(INF_ERR, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_WARN(INF_ERR_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_INFO(INF_ERR_UNDEF, createMessage(i, pool)); | |
| i++; | |
| LOG4CXX_DEBUG(INF_ERR_UNDEF, createMessage(i, pool)); | |
| i++; | |
| // ------------------------------------------------- | |
| LOG4CXX_INFO(INF, LOG4CXX_TEST_STR("Messages should bear numbers 0 through 23.")); | |
| } | |
| LoggerPtr root; | |
| LoggerPtr logger; | |
| private: | |
| static const File FILTERED; | |
| }; | |
| const File MinimumTestCase::FILTERED("output/minimumfiltered"); | |
| LOGUNIT_TEST_SUITE_REGISTRATION(MinimumTestCase); |