mirror of
https://github.com/openappsec/attachment.git
synced 2025-11-19 10:34:28 +03:00
pulling from dev
This commit is contained in:
@@ -49,3 +49,9 @@ add_unit_test(
|
||||
"nano_attachment_metrics_ut.cc"
|
||||
"nano_attachment"
|
||||
)
|
||||
|
||||
add_unit_test(
|
||||
nano_compression_ut
|
||||
"nano_compression_ut.cc"
|
||||
"nano_attachment"
|
||||
)
|
||||
|
||||
@@ -25,7 +25,6 @@ public:
|
||||
initializer_mocker,
|
||||
nano_attachment_init_process(_)).WillOnce(Return(NanoCommunicationResult::NANO_OK)
|
||||
);
|
||||
setenv("CLOUDGUARD_UID", "Testing", 1);
|
||||
attachment = InitNanoAttachment(
|
||||
static_cast<uint8_t>(AttachmentType::NGINX_ATT_ID),
|
||||
2,
|
||||
@@ -67,6 +66,10 @@ public:
|
||||
free(reply_from_service_mock);
|
||||
FiniSessionData(attachment, session_data);
|
||||
FiniNanoAttachment(attachment);
|
||||
::testing::Mock::VerifyAndClearExpectations(&initializer_mocker);
|
||||
::testing::Mock::VerifyAndClearExpectations(&mock_shmem_ipc);
|
||||
::testing::Mock::VerifyAndClearExpectations(&mock_nano_socket);
|
||||
::testing::Mock::VerifyAndClearExpectations(&mock_nano_poll);
|
||||
}
|
||||
|
||||
nano_str_t
|
||||
@@ -156,6 +159,8 @@ public:
|
||||
HttpWebResponseData *web_response_data;
|
||||
uint32_t reply_session_id = -1;
|
||||
void *reply_session_id_void = &reply_session_id;
|
||||
struct pollfd fds;
|
||||
struct pollfd *mock_fds = &fds;
|
||||
const char **replay_data_mock;
|
||||
|
||||
NanoAttachment *attachment;
|
||||
@@ -421,7 +426,17 @@ TEST_F(NanoAttachmentIoTest, NanoBodySender)
|
||||
EXPECT_CALL(
|
||||
mock_nano_poll,
|
||||
poll(_, _, _)
|
||||
).WillRepeatedly(Return(1));
|
||||
).WillRepeatedly(
|
||||
DoAll(
|
||||
SaveArg<0>(&mock_fds),
|
||||
InvokeWithoutArgs(
|
||||
[&] () {
|
||||
mock_fds[0].revents = POLLIN;
|
||||
}
|
||||
),
|
||||
Return(1)
|
||||
)
|
||||
);
|
||||
|
||||
EXPECT_CALL(
|
||||
mock_nano_socket,
|
||||
|
||||
@@ -24,7 +24,6 @@ public:
|
||||
).WillOnce(
|
||||
Return(NanoCommunicationResult::NANO_OK)
|
||||
);
|
||||
setenv("CLOUDGUARD_UID", "Testing", 1);
|
||||
attachment = InitNanoAttachment(
|
||||
static_cast<uint8_t>(AttachmentType::NGINX_ATT_ID),
|
||||
2,
|
||||
@@ -32,6 +31,7 @@ public:
|
||||
STDOUT_FILENO
|
||||
);
|
||||
EXPECT_NE(attachment, nullptr);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -26,7 +26,6 @@ public:
|
||||
).WillOnce(
|
||||
Return(NanoCommunicationResult::NANO_OK)
|
||||
);
|
||||
setenv("CLOUDGUARD_UID", "Testing", 1);
|
||||
attachment = InitNanoAttachment(
|
||||
static_cast<uint8_t>(AttachmentType::NGINX_ATT_ID),
|
||||
2,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "mock_nano_initializer.h"
|
||||
#include "mock_nano_attachment_sender.h"
|
||||
#include "mock_nano_configuration.h"
|
||||
#include "mock_nano_compression.h"
|
||||
|
||||
extern "C" {
|
||||
#include "nano_attachment.h"
|
||||
@@ -26,7 +27,6 @@ public:
|
||||
).WillOnce(
|
||||
Return(NanoCommunicationResult::NANO_OK)
|
||||
);
|
||||
setenv("CLOUDGUARD_UID", "Testing", 1);
|
||||
attachment = InitNanoAttachment(
|
||||
static_cast<uint8_t>(AttachmentType::NGINX_ATT_ID),
|
||||
2,
|
||||
@@ -199,6 +199,7 @@ public:
|
||||
StrictMock<NanoInitializerMocker> initializer_mocker;
|
||||
StrictMock<NanoSocketMocker> socket_mocker;
|
||||
StrictMock<NanoConfigurationMocker> configuration_mocker;
|
||||
StrictMock<NanoCompressionMocker> compression_mocker;
|
||||
};
|
||||
|
||||
TEST_F(NanoAttachmentTest, InitNanoAttachment)
|
||||
@@ -450,3 +451,32 @@ TEST_F(NanoAttachmentTest, SendAccumulatedMetricData)
|
||||
EXPECT_CALL(sender_mocker, SendMetricData(attachment)).WillOnce(Return(NanoCommunicationResult::NANO_OK));
|
||||
SendAccumulatedMetricData(attachment);
|
||||
}
|
||||
|
||||
TEST_F(NanoAttachmentTest, CompressData)
|
||||
{
|
||||
EXPECT_CALL(
|
||||
compression_mocker,
|
||||
nano_compress_body(attachment, &http_body_data, session_data)
|
||||
).WillOnce(Return(nullptr)
|
||||
);
|
||||
compressBody(attachment, session_data, &http_body_data);
|
||||
}
|
||||
|
||||
TEST_F(NanoAttachmentTest, DecompressData)
|
||||
{
|
||||
EXPECT_CALL(
|
||||
compression_mocker,
|
||||
nano_decompress_body(attachment, &http_body_data, session_data)
|
||||
).WillOnce(Return(nullptr)
|
||||
);
|
||||
decompressBody(attachment, session_data, &http_body_data);
|
||||
}
|
||||
|
||||
TEST_F(NanoAttachmentTest, FreeCompressedData)
|
||||
{
|
||||
EXPECT_CALL(
|
||||
compression_mocker,
|
||||
nano_free_compressed_body(attachment, &http_body_data, session_data)
|
||||
);
|
||||
freeCompressedBody(attachment, session_data, &http_body_data);
|
||||
}
|
||||
|
||||
105
attachments/nano_attachment/nano_attachment_ut/nano_compression_ut.cc
Executable file
105
attachments/nano_attachment/nano_attachment_ut/nano_compression_ut.cc
Executable file
@@ -0,0 +1,105 @@
|
||||
#include "cptest.h"
|
||||
#include "nano_attachment_common.h"
|
||||
#include "attachment_types.h"
|
||||
#include "compression_utils.h"
|
||||
|
||||
#include "mock_nano_socket.h"
|
||||
#include "mock_nano_initializer.h"
|
||||
#include "mock_nano_attachment_sender.h"
|
||||
#include "mock_nano_configuration.h"
|
||||
#include "mock_nano_compression.h"
|
||||
|
||||
extern "C" {
|
||||
#include "nano_attachment.h"
|
||||
#include "nano_compression.h"
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
using namespace testing;
|
||||
|
||||
class NanoAttachmentTest : public Test
|
||||
{
|
||||
public:
|
||||
void
|
||||
SetUp() override
|
||||
{
|
||||
EXPECT_CALL(
|
||||
initializer_mocker,
|
||||
nano_attachment_init_process(_)
|
||||
).WillOnce(
|
||||
Return(NanoCommunicationResult::NANO_OK)
|
||||
);
|
||||
attachment = InitNanoAttachment(
|
||||
static_cast<uint8_t>(AttachmentType::NGINX_ATT_ID),
|
||||
2,
|
||||
4,
|
||||
STDOUT_FILENO
|
||||
);
|
||||
EXPECT_NE(attachment, nullptr);
|
||||
|
||||
session_data = InitSessionData(attachment, 1);
|
||||
EXPECT_NE(session_data, nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
TearDown() override
|
||||
{
|
||||
FiniSessionData(attachment, session_data);
|
||||
FiniNanoAttachment(attachment);
|
||||
}
|
||||
|
||||
nano_str_t
|
||||
create_nano_str(const char *str)
|
||||
{
|
||||
nano_str_t nano_str;
|
||||
nano_str.data = reinterpret_cast<unsigned char *>(const_cast<char *>(str));
|
||||
nano_str.len = strlen(str);
|
||||
return nano_str;
|
||||
}
|
||||
|
||||
nano_str_t body[3] = {
|
||||
create_nano_str("Hello"),
|
||||
create_nano_str("World"),
|
||||
create_nano_str("!")
|
||||
};
|
||||
|
||||
HttpBody http_body_data = {
|
||||
body,
|
||||
3
|
||||
};
|
||||
|
||||
AttachmentData req_body_data = {
|
||||
1,
|
||||
HttpChunkType::HTTP_REQUEST_BODY,
|
||||
session_data,
|
||||
(DataBuffer)&http_body_data
|
||||
};
|
||||
|
||||
NanoAttachment *attachment;
|
||||
HttpSessionData *session_data;
|
||||
StrictMock<NanoInitializerMocker> initializer_mocker;
|
||||
};
|
||||
|
||||
TEST_F(NanoAttachmentTest, CompressData)
|
||||
{
|
||||
session_data->response_data.compression_type = CompressionType::GZIP;
|
||||
|
||||
HttpBody * compressed_body_data = nullptr;
|
||||
HttpBody * decompressed_body_data = nullptr;
|
||||
|
||||
compressed_body_data = nano_compress_body(attachment, &http_body_data, session_data);
|
||||
EXPECT_EQ(compressed_body_data->bodies_count, 3u);
|
||||
|
||||
decompressed_body_data = nano_decompress_body(attachment, compressed_body_data, session_data);
|
||||
EXPECT_EQ(decompressed_body_data->bodies_count, 3u);
|
||||
EXPECT_EQ(decompressed_body_data->data[0].len, 5u);
|
||||
EXPECT_EQ(decompressed_body_data->data[1].len, 5u);
|
||||
EXPECT_EQ(decompressed_body_data->data[2].len, 1u);
|
||||
|
||||
EXPECT_EQ(strncmp((char *)decompressed_body_data->data[0].data, "Hello", decompressed_body_data->data[0].len), 0);
|
||||
EXPECT_EQ(strncmp((char *)decompressed_body_data->data[1].data, "World", decompressed_body_data->data[1].len), 0);
|
||||
EXPECT_EQ(strncmp((char *)decompressed_body_data->data[2].data, "!", decompressed_body_data->data[2].len), 0);
|
||||
|
||||
nano_free_compressed_body(attachment, compressed_body_data, session_data);
|
||||
nano_free_compressed_body(attachment, decompressed_body_data, session_data);
|
||||
}
|
||||
@@ -90,7 +90,6 @@ TEST_F(NanoConfigurationTest, InitAttachmentConfiguration)
|
||||
res = set_logging_fd(&attachment, STDOUT_FILENO);
|
||||
EXPECT_EQ(res, NanoCommunicationResult::NANO_OK);
|
||||
|
||||
setenv("CLOUDGUARD_UID", "Testing", 1);
|
||||
res = set_docker_id(&attachment);
|
||||
EXPECT_EQ(res, NanoCommunicationResult::NANO_OK);
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ public:
|
||||
).WillOnce(
|
||||
Return(NanoCommunicationResult::NANO_OK)
|
||||
);
|
||||
setenv("CLOUDGUARD_UID", "Testing", 1);
|
||||
attachment = InitNanoAttachment(
|
||||
static_cast<uint8_t>(AttachmentType::NGINX_ATT_ID),
|
||||
2,
|
||||
@@ -77,7 +76,7 @@ public:
|
||||
create_nano_str("/dogs.html")
|
||||
};
|
||||
|
||||
HttpHeaderData http_headers[3] = {
|
||||
HttpHeaderData http_headers[4] = {
|
||||
{
|
||||
create_nano_str("Host"),
|
||||
create_nano_str("www.nanoattachmentut.com")
|
||||
@@ -89,12 +88,16 @@ public:
|
||||
{
|
||||
create_nano_str("Accept"),
|
||||
create_nano_str("text/html")
|
||||
},
|
||||
{
|
||||
create_nano_str("content-encoding"),
|
||||
create_nano_str("gzip")
|
||||
}
|
||||
};
|
||||
|
||||
HttpHeaders http_headers_data = {
|
||||
http_headers,
|
||||
3
|
||||
4
|
||||
};
|
||||
|
||||
HttpRequestFilterData request_filter_data = {
|
||||
@@ -348,12 +351,14 @@ TEST_F(NanoAttachmentSenderThreadTest, SendResponseHeadersThread)
|
||||
AttachmentDataType::RESPONSE_HEADER,
|
||||
session_data->session_id,
|
||||
&session_data->remaining_messages_to_reply,
|
||||
false
|
||||
true
|
||||
)
|
||||
);
|
||||
|
||||
init_thread_ctx(&ctx, attachment, &res_header_data);
|
||||
SendResponseHeadersThread(&ctx);
|
||||
|
||||
EXPECT_EQ(session_data->response_data.compression_type, CompressionType::GZIP);
|
||||
}
|
||||
|
||||
TEST_F(NanoAttachmentSenderThreadTest, SendRequestBodyThread)
|
||||
|
||||
@@ -27,7 +27,6 @@ public:
|
||||
).WillOnce(
|
||||
Return(NanoCommunicationResult::NANO_OK)
|
||||
);
|
||||
setenv("CLOUDGUARD_UID", "Testing", 1);
|
||||
attachment = InitNanoAttachment(
|
||||
static_cast<uint8_t>(AttachmentType::NGINX_ATT_ID),
|
||||
2,
|
||||
|
||||
Reference in New Issue
Block a user