static void run_test()
{
    qeo_factory_t *factory;
    qeo_state_change_reader_t *reader;
    qeo_state_change_reader_listener_t r_cbs = {
        .on_data = on_data,
        .on_policy_update = reader_on_policy_update
    };
    qeo_state_writer_t *writer;
    qeo_state_writer_listener_t w_cbs = {
        .on_policy_update = writer_on_policy_update
    };
    test_type_t tt = { .key = _self };

    log_self("start application for user %" PRIx64, _self);
    /* initialize */
    sem_init(&_pol_sync, 0, 0);
    sem_init(&_data_sync, 0, 0);
    assert(NULL != (factory = qeo_factory_create()));
    assert(NULL != (writer = qeo_factory_create_state_writer(factory, _tsm, &w_cbs, 0)));
    assert(NULL != (reader = qeo_factory_create_state_change_reader(factory, _tsm, &r_cbs, 0)));

    /* wait for initial policy update (reader and writer) */
    if (_self != USER_INVALID) {
        sem_wait(&_pol_sync);
        sem_wait(&_pol_sync);
        log_self("reader/writer created and policies updated");
    }
    _rd_policy_updates = _wr_policy_updates = 0;
    /* write data */
    sleep(2);
    log_self("writing data");
    assert(QEO_OK == qeo_state_writer_write(writer, &tt));
    /* wait for data reception */
    if (_self != USER_INVALID) {
        sem_wait(&_data_sync);
        log_self("forward data received");
    }
    else {
        /* sleep for about 10 seconds and check that nothing has been received */
        sleep(10);
    }

    /* clean up */
    sleep(2);
    qeo_state_change_reader_close(reader);
    qeo_state_writer_close(writer);
    qeo_factory_close(factory);
    sem_destroy(&_data_sync);
    sem_destroy(&_pol_sync);
}
Beispiel #2
0
static void update_participant(const char *name,
                               org_qeo_sample_simplechat_ChatState_t state)
{
    _me.state = state;
    if (NULL != name) {
        /* use provided name */
        qeo_state_writer_remove(_part_writer, &_me);
        free(_me.name);
        _me.name = strdup(name);
    }
    if (NULL == _me.name) {
        /* use default name */
        struct passwd *pwd = getpwuid(getuid());

        if (NULL != pwd) {
            _me.name = strdup(pwd->pw_name);
        }
    }
    /* publish updated participant data */
    qeo_state_writer_write(_part_writer, &_me);
}
static bool run_test_write()
{
    qeo_factory_t *factory;
    qeo_state_writer_t *writer;
    int status;
    int ok = 0;

    pid_t pid = getpid();

    log_verbose("[PID %d] Creating factory", pid);
    assert(NULL != (factory = qeo_factory_create_by_id(QEO_IDENTITY_DEFAULT)));
    assert(NULL != (writer = qeo_factory_create_state_writer(factory, _tsm_types, NULL, 0)));
    _current = &_types1;
    
    log_verbose("[PID %d] Writing sample 1", pid);
    _current->string = string1;
    _current->i8 = 1;
    qeo_state_writer_write(writer, _current);
    sleep(1);

    log_verbose("go to suspend");
    qeo_bgns_suspend();
    log_verbose("[PID %d] Writing sample 3", pid); //should not arrive since suspended!
    _current->string = string3;
    _current->i8 = 3;
    qeo_state_writer_write(writer, _current);
    sleep(1);

    log_verbose("[PID %d] Closing factory", pid);
    qeo_state_writer_close(writer);
    qeo_factory_close(factory);

    log_verbose("[PID %d] Creating factory", pid);
    assert(NULL != (factory = qeo_factory_create_by_id(QEO_IDENTITY_DEFAULT)));
    assert(NULL != (writer = qeo_factory_create_state_writer(factory, _tsm_types, NULL, 0)));

    log_verbose("[PID %d] Writing sample 2", pid);
    _current->string = string2;
    _current->i8 = 2;
    qeo_state_writer_write(writer, _current);


        log_verbose("Waiting for process with ID %d", _pid);
        assert(_pid == waitpid(_pid, &status, 0));
        if (WIFEXITED(status)) {
            ok = 1;
            printf("ok\n");
        } else if (WIFSIGNALED(status)) {
            printf("killed by signal %s\n", strsignal(WTERMSIG(status)));
        } else if (WIFSTOPPED(status)) {
            printf("stopped by signal %s\n", strsignal(WSTOPSIG(status)));
        } else if (WIFCONTINUED(status)) {
            printf("continued\n");
        }


    log_verbose("[PID %d] Closing factory", pid);
    qeo_state_writer_close(writer);
    qeo_factory_close(factory);
    return (ok == 1);

}