Пример #1
0
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;
}
Пример #2
0
static void setup() {
    fail_unless((settings = smf_settings_new()) != NULL);
    smf_settings_set_queue_dir(settings, BINARY_DIR);  
    fail_unless((session = smf_session_new()) != NULL);
    
    queue = smf_modules_pqueue_init(error_cb, processing_error_cb, nexthop_error_cb);
    fail_unless(queue != NULL);
    
    create_sample_message(session, SAMPLES_DIR "/m0001.txt");
    create_spoolfile(session, SAMPLES_DIR "/m0001.txt");
        
    init_cb_data(&mod1_data);
    init_cb_data(&mod2_data);
    init_cb_data(&mod3_data);
    init_cb_data(&error_data);
    init_cb_data(&processing_error_data);
    init_cb_data(&nexthop_error_data);
}
Пример #3
0
int main (int argc, char const *argv[]) {
    char *msg_file = NULL;
    SMFSmtpStatus_T *status = NULL;
    SMFSettings_T *settings = smf_settings_new();
    SMFEnvelope_T *env = smf_envelope_new();
    pid_t pid;

    smf_settings_set_pid_file(settings, "/tmp/smf_test_smtpd.pid");
    smf_settings_set_bind_ip(settings, "127.0.0.1");
    smf_settings_set_foreground(settings, 1);
    smf_settings_set_spare_childs(settings, 0);
    smf_settings_set_max_childs(settings,1);
    smf_settings_set_debug(settings,1);
    smf_settings_set_queue_dir(settings, BINARY_DIR);
    smf_settings_set_engine(settings, "smtpd");

    /* add test modules */
    smf_settings_add_module(settings, BINARY_DIR "/libtestmod1.so");
    smf_settings_add_module(settings, BINARY_DIR "/libtestmod2.so");
    
    printf("Start smf_smtpd tests...\n");

    printf("* preparing smtpd engine...\t\t\t");
    
    printf("passed\n");
    switch(pid = fork()) {
        case -1:
            printf("failed\n");
            break;
        case 0:
            if (load(settings) != 0) {
                return -1;
            }
            break;

        default:
            printf("* sending test message ...\t\t\t");
            asprintf(&msg_file, "%s/m0001.txt",SAMPLES_DIR);

            smf_envelope_set_nexthop(env, "127.0.0.1:33332");
            smf_envelope_set_sender(env, test_email);
            smf_envelope_add_rcpt(env, test_email);
            status = smf_smtp_deliver(env, SMF_TLS_DISABLED, msg_file, NULL);
            
            if (status->code == -1) {
                kill(pid,SIGTERM);
                printf("failed\n");
                return -1;
            }
            
            smf_smtp_status_free(status);
            printf("passed\n");
            kill(pid,SIGTERM);
            waitpid(pid, NULL, 0);

            break;
    }

    if(msg_file != NULL)
        free(msg_file);
        
    
    smf_settings_free(settings);
    smf_envelope_free(env);

    return 0;
}