mirror of
https://github.com/openappsec/openappsec.git
synced 2025-09-29 19:24:26 +03:00
June 27th update
This commit is contained in:
@@ -234,6 +234,55 @@ public:
|
||||
|
||||
static DebugConfiguration default_config;
|
||||
|
||||
class ChangeDebugConfiguration : public ServerRest
|
||||
{
|
||||
public:
|
||||
void
|
||||
doCall() override
|
||||
{
|
||||
string debug_config_file_name = Debug::getExecutableName();
|
||||
if (debug_config_file_name == "") {
|
||||
output = "Error. Cannot get debug config file path";
|
||||
return;
|
||||
}
|
||||
string debug_config_file_path = getConfigurationWithDefault<string>(
|
||||
getFilesystemPathConfig() + "/conf/" + debug_config_file_name + "-debug-conf.json",
|
||||
"Debug I/S",
|
||||
"Debug conf file path"
|
||||
);
|
||||
try {
|
||||
ifstream input_stream(debug_config_file_path);
|
||||
if (!input_stream) {
|
||||
output = "Error. Cannot open the debug conf file: " + debug_config_file_path;
|
||||
return;
|
||||
}
|
||||
cereal::JSONInputArchive ar(input_stream);
|
||||
Debug::prepareConfig();
|
||||
vector<DebugConfiguration> debug_config;
|
||||
try {
|
||||
ar(cereal::make_nvp("Debug", debug_config));
|
||||
} catch (cereal::Exception &e) {
|
||||
output = "Error. Failed loading debug conf file, error: " + string(e.what());
|
||||
Debug::abortConfig();
|
||||
return;
|
||||
}
|
||||
input_stream.close();
|
||||
setConfiguration(debug_config[0], "Debug");
|
||||
Debug::commitConfig();
|
||||
output = "New debug configuration set succesfully";
|
||||
} catch (ifstream::failure &f) {
|
||||
output =
|
||||
"Error. Cannot open the debug conf file " +
|
||||
debug_config_file_path +
|
||||
", error: " +
|
||||
string(f.what());
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
S2C_PARAM(string, output);
|
||||
};
|
||||
|
||||
// LCOV_EXCL_START - function is covered in unit-test, but not detected bt gcov
|
||||
Debug::Debug(
|
||||
const string &file_name,
|
||||
@@ -446,6 +495,7 @@ Debug::preload()
|
||||
{
|
||||
registerExpectedConfiguration<DebugConfiguration>("Debug");
|
||||
registerExpectedConfiguration<string>("Debug I/S", "Fog Debug URI");
|
||||
registerExpectedConfiguration<string>("Debug I/S", "Debug conf file path");
|
||||
registerExpectedConfiguration<bool>("Debug I/S", "Enable bulk of debugs");
|
||||
registerExpectedConfiguration<uint>("Debug I/S", "Debug bulk size");
|
||||
registerExpectedConfiguration<uint>("Debug I/S", "Debug bulk sending interval in msec");
|
||||
@@ -467,22 +517,18 @@ Debug::init()
|
||||
mainloop = Singleton::Consume<I_MainLoop>::by<Debug>();
|
||||
env = Singleton::Consume<I_Environment>::by<Debug>();
|
||||
|
||||
auto executable = env->get<string>("Executable Name");
|
||||
|
||||
if (executable.ok() && *executable != "") {
|
||||
string default_debug_output_file_path = *executable;
|
||||
auto file_path_end = default_debug_output_file_path.find_last_of("/");
|
||||
if (file_path_end != string::npos) {
|
||||
default_debug_file_stream_path = default_debug_output_file_path.substr(file_path_end + 1);
|
||||
}
|
||||
auto file_sufix_start = default_debug_file_stream_path.find_first_of(".");
|
||||
if (file_sufix_start != string::npos) {
|
||||
default_debug_file_stream_path = default_debug_file_stream_path.substr(0, file_sufix_start);
|
||||
}
|
||||
|
||||
default_debug_file_stream_path = getExecutableName();
|
||||
if (default_debug_file_stream_path != "") {
|
||||
string log_files_prefix = getLogFilesPathConfig();
|
||||
default_debug_file_stream_path = log_files_prefix + "/nano_agent/" + default_debug_file_stream_path + ".dbg";
|
||||
}
|
||||
|
||||
if (Singleton::exists<I_RestApi>()) {
|
||||
Singleton::Consume<I_RestApi>::by<Debug>()->addRestCall<ChangeDebugConfiguration>(
|
||||
RestAction::SET,
|
||||
"change-debug-config"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -706,6 +752,27 @@ Debug::findDebugFilePrefix(const string &file_name)
|
||||
return "";
|
||||
}
|
||||
|
||||
string
|
||||
Debug::getExecutableName()
|
||||
{
|
||||
auto executable = env->get<string>("Executable Name");
|
||||
if (!executable.ok() || *executable == "") {
|
||||
return "";
|
||||
}
|
||||
|
||||
string executable_name = *executable;
|
||||
auto file_path_end = executable_name.find_last_of("/");
|
||||
if (file_path_end != string::npos) {
|
||||
executable_name = executable_name.substr(file_path_end + 1);
|
||||
}
|
||||
auto file_sufix_start = executable_name.find_first_of(".");
|
||||
if (file_sufix_start != string::npos) {
|
||||
executable_name = executable_name.substr(0, file_sufix_start);
|
||||
}
|
||||
|
||||
return executable_name;
|
||||
}
|
||||
|
||||
void
|
||||
Debug::addActiveStream(const string &name)
|
||||
{
|
||||
|
@@ -21,6 +21,7 @@
|
||||
#include "report/report.h"
|
||||
#include "i_agent_details.h"
|
||||
#include "i_environment.h"
|
||||
#include "i_rest_api.h"
|
||||
#include "i_mainloop.h"
|
||||
#include "report/report_bulks.h"
|
||||
|
||||
|
13
core/debug_is/debug_is_ut/debug-ut-debug-conf.json
Normal file
13
core/debug_is/debug_is_ut/debug-ut-debug-conf.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"Debug": [
|
||||
{
|
||||
"Streams": [
|
||||
{
|
||||
"D_ALL": "Info",
|
||||
"D_FW": "Debug",
|
||||
"Output": "/var/log/nano_agent/cp-nano-orchestration.dbg"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@@ -14,6 +14,7 @@
|
||||
#include "mock/mock_messaging.h"
|
||||
#include "mock/mock_mainloop.h"
|
||||
#include "mock/mock_environment.h"
|
||||
#include "mock/mock_rest_api.h"
|
||||
#include "mock/mock_instance_awareness.h"
|
||||
|
||||
using namespace std;
|
||||
@@ -551,7 +552,6 @@ public:
|
||||
Debug::setNewDefaultStdout(&capture_debug);
|
||||
}
|
||||
|
||||
|
||||
~DebugConfigTest()
|
||||
{
|
||||
loadConfiguration("");
|
||||
@@ -583,10 +583,19 @@ public:
|
||||
Singleton::Consume<Config::I_Config>::from(conf)->loadConfiguration(configuration);
|
||||
}
|
||||
|
||||
bool
|
||||
setDebugConfig(const unique_ptr<RestInit> &p)
|
||||
{
|
||||
set_debug_config = p->getRest();
|
||||
return true;
|
||||
}
|
||||
|
||||
ConfigComponent conf;
|
||||
::Environment env;
|
||||
stringstream capture_debug;
|
||||
StrictMock<MockAgentDetails> mock_agent_details;
|
||||
NiceMock<MockRestApi> mock_rest;
|
||||
unique_ptr<ServerRest> set_debug_config;
|
||||
};
|
||||
|
||||
TEST_F(DebugConfigTest, basic_configuration)
|
||||
@@ -786,6 +795,54 @@ TEST_F(DebugConfigTest, fail_configuration)
|
||||
EXPECT_FALSE(loadConfiguration(debug_config));
|
||||
}
|
||||
|
||||
TEST_F(DebugConfigTest, testSetConfig)
|
||||
{
|
||||
NiceMock<MockMainLoop> mock_mainloop;
|
||||
StrictMock<MockTimeGet> mock_time;
|
||||
Debug::setUnitTestFlag(D_FW, Debug::DebugLevel::WARNING);
|
||||
EXPECT_TRUE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::ERROR));
|
||||
EXPECT_FALSE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::INFO));
|
||||
EXPECT_FALSE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::DEBUG));
|
||||
EXPECT_FALSE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::TRACE));
|
||||
|
||||
EXPECT_CALL(mock_rest, mockRestCall(RestAction::SET, "change-debug-config", _))
|
||||
.WillOnce(WithArg<2>(Invoke(this, &DebugConfigTest::setDebugConfig))
|
||||
);
|
||||
Maybe<I_MainLoop::RoutineID> error_id = genError("no id");
|
||||
EXPECT_CALL(mock_mainloop, getCurrentRoutineId()).WillRepeatedly(Return(error_id));
|
||||
EXPECT_CALL(mock_time, getWalltimeStr()).WillRepeatedly(Return(string("")));
|
||||
|
||||
EXPECT_CALL(mock_rest, mockRestCall(RestAction::ADD, "declare-boolean-variable", _)).WillOnce(Return(true));
|
||||
|
||||
env.preload();
|
||||
Singleton::Consume<I_Environment>::from(env)->registerValue<string>("Executable Name", "debug-ut");
|
||||
env.init();
|
||||
|
||||
Debug::init();
|
||||
|
||||
setConfiguration(
|
||||
cptestFnameInSrcDir(string("debug-ut-debug-conf.json")),
|
||||
string("Debug I/S"),
|
||||
string("Debug conf file path")
|
||||
);
|
||||
|
||||
stringstream ss("{}");
|
||||
Maybe<string> maybe_res = set_debug_config->performRestCall(ss);
|
||||
ASSERT_TRUE(maybe_res.ok());
|
||||
EXPECT_EQ(maybe_res.unpack(), "{\n \"output\": \"New debug configuration set succesfully\"\n}");
|
||||
|
||||
EXPECT_TRUE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::ERROR));
|
||||
EXPECT_TRUE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::INFO));
|
||||
EXPECT_TRUE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::DEBUG));
|
||||
EXPECT_FALSE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::TRACE));
|
||||
Debug::setUnitTestFlag(D_FW, Debug::DebugLevel::WARNING); // Reset debug level so it won't effect other tests
|
||||
EXPECT_TRUE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::ERROR));
|
||||
EXPECT_FALSE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::INFO));
|
||||
EXPECT_FALSE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::DEBUG));
|
||||
EXPECT_FALSE(Debug::isFlagAtleastLevel(D_FW, Debug::DebugLevel::TRACE));
|
||||
Debug::fini();
|
||||
}
|
||||
|
||||
ACTION(InvokeMainLoopCB)
|
||||
{
|
||||
arg1();
|
||||
|
Reference in New Issue
Block a user