Add dc_id and timeout parameters to testProxy.

GitOrigin-RevId: 399efb78e2c82d8ef6f6b854f572e0a6b6a90336
This commit is contained in:
levlam 2019-09-23 04:13:42 +03:00
parent 5cca461115
commit 82892f577d
5 changed files with 40 additions and 9 deletions

View File

@ -17,6 +17,10 @@ static void usage() {
td::TsCerr() << "Tests specified MTProto-proxy; exits with code 0 on success.\n"; td::TsCerr() << "Tests specified MTProto-proxy; exits with code 0 on success.\n";
td::TsCerr() << "Usage:\n"; td::TsCerr() << "Usage:\n";
td::TsCerr() << "check_proxy [-v<N>] [-h] server:port:secret\n"; td::TsCerr() << "check_proxy [-v<N>] [-h] server:port:secret\n";
td::TsCerr() << " -v<N>\tSet verbosity level to N\n";
td::TsCerr() << " -h/--help\tDisplay this information\n";
td::TsCerr() << " -d/--dc-id\tIdentifier of a datacenter, to which try to connect (default is 2)\n";
td::TsCerr() << " -t/--timeout\tMaximum overall timeout for the request (default is 10 seconds)\n";
std::exit(2); std::exit(2);
} }
@ -26,10 +30,13 @@ int main(int argc, char **argv) {
td::int32 port = 0; td::int32 port = 0;
td::string secret; td::string secret;
td::int32 dc_id = 2;
double timeout = 10.0;
for (int i = 1; i < argc; i++) { for (int i = 1; i < argc; i++) {
td::string arg(argv[i]); td::string arg(argv[i]);
if (arg.substr(0, 2) == "-v") { if (arg.substr(0, 2) == "-v") {
if (arg.size() == 2 && i + 1 < argc) { if (arg.size() == 2 && i + 1 < argc && argv[i + 1][0] != '-') {
arg = argv[++i]; arg = argv[++i];
} else { } else {
arg = arg.substr(2); arg = arg.substr(2);
@ -43,7 +50,19 @@ int main(int argc, char **argv) {
new_verbosity += td::to_integer<int>(arg) - (new_verbosity == 1); new_verbosity += td::to_integer<int>(arg) - (new_verbosity == 1);
} }
new_verbosity_level = VERBOSITY_NAME(FATAL) + new_verbosity; new_verbosity_level = VERBOSITY_NAME(FATAL) + new_verbosity;
} else if (arg == "-h" || arg == "--help") { } else if (arg == "-t" || arg == "--timeout") {
if (i + 1 == argc) {
td::TsCerr() << "Value is required after " << arg;
usage();
}
timeout = td::to_double(std::string(argv[++i]));
} else if (arg == "-d" || arg == "--dc_id") {
if (i + 1 == argc) {
td::TsCerr() << "Value is required after " << arg;
usage();
}
dc_id = td::to_integer<td::int32>(std::string(argv[++i]));
} else if (arg[0] == '-') {
usage(); usage();
} else { } else {
auto secret_pos = arg.rfind(':'); auto secret_pos = arg.rfind(':');
@ -76,7 +95,7 @@ int main(int argc, char **argv) {
td::Client client; td::Client client;
client.send({1, td::td_api::make_object<td::td_api::testProxy>( client.send({1, td::td_api::make_object<td::td_api::testProxy>(
server, port, td::td_api::make_object<td::td_api::proxyTypeMtproto>(secret))}); server, port, td::td_api::make_object<td::td_api::proxyTypeMtproto>(secret), dc_id, timeout)});
while (true) { while (true) {
auto response = client.receive(100.0); auto response = client.receive(100.0);
if (response.id == 1) { if (response.id == 1) {

View File

@ -4040,7 +4040,8 @@ testSquareInt x:int32 = TestInt;
//@description Sends a simple network request to the Telegram servers; for testing only. Can be called before authorization //@description Sends a simple network request to the Telegram servers; for testing only. Can be called before authorization
testNetwork = Ok; testNetwork = Ok;
//@description Sends a simple network request to the Telegram servers via proxy; for testing only. Can be called before authorization @server Proxy server IP address @port Proxy server port @type Proxy type //@description Sends a simple network request to the Telegram servers via proxy; for testing only. Can be called before authorization @server Proxy server IP address @port Proxy server port @type Proxy type
testProxy server:string port:int32 type:ProxyType = Ok; //@dc_id Identifier of a datacenter, with which to test connection @timeout Maximum overall timeout for the request
testProxy server:string port:int32 type:ProxyType dc_id:int32 timeout:double = Ok;
//@description Forces an updates.getDifference call to the Telegram servers; for testing only //@description Forces an updates.getDifference call to the Telegram servers; for testing only
testGetDifference = Ok; testGetDifference = Ok;
//@description Does nothing and ensures that the Update object is used; for testing only. This is an offline method. Can be called before authorization //@description Does nothing and ensures that the Update object is used; for testing only. This is an offline method. Can be called before authorization

Binary file not shown.

View File

@ -552,7 +552,8 @@ class TestQuery : public Td::ResultHandler {
}; };
class TestProxyRequest : public RequestOnceActor { class TestProxyRequest : public RequestOnceActor {
int16 dc_id_ = 2; int16 dc_id_;
double timeout_;
Proxy proxy_; Proxy proxy_;
ActorOwn<> child_; ActorOwn<> child_;
Promise<> promise_; Promise<> promise_;
@ -562,6 +563,8 @@ class TestProxyRequest : public RequestOnceActor {
} }
void do_run(Promise<Unit> &&promise) override { void do_run(Promise<Unit> &&promise) override {
set_timeout_in(timeout_);
promise_ = std::move(promise); promise_ = std::move(promise);
IPAddress ip; IPAddress ip;
auto status = ip.init_host_port(proxy_.server(), proxy_.port()); auto status = ip.init_host_port(proxy_.server(), proxy_.port());
@ -641,9 +644,17 @@ class TestProxyRequest : public RequestOnceActor {
promise_.set_value(Unit()); promise_.set_value(Unit());
} }
void timeout_expired() override {
send_error(Status::Error(400, "Timeout expired"));
stop();
}
public: public:
TestProxyRequest(ActorShared<Td> td, uint64 request_id, Proxy proxy) TestProxyRequest(ActorShared<Td> td, uint64 request_id, Proxy proxy, int32 dc_id, double timeout)
: RequestOnceActor(std::move(td), request_id), proxy_(std::move(proxy)) { : RequestOnceActor(std::move(td), request_id)
, proxy_(std::move(proxy))
, dc_id_(static_cast<int16>(dc_id))
, timeout_(timeout) {
} }
}; };
@ -7707,7 +7718,7 @@ void Td::on_request(uint64 id, td_api::testProxy &request) {
if (r_proxy.is_error()) { if (r_proxy.is_error()) {
return send_closure(actor_id(this), &Td::send_error, id, r_proxy.move_as_error()); return send_closure(actor_id(this), &Td::send_error, id, r_proxy.move_as_error());
} }
CREATE_REQUEST(TestProxyRequest, r_proxy.move_as_ok()); CREATE_REQUEST(TestProxyRequest, r_proxy.move_as_ok(), request.dc_id_, request.timeout_);
} }
void Td::on_request(uint64 id, const td_api::testGetDifference &request) { void Td::on_request(uint64 id, const td_api::testGetDifference &request) {

View File

@ -3646,7 +3646,7 @@ class CliClient final : public Actor {
send_request( send_request(
td_api::make_object<td_api::editProxy>(as_proxy_id(proxy_id), server, port_int, enable, std::move(type))); td_api::make_object<td_api::editProxy>(as_proxy_id(proxy_id), server, port_int, enable, std::move(type)));
} else if (op == "tproxy") { } else if (op == "tproxy") {
send_request(td_api::make_object<td_api::testProxy>(server, port_int, std::move(type))); send_request(td_api::make_object<td_api::testProxy>(server, port_int, std::move(type), 2, 10.0));
} else { } else {
send_request(td_api::make_object<td_api::addProxy>(server, port_int, enable, std::move(type))); send_request(td_api::make_object<td_api::addProxy>(server, port_int, enable, std::move(type)));
} }