Skip to content

Commit

Permalink
Introduce ModSecurityTestContext to encapsulate setup of objects requ…
Browse files Browse the repository at this point in the history
…ired to execute transactions

- Simplifies memory management on error conditions
- Context will be used in unit tests too, in order to provide
  Transaction related instances.
  • Loading branch information
eduar-hte committed Aug 28, 2024
1 parent 555fd6a commit 10be071
Show file tree
Hide file tree
Showing 7 changed files with 402 additions and 346 deletions.
4 changes: 2 additions & 2 deletions build/win32/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,13 @@ endfunction()

# unit tests
file(GLOB unitTestSources ${BASE_DIR}/test/unit/*.cc)
add_executable(unit_tests ${unitTestSources})
add_executable(unit_tests ${unitTestSources} ${BASE_DIR}/test/common/custom_debug_log.cc)
setTestTargetProperties(unit_tests)
target_compile_options(unit_tests PRIVATE /wd4805)

# regression tests
file(GLOB regressionTestsSources ${BASE_DIR}/test/regression/*.cc)
add_executable(regression_tests ${regressionTestsSources})
add_executable(regression_tests ${regressionTestsSources} ${BASE_DIR}/test/common/custom_debug_log.cc)
setTestTargetProperties(regression_tests)

macro(add_regression_test_capability compile_definition flag)
Expand Down
5 changes: 3 additions & 2 deletions test/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ EXTRA_DIST = \
noinst_PROGRAMS += unit_tests
unit_tests_SOURCES = \
unit/unit.cc \
unit/unit_test.cc
unit/unit_test.cc \
common/custom_debug_log.cc


noinst_HEADERS = \
Expand Down Expand Up @@ -94,7 +95,7 @@ noinst_PROGRAMS += regression_tests
regression_tests_SOURCES = \
regression/regression.cc \
regression/regression_test.cc \
regression/custom_debug_log.cc
common/custom_debug_log.cc

regression_tests_LDADD = \
$(CURL_LDADD) \
Expand Down
59 changes: 59 additions & 0 deletions test/common/custom_debug_log.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* ModSecurity, http://www.modsecurity.org/
* Copyright (c) 2015 - 2021 Trustwave Holdings, Inc. (http://www.trustwave.com/)
*
* 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
*
* If any of the files related to licensing are missing or if you have any
* other questions related to licensing please contact Trustwave Holdings, Inc.
* directly using the email address security@modsecurity.org.
*
*/

#include "custom_debug_log.h"

#include <iostream>
#include <string>

#include "modsecurity/debug_log.h"
#include "src/utils/regex.h"

namespace modsecurity_test
{

CustomDebugLog::~CustomDebugLog() {}

void CustomDebugLog::write(int level, const std::string &message)
{
m_log << "[" << level << "] " << message << std::endl;
}

void CustomDebugLog::write(int level, const std::string &id,
const std::string &uri, const std::string &msg)
{
std::string msgf = "[" + std::to_string(level) + "] " + msg;
msgf = "[" + id + "] [" + uri + "] " + msgf;
m_log << msgf << std::endl;
}

bool const CustomDebugLog::contains(const std::string &pattern) const
{
modsecurity::Utils::Regex re(pattern);
std::string s = m_log.str();
return modsecurity::Utils::regex_search(s, re);
}

std::string const CustomDebugLog::log_messages() const
{
return m_log.str();
}

int CustomDebugLog::getDebugLogLevel()
{
return 9;
}

} // namespace modsecurity_test
File renamed without changes.
47 changes: 47 additions & 0 deletions test/common/modsecurity_test_context.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#ifndef TEST_COMMON_MODSECURITY_TEST_CONTEXT_H_
#define TEST_COMMON_MODSECURITY_TEST_CONTEXT_H_

#include "modsecurity/modsecurity.h"
#include "modsecurity/rules_set.h"
#include "modsecurity/transaction.h"
#include "custom_debug_log.h"

#include <sstream>

namespace modsecurity_test
{

class ModSecurityTestContext
{
public:
explicit ModSecurityTestContext(const std::string &connector)
: m_modsec_rules(new CustomDebugLog)
{
m_modsec.setConnectorInformation(connector);
m_modsec.setServerLogCb(logCb);
}
~ModSecurityTestContext() = default;

modsecurity::Transaction create_transaction()
{
return modsecurity::Transaction(&m_modsec,
&m_modsec_rules,
&m_server_log);
}

modsecurity::ModSecurity m_modsec;
modsecurity::RulesSet m_modsec_rules;
std::stringstream m_server_log;

private:
static void logCb(void *data, const void *msgv)
{
const char *msg = reinterpret_cast<const char *>(msgv);
std::stringstream *ss = (std::stringstream *)data;
*ss << msg << std::endl;
}
};

} // namespace modsecurity_test

#endif // TEST_COMMON_MODSECURITY_TEST_H_
55 changes: 0 additions & 55 deletions test/regression/custom_debug_log.cc

This file was deleted.

Loading

0 comments on commit 10be071

Please sign in to comment.