diff --git a/include/maestro/core.h b/include/maestro/core.h index aaf0c9148ceb9188b4dbb14ded4e5b63e64889b7..5a64354e19c7edc39c868fedbf19579596589bc8 100644 --- a/include/maestro/core.h +++ b/include/maestro/core.h @@ -103,10 +103,6 @@ extern "C" { **/ #define PRIappid PRIu64 - /** - ** The maximum number of characters in a schema list path. - **/ - #define MAX_PATH_LENGTH 1024 /**@} (end of group MSTRO_Core) */ diff --git a/maestro/core.c b/maestro/core.c index 7146b0224b13742fe1c21cc6cbe66ae5979aafa0..5f8a951b4e618c1c74f808456cf544ba70510031 100644 --- a/maestro/core.c +++ b/maestro/core.c @@ -226,8 +226,12 @@ mstro_status mstro_core_init__setup_schemata(void) // start reading user-defined schemas and merge them. char *end_list_token; char *end_path_token; - char schema_full_path[MAX_PATH_LENGTH]; - char env_schema_path_plus_default[MAX_PATH_LENGTH]; + char *schema_full_path; + char *env_schema_path_plus_default; + + // the lenght of all paths = length of paths exported by user + separator + default path "." + int path_len = strlen(env_schema_path) + 2 + 2; + env_schema_path_plus_default = (char *) malloc(path_len*sizeof(char)); /* get the first schema */ schema_list_token = strtok_r(env_schema_list, SCHEMA_LIST_SEP, &end_list_token); @@ -241,7 +245,7 @@ mstro_status mstro_core_init__setup_schemata(void) DEBUG("looking for schema_list_token: %s \n", schema_list_token); // creating list of paths to visit. i.e. current directory "." + user defined paths - snprintf(env_schema_path_plus_default, MAX_PATH_LENGTH, "%s%s%s", ".", SCHEMA_PATH_SEP, env_schema_path); + snprintf(env_schema_path_plus_default, path_len, "%s%s%s", ".", SCHEMA_PATH_SEP, env_schema_path); DEBUG("list of paths for schemas: %s\n", env_schema_path_plus_default); /* get the first path */ schema_path_token = strtok_r(env_schema_path_plus_default, SCHEMA_PATH_SEP, &end_path_token); @@ -250,16 +254,22 @@ mstro_status mstro_core_init__setup_schemata(void) /* walk through other paths */ while( schema_path_token != NULL ) { - // forming the full path - snprintf(schema_full_path, MAX_PATH_LENGTH, "%s%s%s", schema_path_token, "/", schema_list_token); + // forming the full path: path token + / + list name + '\0' + int schema_full_path_len = strlen(schema_path_token) + 2 + strlen(schema_list_token) + 2; + schema_full_path = (char *) malloc(sizeof(char)*schema_full_path_len); + snprintf(schema_full_path, schema_full_path_len, "%s%s%s", schema_path_token, "/", schema_list_token); DEBUG("Parsing user-defined schema from %s\n", schema_full_path); status=mstro_schema_parse_from_file(schema_full_path, &user_schema); if(status==MSTRO_OK) { DEBUG("user-defined schema is read from %s\n", schema_full_path); + free(schema_full_path); + schema_full_path = NULL; break; // no need to try other paths } + free(schema_full_path); + schema_full_path = NULL; // read the next path schema_path_token = strtok_r(NULL, SCHEMA_PATH_SEP, &end_path_token); diff --git a/tests/Makefile.am b/tests/Makefile.am index 8beb8d0608c58da39e00a75edea32c8a8f3700df..698b3d4b199d2c7f1aa54917096cd0f30fc58263 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -76,16 +76,16 @@ TESTS = check_version check_init check_uuid \ check_pm_declare.sh \ check_pm_interlock.sh \ check_subscribe.sh \ - check_pm_declare_group.sh + check_pm_declare_group.sh XFAIL_TESTS = \ - check_subscribe_local + check_subscribe_local # too expensive, actually more of a benchmark: -# check_pool_local_multi +# check_pool_local_multi # broken for now: -# check_mempool +# check_mempool check_PROGRAMS = check_version check_init check_uuid \ coverage check_memlock \ @@ -117,13 +117,13 @@ check_PROGRAMS = check_version check_init check_uuid \ simple_injector \ simple_archiver \ simple_telemetry_listener \ - check_events + check_events if WITH_MIO AM_CPPFLAGS += $(TEST_INCLUDES) -I$(top_srcdir)/deps/mio/src -D_REENTRANT -D_GNU_SOURCE -DM0_INTERNAL= -DM0_EXTERN=extern -Wno-attributes check_PROGRAMS += check_transport_mio -TESTS += check_transport_mio +TESTS += check_transport_mio endif CLIENT1_OPS="DECLARE cdo1 1025\ @@ -155,9 +155,9 @@ INJECTOR_OPS="\ -simple_interlock_client_1_SOURCES = simple_interlock_client.c +simple_interlock_client_1_SOURCES = simple_interlock_client.c simple_interlock_client_1_CPPFLAGS = $(AM_CPPFLAGS) -DCLIENT_ARGS=$(CLIENT1_OPS) -simple_interlock_client_2_SOURCES = simple_interlock_client.c +simple_interlock_client_2_SOURCES = simple_interlock_client.c simple_interlock_client_2_CPPFLAGS = $(AM_CPPFLAGS) -DCLIENT_ARGS=$(CLIENT2_OPS) simple_injector_SOURCES = simple_interlock_client.c simple_injector_CPPFLAGS = $(AM_CPPFLAGS) -DCLIENT_ARGS=$(INJECTOR_OPS) @@ -165,14 +165,16 @@ simple_injector_CPPFLAGS = $(AM_CPPFLAGS) -DCLIENT_ARGS=$(INJECTOR_OPS) simple_group_injector_SOURCES = simple_group_client.c simple_group_injector_CPPFLAGS = $(AM_CPPFLAGS) -DINJECT_GROUP_MEMBERS=1 -#check_mempool +#check_mempool check_SCRIPTS = run_demo.sh \ check_pm_declare.sh \ check_pm_declare_group.sh \ check_pm_interlock.sh \ check_subscribe.sh -EXTRA_DIST = $(check_SCRIPTS) generate-mio-config.sh demo_mvp_d3_2_config.yaml run_demo.sh +user_defined_test_schemas = benchmark_attributes.yaml test_attributes.yaml + +EXTRA_DIST = $(check_SCRIPTS) $(user_defined_test_schemas) generate-mio-config.sh demo_mvp_d3_2_config.yaml run_demo.sh clean-local: clean-local-check .PHONY: clean-local-check diff --git a/attributes/benchmark_attributes.yaml b/tests/benchmark_attributes.yaml similarity index 100% rename from attributes/benchmark_attributes.yaml rename to tests/benchmark_attributes.yaml diff --git a/tests/check_declaration_seal.c b/tests/check_declaration_seal.c index f829166178d35422b07ab0bcbcf447dbf846928f..d6002797ca56e2ab10d39f6e725a2345e997c2b4 100644 --- a/tests/check_declaration_seal.c +++ b/tests/check_declaration_seal.c @@ -39,6 +39,15 @@ #define __BASE_FILE__ __FILE__ #endif +#ifdef TOPSRCDIR +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) + +#define SRC_PATH TOSTRING(TOPSRCDIR) "/tests" +#else +#define SRC_PATH "." +#endif + #include "cheat.h" #include "maestro.h" @@ -138,6 +147,7 @@ CHEAT_TEST(cdo_declaration_seal_works, CHEAT_TEST(user_defined_schemas_works, setenv("MSTRO_SCHEMA_LIST","test_attributes.yaml", 1); + setenv("MSTRO_SCHEMA_PATH",SRC_PATH, 1); cheat_assert(MSTRO_OK == mstro_init("Tests","DECLARE",0)); @@ -158,16 +168,15 @@ CHEAT_TEST(user_defined_schemas_works, CHEAT_TEST(user_defined_schemas_doesnot_exist, - setenv("MSTRO_SCHEMA_LIST", "bechmark_attributes.yaml", 1); + setenv("MSTRO_SCHEMA_LIST", "user_attributes.yaml", 1); cheat_assert(MSTRO_OK != mstro_init("Tests","DECLARE",0)); cheat_assert(MSTRO_FAIL == mstro_finalize()); ) CHEAT_TEST(user_defined_schemas_paths, - setenv("MSTRO_SCHEMA_LIST","benchmark_attributes.yaml;test_attributes.yaml",1); - setenv("MSTRO_SCHEMA_PATH","../attributes/", 1); + setenv("MSTRO_SCHEMA_PATH",SRC_PATH, 1); cheat_assert(MSTRO_OK == mstro_init("Tests","DECLARE",0)); mstro_cdo cdo; diff --git a/tests/demo_mvp_d3_2.c b/tests/demo_mvp_d3_2.c index 95082a69e222054b950c07c59874a1aed003c9c8..fa324de78108876c79bda5aab810270351dfd1fe 100644 --- a/tests/demo_mvp_d3_2.c +++ b/tests/demo_mvp_d3_2.c @@ -208,7 +208,7 @@ static const cyaml_config_t config = { int mvp_config_parse(mvp_config* handle, const char* filename) { - if (handle == NULL) return MSTRO_INVARG; + if (handle == NULL) return MSTRO_INVARG; cyaml_err_t err; err = cyaml_load_file(filename, &config, @@ -255,7 +255,7 @@ wait_for_announcement(struct cdo_announcement *announcement) ERR("Failed to require announcement CDO\n"); abort(); } - + s = mstro_cdo_demand(announcement_cdo); if(s!=MSTRO_OK) { ERR("Failed to withdraw announcement CDO\n"); @@ -450,7 +450,7 @@ archiver_flush_to_disk(const char *name, mmbArray *a) abort(); } - size_t nt; + size_t nt; stat = mmb_tile_iterator_count(it, &nt); if(stat != MMB_OK) { ERR("Failed to get tile iterator count\n"); @@ -721,8 +721,8 @@ mvp_checksum(const char* name, void* rawptr, uint64_t size) unsigned char x; uint64_t i; - for (i=0,x=0;i<size; i++) - x ^= ((unsigned char*)rawptr)[i]; + for (i=0,x=0;i<size; i++) + x ^= ((unsigned char*)rawptr)[i]; INFO("Checksum for cdo \"%s\": %d\n", name, x); } @@ -731,7 +731,7 @@ void consumer_flush_to_disk(const char *name, void *a, uint64_t size) { char file_name [256]; - sprintf(file_name, "consumer_%s", name); + sprintf(file_name, "consumer_%s", name); FILE *dst = fopen((const char*)file_name, "w"); if(dst==NULL) { @@ -769,7 +769,7 @@ consumer_thread_fun(void *closure) mstro_status s; size_t my_idx = * (size_t*)closure; INFO("Consumer %zu starting\n", my_idx); - + struct cdo_announcement *announcement = malloc(sizeof(struct cdo_announcement)); if(announcement==NULL) { @@ -826,7 +826,7 @@ consumer_thread_fun(void *closure) /* send ACK that we're ready */ mstro_cdo ready_cdo; - + INFO("Declaring Consumer %zu ready\n", my_idx); declare_consumer_ready(my_idx,&ready_cdo); @@ -853,14 +853,14 @@ consumer_thread_fun(void *closure) /* query the size */ s = mstro_cdo_attribute_get(incoming[i], MSTRO_ATTR_CORE_CDO_SCOPE_LOCAL_SIZE, - &type, (const void**)&size); + &type, (const void**)&size); if(s!=MSTRO_OK) { ERR("Failed to extract local size from CDO %s for archiving\n", announcement->cdo_names[i]); abort(); } - /* do some work */ + /* do some work */ mvp_checksum(announcement->cdo_names[i], rawptr, *size); /* write-out */ @@ -878,7 +878,7 @@ consumer_thread_fun(void *closure) } /* demand data and process */ - + cdo_sem_post_cleanup(ready_cdo); free(announcement); @@ -893,7 +893,15 @@ consumer_thread_fun(void *closure) #define DEFAULT_CDO_SIZE 1024 #define DEFAULT_CDO_COUNT 42 +#ifdef TOPSRCDIR +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) + +#define CONFIG_FILE_PATH TOSTRING(TOPSRCDIR) "/tests/demo_mvp_d3_2_config.yaml" +#else #define CONFIG_FILE_PATH "./demo_mvp_d3_2_config.yaml" +#endif + /* * main thread: @@ -933,7 +941,7 @@ int main(int argc, char **argv) WARN("Command line arguments ignored\n"); /* fallthrough: */ case 1: - + err = mvp_config_parse(&config_handle, CONFIG_FILE_PATH); if (err != 0) { WARN("Failed to parse a config file. Using default config.\n"); @@ -949,12 +957,12 @@ int main(int argc, char **argv) announcement.num_archivers = config_handle->num_archivers; announcement.cdo_size = config_handle->cdo_size; announcement.num_entries = config_handle->cdo_count; - } + } break; } assert(announcement.num_entries<=CDO_COUNT_MAX); - + pthread_t producers[announcement.num_producers]; pthread_t consumers[announcement.num_consumers]; pthread_t archivers[announcement.num_archivers]; @@ -1035,7 +1043,7 @@ int main(int argc, char **argv) for(size_t i=0; i<announcement.num_archivers; i++) { pthread_join(archivers[i], NULL); } - + /* withdraw announcement */ withdraw_announcement(announcement_cdo); @@ -1050,11 +1058,11 @@ int main(int argc, char **argv) announcement.num_producers, announcement.num_consumers, announcement.num_archivers); - + BAILOUT: if(config_handle) free(config_handle); - + return s; }