dbc0897fc6
Add unit tests for previously untested modules (protocol, data, metadata, file, glob), robustness tests for deserialization of malformed inputs, thread safety stress tests, property-based roundtrip tests, and 6 fuzz targets. Update CI with CTest integration, coverage reporting, and valgrind memory checking. New test files: - test_data.c: Data type lifecycle (5 tests) - test_protocol.c: Protocol I/O roundtrips and error paths (9 tests) - test_metadata.c: Metadata serialization roundtrips (6 tests) - test_file.c: File operations and send/receive (12 tests) - test_glob.c: Glob pattern matching (10 tests) - test_robustness.c: Malformed input handling for chunk/delta/protocol (11 tests) - test_stress.c: MPMC queue stress, backpressure, rapid create/destroy (3 tests) - test_property.c: Compress, delta, chunk, glob roundtrip properties (4 tests) - tests/fuzz/: 6 libFuzzer targets for deserialization functions Extended existing tests: - test_config.c: config_send/config_receive roundtrip via fork+pipe - test_shared_utils.c: mkdir_r, glob_match, delete_extras Infrastructure: - CTest integration in CMakeLists.txt - Coverage support (-DENABLE_COVERAGE=ON) - Fuzz target support (-DENABLE_FUZZ=ON) - CI: coverage, valgrind, address sanitizer jobs - Fixed MPMC stress test race condition (cnd_signal -> cnd_broadcast)
51 lines
1.0 KiB
C
51 lines
1.0 KiB
C
#include "data.h"
|
|
#include "test_utils.h"
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
static void test_data_create() {
|
|
char* buf = malloc(6);
|
|
EXPECT_NOT_NULL(buf);
|
|
memcpy(buf, "hello", 6);
|
|
Data* d = data_create(buf, 6);
|
|
EXPECT_NOT_NULL(d);
|
|
EXPECT_NOT_NULL(d->data);
|
|
EXPECT_TRUE(d->data == buf);
|
|
EXPECT_EQ_INT((int)d->size, 6);
|
|
data_destroy(d);
|
|
}
|
|
|
|
static void test_data_create_empty() {
|
|
Data* d = data_create_empty(256);
|
|
EXPECT_NOT_NULL(d);
|
|
EXPECT_NOT_NULL(d->data);
|
|
EXPECT_EQ_INT((int)d->size, 256);
|
|
data_destroy(d);
|
|
}
|
|
|
|
static void test_data_create_reserve() {
|
|
Data* d = data_create_reserve(1024);
|
|
EXPECT_NOT_NULL(d);
|
|
EXPECT_NULL(d->data);
|
|
EXPECT_EQ_INT((int)d->size, 1024);
|
|
data_destroy(d);
|
|
}
|
|
|
|
static void test_data_destroy_null() {
|
|
data_destroy(NULL);
|
|
}
|
|
|
|
static void test_data_destroy_normal() {
|
|
Data* d = data_create_empty(128);
|
|
EXPECT_NOT_NULL(d);
|
|
data_destroy(d);
|
|
}
|
|
|
|
void test_data() {
|
|
test_data_create();
|
|
test_data_create_empty();
|
|
test_data_create_reserve();
|
|
test_data_destroy_null();
|
|
test_data_destroy_normal();
|
|
}
|