34 X("source_manager::init", test_sm_init), \
35 X("source_manager::buffer_new_file", test_sm_buffer_new_file), \
36 X("source_manager::buffer_terminated", test_sm_buffer_terminated), \
37 X("source_manager::buffer_same_file_no_reread", test_sm_buffer_same_file_no_reread), \
38 X("source_manager::buffer_empty_file", test_sm_buffer_empty_file), \
39 X("source_manager::buffer_nonexistent_file", test_sm_buffer_nonexistent_file), \
40 X("source_manager::buffer_reread", test_sm_buffer_reread), \
41 X("source_manager::get_buffer", test_sm_get_buffer), \
42 X("source_manager::id_exhaustion_releases_lock", test_sm_id_exhaustion_releases_lock), \
43 X("source_manager::reread_failure_keeps_buffer", test_sm_reread_failure_keeps_buffer), \
44 X("source_manager::filename_is_owned", test_sm_filename_is_owned), \
45 X("source_manager::shutdown", test_sm_shutdown)
50 (void)snprintf(path_out, PATH_MAX,
"/tmp/srn_sm_test_XXXXXX");
51 int fd = mkstemp(path_out);
57 size_t len = strlen(content);
58 if (
len > 0 && write(
fd, content,
len) != (ssize_t)
len) {
108 static const char content[] =
"0123456789abcdef0123456789abcdef";
109 const size_t len =
sizeof(content) - 1;
119 for (
size_t i = 0; i < 8; i++) {
123 for (
size_t i = 0; i < 8; i++) {
278 char scratch[PATH_MAX];
279 (void)snprintf(scratch,
sizeof(scratch),
"%s",
path);
285 memset(scratch,
'x', strlen(scratch));
305 sm->buffer_counts = UINT16_MAX;
310 sm->buffer_counts = 0;
337 char path1[PATH_MAX];
338 char path2[PATH_MAX];
#define TEST_ASSERT(cond)
#define RELEASE_CONTEXT(x)
#define ASSERT_NOT_NULL(x)
#define SHUTDOWN_ENGINE(mm, engine)
#define TEST_IN_FIBER(name, body)
#define MAKE_ENGINE(mm, engine)
#define MAKE_CONTEXT(engine, x)
void srn_mm_free(srn_mm_t *mm, void *ptr)
Release a pointer previously returned by srn_mm_malloc or srn_mm_reallocate.
void * srn_mm_malloc(srn_mm_t *mm, size_t size)
Generic allocations that do not participate in the block based pools.
srn_fiber_t * srn_fiber_spawn(srn_context_t *ctx, srn_fiber_entry_t entry, void *arg)
Make and schedule a fiber with every default, the engine's scheduler, the configured stack size,...
void * srn_fiber_result_t
What a fiber's entry produces, type-erased.
void srn_sched_run(srn_scheduler_t *sched, size_t nworkers)
Run the scheduler with nworkers os threads draining it, returning once the pool goes quiescent (every...
srn_sm_maybe_buffer_t srn_sm_buffer_file(srn_sm_t *sm, const char *filepath, bool reread)
Read and buffer the given filepath into the source manager and return a srn_sm_maybe_buffer_t which e...
srn_sm_t * srn_sm_init(srn_context_t *ctx)
Initialize the source manager, as an immortal data structure.
srn_sm_buffer_t * srn_sm_get_buffer(srn_sm_t *sm, srn_sm_buffer_id_t id)
Return the buffer pointer of the given id, nullptr if the id does not exists.
srn_sm_maybe_id_t srn_sm_read_buffer_file(srn_sm_t *sm, const char *filepath, bool reread)
Read and buffer the given filepath into the source manager and return the buffer id.
Source manager is what that read the source files and own the buffer that contains the data.
static size_t srn_sm_buffer_len(srn_sm_buffer_t *buf)
static const unsigned char * srn_sm_buffer_data(srn_sm_buffer_t *buf)
static int sm_make_temp_file(char *path_out, const char *content)
static void test_sm_init()
unsigned char * poison[8]
static void test_sm_id_exhaustion_releases_lock()