test_cpcd.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
- /* Copyright (C) 2003 MySQL AB
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
- #include <ndb_global.h>
- #include "../CpcClient.hpp"
- #include <Vector.hpp>
- SimpleCpcClient g_client("localhost", 1234);
- Vector<SimpleCpcClient::Process> g_procs;
- void define();
- void start(SimpleCpcClient::Process & p);
- void stop(SimpleCpcClient::Process & p);
- void undefine(SimpleCpcClient::Process & p);
- void list();
- SimpleCpcClient::Process* find(int id);
- #define ABORT() {ndbout_c("ABORT"); while(true); abort();}
- int name = 0;
- int
- main(void){
- g_client.connect();
- srand(time(0));
- for(int i = 0; i<1000; i++){
- int sz = g_procs.size();
- int test = rand() % 100;
- if(sz == 0 || test < 10){
- define();
- continue;
- }
- list();
- int proc = rand() % g_procs.size();
- SimpleCpcClient::Process & p = g_procs[proc];
- if(p.m_status == "running" && test > 50){
- ndbout_c("undefine %d: %s (running)", p.m_id, p.m_name.c_str());
- undefine(p);
- g_procs.erase(proc);
- continue;
- }
- if(p.m_status == "running" && test <= 50){
- ndbout_c("stop %d: %s(running)", p.m_id, p.m_name.c_str());
- stop(p);
- continue;
- }
- if(p.m_status == "stopped" && test > 50){
- ndbout_c("undefine %d: %s(stopped)", p.m_id, p.m_name.c_str());
- undefine(p);
- g_procs.erase(proc);
- continue;
- }
- if(p.m_status == "stopped" && test <= 50){
- ndbout_c("start %d %s(stopped)", p.m_id, p.m_name.c_str());
- start(p);
- continue;
- }
- ndbout_c("Unknown: %s", p.m_status.c_str());
- }
- }
- void define(){
- SimpleCpcClient::Process m_proc;
- m_proc.m_id = -1;
- m_proc.m_type = "temporary";
- m_proc.m_owner = "atrt";
- m_proc.m_group = "group";
- //m_proc.m_cwd
- //m_proc.m_env
- //proc.m_proc.m_stdout = "log.out";
- //proc.m_proc.m_stderr = "2>&1";
- //proc.m_proc.m_runas = proc.m_host->m_user;
- m_proc.m_ulimit = "c:unlimited";
- if((rand() & 15) >= 0){
- m_proc.m_name.assfmt("%d-%d-%s", getpid(), name++, "sleep");
- m_proc.m_path.assign("/bin/sleep");
- m_proc.m_args = "600";
- } else {
- m_proc.m_name.assfmt("%d-%d-%s", getpid(), name++, "test.sh");
- m_proc.m_path.assign("/home/jonas/run/cpcd/test.sh");
- m_proc.m_args = "600";
- }
- g_procs.push_back(m_proc);
-
- Properties reply;
- if(g_client.define_process(g_procs.back(), reply) != 0){
- ndbout_c("define %s -> ERR", m_proc.m_name.c_str());
- reply.print();
- ABORT();
- }
- ndbout_c("define %s -> %d", m_proc.m_name.c_str(), m_proc.m_id);
- }
- void start(SimpleCpcClient::Process & p){
- Properties reply;
- if(g_client.start_process(p.m_id, reply) != 0){
- reply.print();
- ABORT();
- }
- }
- void stop(SimpleCpcClient::Process & p){
- Properties reply;
- if(g_client.stop_process(p.m_id, reply) != 0){
- reply.print();
- ABORT();
- }
- }
- void undefine(SimpleCpcClient::Process & p){
- Properties reply;
- if(g_client.undefine_process(p.m_id, reply) != 0){
- reply.print();
- ABORT();
- }
- }
- void list(){
- Properties reply;
- Vector<SimpleCpcClient::Process> procs;
- if(g_client.list_processes(procs, reply) != 0){
- reply.print();
- ABORT();
- }
- for(Uint32 i = 0; i<procs.size(); i++){
- SimpleCpcClient::Process * p = find(procs[i].m_id);
- if(p != 0){
- p->m_status = procs[i].m_status;
- }
- }
- }
- SimpleCpcClient::Process* find(int id){
- for(Uint32 i = 0; i<g_procs.size(); i++){
- if(g_procs[i].m_id == id)
- return &g_procs[i];
- }
- return 0;
- }