mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-15 17:30:53 +08:00
212 lines
4.9 KiB
C++
212 lines
4.9 KiB
C++
#include "StdAfx.h"
|
|
#include "rpc/rpc_manager.h"
|
|
#include "ping/ping.h"
|
|
#include "dns/nslookup.h"
|
|
#include "mail/smtp_client.h"
|
|
#include "mail/pop3_client.h"
|
|
#include "test_all.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void ping_result::ping_report(size_t total, size_t curr, size_t nerr)
|
|
{
|
|
test_.ping_report(total, curr, nerr);
|
|
}
|
|
|
|
void ping_result::ping_finish(const char* dbpath)
|
|
{
|
|
test_.ping_finish(dbpath);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void nslookup_result::nslookup_report(size_t total, size_t curr)
|
|
{
|
|
test_.nslookup_report(total, curr);
|
|
}
|
|
|
|
void nslookup_result::nslookup_finish(const char* dbpath)
|
|
{
|
|
test_.nslookup_finish(dbpath);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void smtp_result::smtp_report(const char* msg, size_t total,
|
|
size_t curr, const SMTP_METER& meter)
|
|
{
|
|
test_.smtp_report(msg, total, curr, meter);
|
|
}
|
|
|
|
void smtp_result::smtp_finish(const char* dbpath)
|
|
{
|
|
test_.smtp_finish(dbpath);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void pop3_result::pop3_report(const char* msg, size_t total,
|
|
size_t curr, const POP3_METER& meter)
|
|
{
|
|
test_.pop3_report(msg, total, curr, meter);
|
|
}
|
|
|
|
void pop3_result::pop3_finish(const char* dbpath)
|
|
{
|
|
test_.pop3_finish(dbpath);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
test_all::test_all(test_callback* callback)
|
|
: callback_(callback)
|
|
, ping_result_(*this)
|
|
, ns_result_(*this)
|
|
, smtp_result_(*this)
|
|
, pop3_result_(*this)
|
|
, ping_ok_(false)
|
|
, dns_ok_(false)
|
|
, smtp_ok_(false)
|
|
, pop3_ok_(false)
|
|
, pop3_recv_all_(false)
|
|
, pop3_recv_limit_(1)
|
|
, pop3_save_(false)
|
|
{
|
|
|
|
}
|
|
|
|
test_all::~test_all()
|
|
{
|
|
|
|
}
|
|
|
|
void test_all::start()
|
|
{
|
|
acl::rpc_request* req;
|
|
|
|
// 启动 PING 过程
|
|
req = new ping(ip_file_.c_str(), &ping_result_,
|
|
ping_npkt_, ping_delay_, ping_timeout_, ping_size_);
|
|
rpc_manager::get_instance().fork(req);
|
|
|
|
// 启动 DNS 查询过程
|
|
req = new nslookup(domain_file_.c_str(), &ns_result_,
|
|
dns_ip_.c_str(), dns_port_, dns_timeout_);
|
|
rpc_manager::get_instance().fork(req);
|
|
|
|
// 启动邮件发送过程
|
|
smtp_client* smtp = new smtp_client();
|
|
(*smtp).set_callback(&smtp_result_)
|
|
.add_file(attach_.c_str())
|
|
.set_smtp(smtp_addr_.c_str(), smtp_port_)
|
|
.set_conn_timeout(conn_timeout_)
|
|
.set_rw_timeout(rw_timeout_)
|
|
.set_account(mail_user_.c_str())
|
|
.set_passwd(mail_pass_.c_str())
|
|
.set_from(mail_user_.c_str())
|
|
.set_subject("邮件发送过程测试!")
|
|
.add_to(recipients_.c_str());
|
|
rpc_manager::get_instance().fork(smtp);
|
|
|
|
// 启动邮件接收过程
|
|
pop3_client* pop3 = new pop3_client();
|
|
(*pop3).set_callback(&pop3_result_)
|
|
.set_pop3(pop3_addr_.c_str(), pop3_port_)
|
|
.set_conn_timeout(conn_timeout_)
|
|
.set_rw_timeout(rw_timeout_)
|
|
.set_account(mail_user_.c_str())
|
|
.set_passwd(mail_pass_.c_str())
|
|
.set_recv_count(pop3_recv_all_ ? -1 : (int) pop3_recv_limit_)
|
|
.set_recv_save(pop3_save_);
|
|
rpc_manager::get_instance().fork(pop3);
|
|
}
|
|
|
|
void test_all::check_finish()
|
|
{
|
|
if (ping_ok_ && dns_ok_ && smtp_ok_ && pop3_ok_)
|
|
{
|
|
callback_->test_finish();
|
|
delete this;
|
|
}
|
|
}
|
|
|
|
void test_all::ping_report(size_t total, size_t curr, size_t nerr)
|
|
{
|
|
unsigned nstep;
|
|
if (total > 0)
|
|
nstep = (int) ((curr * 100) / total);
|
|
else
|
|
nstep = 0;
|
|
|
|
acl::string msg;
|
|
msg.format("ping 过程 %d/%d; failed: %d", curr, total, nerr);
|
|
callback_->test_report(msg.c_str(), nstep);
|
|
}
|
|
|
|
void test_all::ping_finish(const char* dbpath)
|
|
{
|
|
callback_->test_store(dbpath);
|
|
ping_ok_ = true;
|
|
check_finish();
|
|
}
|
|
|
|
void test_all::nslookup_report(size_t total, size_t curr)
|
|
{
|
|
unsigned nstep;
|
|
if (total > 0)
|
|
nstep = (unsigned) ((curr * 100) / total);
|
|
else
|
|
nstep;
|
|
|
|
acl::string msg;
|
|
msg.format("共 %d 个域名, 完成 %d 个域名", total, curr);
|
|
callback_->test_report(msg.c_str(), nstep);
|
|
}
|
|
|
|
void test_all::nslookup_finish(const char* dbpath)
|
|
{
|
|
callback_->test_store(dbpath);
|
|
dns_ok_ = true;
|
|
check_finish();
|
|
}
|
|
|
|
void test_all::smtp_report(const char* msg, size_t total,
|
|
size_t curr, const SMTP_METER& meter)
|
|
{
|
|
unsigned nstep;
|
|
|
|
if (total > 0)
|
|
nstep = (int) ((curr * 100) / total);
|
|
else
|
|
nstep = 0;
|
|
callback_->test_report(msg, nstep);
|
|
}
|
|
|
|
void test_all::smtp_finish(const char* dbpath)
|
|
{
|
|
callback_->test_store(dbpath);
|
|
smtp_ok_ = true;
|
|
check_finish();
|
|
}
|
|
|
|
void test_all::pop3_report(const char* msg, size_t total,
|
|
size_t curr, const POP3_METER& meter)
|
|
{
|
|
unsigned nstep;
|
|
|
|
if (total > 0)
|
|
nstep = (int) ((curr * 100) / total);
|
|
else
|
|
nstep = 0;
|
|
callback_->test_report(msg, nstep);
|
|
}
|
|
|
|
void test_all::pop3_finish(const char* dbpath)
|
|
{
|
|
callback_->test_store(dbpath);
|
|
pop3_ok_ = true;
|
|
check_finish();
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|