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); }
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); }