static bool test_getjob(acl::disque& cmd, int max, int& i, int count) { if (i >= max) return true; std::vector<acl::string> queues; size_t timeout = 10; queues.push_back(__queue); cmd.clear(); const std::vector<acl::disque_job*>* jobs = cmd.getjob(queues, timeout, count); if (jobs == NULL) { printf("getjob queue: %s error: %s\r\n", __queue.c_str(), cmd.result_error()); return false; } std::vector<acl::string> job_ids; std::vector<acl::disque_job*>::const_iterator cit1; for (cit1 = jobs->begin(); cit1 != jobs->end(); ++cit1) { const char* jobid = (*cit1)->get_id(); if (*jobid) job_ids.push_back(jobid); } if (!job_ids.empty() && !test_ackjob(cmd, job_ids, i)) return false; i += jobs->size(); if (i >= 2 * (int) count) return true; printf("%s -> addr: %s, tid: %lu, count: %d, %d\r\n", __FUNCTION__, cmd.get_client_addr(), acl::thread::thread_self(), (int) count, (int) jobs->size()); std::vector<acl::disque_job*>::const_iterator cit2; for (cit2 = jobs->begin(); cit2 != jobs->end(); ++cit2) { printf("\tid: %s\r\n", (*cit2)->get_id()); printf("\tqueue: %s\r\n", (*cit2)->get_queue()); printf("\tjob: %s\r\n", (*cit2)->get_body().c_str()); } return true; }
static bool test_ackjob(acl::disque& cmd, const std::vector<acl::string>& job_ids, int i) { cmd.clear(); int ret = cmd.ackjob(job_ids); if (ret < 0) printf("ackjob error: %s\r\n", cmd.result_error()); else if (i >= 10) return true; printf("%s -> addr: %s, tid: %lu\r\n", __FUNCTION__, cmd.get_client_addr(), acl::thread::thread_self()); return true; }
static bool test_addjob(acl::disque& cmd, const acl::disque_cond& cond, int i) { acl::string job; int timeout = 0; const char* jobid; job.format("job_%s_%d", __jobpre.c_str(), i); cmd.clear(); jobid = cmd.addjob(__queue, job, timeout, &cond); if (jobid == NULL) { printf("addjob queue: %s error: %s\r\n", __queue.c_str(), cmd.result_error()); return false; } else if (i >= 10) return true; printf("addjob queue: %s ok, jobid: %s\r\n", __queue.c_str(), jobid); printf("%s -> addr: %s, tid: %lu\r\n", __FUNCTION__, cmd.get_client_addr(), acl::thread::thread_self()); return true; }