Skip to content

Commit

Permalink
Merge branch 'latest' into typo-fix
Browse files Browse the repository at this point in the history
  • Loading branch information
goatshriek committed Nov 9, 2024
2 parents ce216b0 + f3ac58e commit edde424
Show file tree
Hide file tree
Showing 16 changed files with 283 additions and 171 deletions.
11 changes: 9 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
cmake_minimum_required(VERSION 3.2.3)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
endif()
Expand Down Expand Up @@ -844,7 +847,9 @@ add_function_test(current_target
)

add_function_test(element
SOURCES test/function/element.cpp
SOURCES
test/function/element.cpp
$<TARGET_OBJECTS:test_helper_fixture>
)

add_function_test(element_leak
Expand Down Expand Up @@ -1055,7 +1060,9 @@ add_function_test(memory
)

add_function_test(param
SOURCES ${PROJECT_SOURCE_DIR}/test/function/param.cpp
SOURCES
${PROJECT_SOURCE_DIR}/test/function/param.cpp
$<TARGET_OBJECTS:test_helper_fixture>
)

add_function_test(perror
Expand Down
27 changes: 27 additions & 0 deletions include/stumpless/prival.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,33 @@ STUMPLESS_PUBLIC_FUNCTION
const char *
stumpless_get_prival_string( int prival );

/**
* Gets the string representation of the given prival in the format
* "facility.level".
*
* The string returned must be freed by the caller when it is no longer
* needed to avoid memory leaks.
*
* **Thread Safety: MT-Safe**
* This function is thread safe.
*
* **Async Signal Safety: AS-Unsafe heap**
* This function is not safe to call from signal handlers due to the use of
* memory management functions.
*
* **Async Cancel Safety: AC-Unsafe heap**
* This function is not safe to call from threads that may be asynchronously
* cancelled due to the use of memory management functions.
*
* @param prival int to get the string from.
*
* @return The string representation of the given prival.
*
*/
STUMPLESS_PUBLIC_FUNCTION
const char *
stumpless_get_priority_string( int prival );

/**
* Extract PRIVAL number (Facility and Severity) from the given string with
* the direct number or with two names divided with a period in the order:
Expand Down
14 changes: 14 additions & 0 deletions include/test/helper/fixture.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,18 @@ create_nil_entry( void );
const char *
load_corpus( const std::string& name );

/**
* Returns stumpless_test_data holding the contents of all the files at the named
* location in the test/corpora folder. For example, a name of "invalid_param_name"
* will return the contents of all the files under test/corpora/invalid_param_name
* directory in the form of an array.
*
*
* @param name The directory name.
*
* @return vector of strings holding test values.
*/
std::vector<std::string>
load_corpus_folder( const std::string& name );

#endif /* __STUMPLESS_TEST_HELPER_FIXTURE_HPP */
45 changes: 45 additions & 0 deletions src/prival.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,51 @@ stumpless_get_prival_string( int prival ) {
return prival_string;
}

const char *
stumpless_get_priority_string( int prival ) {
const char *facility;
const char *severity;

size_t priority_string_size;
char* priority_string;

if ((prival & 0xff) != prival)
return NULL;
if (facility_is_invalid(get_facility(prival)))
return NULL;

facility = stumpless_get_facility_string( get_facility( prival ) );
severity = stumpless_get_severity_string( get_severity( prival ) );

facility = strrchr(facility, '_');
severity = strrchr(severity, '_');

// inc by 1 to skip '_'
facility++;
severity++;

size_t len_facility = strlen(facility);
size_t len_severity = strlen(severity);

// +1 for '.' formatting, +1 for termination
priority_string_size = ( len_facility + len_severity + 2 );
priority_string = alloc_mem( priority_string_size );

for (size_t idx = 0; idx < len_facility; idx++) {
priority_string[idx] = tolower(facility[idx]);
}

priority_string[len_facility] = '.';

for (size_t idx = 0; idx < len_severity; idx++) {
priority_string[len_facility + 1 + idx] = tolower(severity[idx]);
}

priority_string[priority_string_size - 1] = '\0';

return priority_string;
}

int
stumpless_prival_from_string( const char *string ) {
int prival;
Expand Down
4 changes: 2 additions & 2 deletions src/windows/stumpless.def
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ EXPORTS

stumpless_get_prival_string @230
stumpless_set_severity_color @231

stumpless_get_malloc @232
stumpless_get_free @233
stumpless_get_realloc @234
stumpless_get_realloc @234
stumpless_get_priority_string @235
1 change: 1 addition & 0 deletions test/corpora/invalid_param_name/1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
par=am
1 change: 1 addition & 0 deletions test/corpora/invalid_param_name/2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
par]am
1 change: 1 addition & 0 deletions test/corpora/invalid_param_name/3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
par\"am
87 changes: 32 additions & 55 deletions test/function/element.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@

#include <cstddef>
#include <cstdlib>
#include <string>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <stumpless.h>
#include "test/helper/assert.hpp"
#include "test/helper/fixture.hpp"
#include "test/helper/memory_allocation.hpp"

using::testing::HasSubstr;
Expand Down Expand Up @@ -351,18 +353,13 @@ namespace {

TEST_F( ElementTest, GetParamByNameInvalidName ) {
const struct stumpless_param *result;
std::vector<std::string> invalid_names = load_corpus_folder("invalid_param_name");

result = stumpless_get_param_by_name( element_with_params, "par=am" );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

result = stumpless_get_param_by_name( element_with_params, "par]am" );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

result = stumpless_get_param_by_name( element_with_params, "par\"am" );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
for(const auto& invalid_name : invalid_names) {
result = stumpless_get_param_by_name( element_with_params, invalid_name.c_str() );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
}
}

TEST_F( ElementTest, GetParamCount ) {
Expand Down Expand Up @@ -557,18 +554,13 @@ namespace {

TEST_F( ElementTest, GetParamValueByNameInvalidName ) {
const char *result;
std::vector<std::string> invalid_names = load_corpus_folder("invalid_param_name");

result = stumpless_get_param_value_by_name( element_with_params, "par=am" );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

result = stumpless_get_param_value_by_name( element_with_params, "par]am" );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

result = stumpless_get_param_value_by_name( element_with_params, "par\"am" );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
for(const auto& invalid_name : invalid_names) {
result = stumpless_get_param_value_by_name( element_with_params, invalid_name.c_str() );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
}
}

TEST_F( ElementTest, HasParam ) {
Expand All @@ -593,18 +585,13 @@ namespace {

TEST_F( ElementTest, HasParamInvalidName ) {
bool result;
std::vector<std::string> invalid_names = load_corpus_folder("invalid_param_name");

result = stumpless_element_has_param( element_with_params, "par=am" );
EXPECT_FALSE( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

result = stumpless_element_has_param( element_with_params, "para]m" );
EXPECT_FALSE( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

result = stumpless_element_has_param( element_with_params, "pa\"ram" );
EXPECT_FALSE( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
for(const auto& invalid_name : invalid_names) {
result = stumpless_element_has_param( element_with_params, invalid_name.c_str() );
EXPECT_FALSE( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
}
}

TEST_F( ElementTest, HighParamCount ) {
Expand Down Expand Up @@ -1034,19 +1021,14 @@ namespace {

TEST( NewElementTest, InvalidName ) {
struct stumpless_element *element;
std::vector<std::string> invalid_names = load_corpus_folder("invalid_param_name");

element = stumpless_new_element( "ele=ment" );
EXPECT_NULL( element );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

element = stumpless_new_element( "element]" );
EXPECT_NULL( element );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
for(const auto& invalid_name : invalid_names) {
element = stumpless_new_element( invalid_name.c_str() );
EXPECT_NULL( element );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
}

element = stumpless_new_element( "El\"ment" );
EXPECT_NULL( element );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

stumpless_free_all( );
}

Expand All @@ -1073,22 +1055,17 @@ namespace {
TEST( SetElementNameTest, InvalidName) {
struct stumpless_element *element;
struct stumpless_element *result;
std::vector<std::string> invalid_names = load_corpus_folder("invalid_param_name");

element = stumpless_new_element( "element" );
ASSERT_NOT_NULL( element );

result = stumpless_set_element_name( element, "ele=ment");
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
for(const auto& invalid_name : invalid_names) {
result = stumpless_set_element_name( element, invalid_name.c_str() );
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );
}

result = stumpless_set_element_name( element, "eleme]nt");
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

result = stumpless_set_element_name( element, "element\"");
EXPECT_NULL( result );
EXPECT_ERROR_ID_EQ( STUMPLESS_INVALID_ENCODING );

stumpless_destroy_element_and_contents( element );
stumpless_free_all( );
}
Expand Down
Loading

0 comments on commit edde424

Please sign in to comment.