int main (int argc, char const *argv[]) { SMFSettings_T *settings = smf_settings_new(); int pipefd[2]; char *fname; printf("Start smf_pipe tests...\n"); fflush(stdout); if (pipe(pipefd)) { return -1; } printf("* preparing pipe engine...\t\t\t"); smf_settings_set_debug(settings, 1); smf_settings_set_queue_dir(settings, BINARY_DIR); smf_settings_set_engine(settings, "pipe"); smf_settings_set_nexthop(settings, "/dev/null"); /* add test modules */ smf_settings_add_module(settings, BINARY_DIR "/libtestmod1.so"); smf_settings_add_module(settings, BINARY_DIR "/libtestmod2.so"); asprintf(&fname, "%s/m0001.txt",SAMPLES_DIR); switch (fork()) { case -1: printf("failed\n"); return -1; case 0: close(pipefd[0]); dup2(pipefd[1], 1); close(pipefd[1]); execl("/bin/cat", "cat", fname, (char *)NULL); break; default: close(pipefd[1]); dup2(pipefd[0], 0); close(pipefd[0]); printf("passed\n"); printf("* sending test message...\t\t\t\t"); if (load(settings) != 0) { printf("failed\n"); return -1; } printf("passed\n"); break; } free(fname); smf_settings_free(settings); return 0; }
END_TEST START_TEST(process_err_nexthop_err) { smf_settings_set_nexthop(settings, "something_that_not_exists"); smf_list_append(settings->modules, smf_module_create_callback("mod1", mod1)); smf_list_append(settings->modules, smf_module_create_callback("mod2", mod2)); smf_list_append(settings->modules, smf_module_create_callback("mod3", mod3)); fail_unless(smf_list_size(settings->modules) == 3); mod2_data.rc = 1; // != 0 is that counts processing_error_data.rc = 2; // stop the queue, invoke nexthop fail_unless(smf_modules_process(queue, session, settings) == -1); fail_unless(mod1_data.count == 1); fail_unless(mod2_data.count == 1); fail_unless(mod3_data.count == 0); fail_unless(error_data.count == 0); fail_unless(processing_error_data.count == 1); fail_unless(nexthop_error_data.count == 1); }