Add check_proxy benchmark.
GitOrigin-RevId: 36ec86e51eab1f94d96a135b19c808ee83daa3e2
This commit is contained in:
parent
bcacb2c31c
commit
ec3d9b7b3c
@ -40,6 +40,9 @@ target_link_libraries(bench_tddb PRIVATE tdcore tddb tdutils)
|
|||||||
add_executable(bench_misc bench_misc.cpp)
|
add_executable(bench_misc bench_misc.cpp)
|
||||||
target_link_libraries(bench_misc PRIVATE tdcore tdutils)
|
target_link_libraries(bench_misc PRIVATE tdcore tdutils)
|
||||||
|
|
||||||
|
add_executable(check_proxy check_proxy.cpp)
|
||||||
|
target_link_libraries(check_proxy PRIVATE tdclient tdcore)
|
||||||
|
|
||||||
add_executable(check_tls check_tls.cpp)
|
add_executable(check_tls check_tls.cpp)
|
||||||
target_link_libraries(check_tls PRIVATE tdutils)
|
target_link_libraries(check_tls PRIVATE tdutils)
|
||||||
|
|
||||||
|
91
benchmark/check_proxy.cpp
Normal file
91
benchmark/check_proxy.cpp
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
//
|
||||||
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2019
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
//
|
||||||
|
#include "td/telegram/Client.h"
|
||||||
|
|
||||||
|
#include "td/utils/common.h"
|
||||||
|
#include "td/utils/logging.h"
|
||||||
|
#include "td/utils/misc.h"
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
static void usage() {
|
||||||
|
td::TsCerr() << "Tests specified MTProto-proxy; exits with code 0 on success.\n";
|
||||||
|
td::TsCerr() << "Usage:\n";
|
||||||
|
td::TsCerr() << "check_proxy [-v<N>] [-h] server:port:secret\n";
|
||||||
|
std::exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
int new_verbosity_level = VERBOSITY_NAME(FATAL);
|
||||||
|
td::string server;
|
||||||
|
td::int32 port = 0;
|
||||||
|
td::string secret;
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
td::string arg(argv[i]);
|
||||||
|
if (arg.substr(0, 2) == "-v") {
|
||||||
|
if (arg.size() == 2 && i + 1 < argc) {
|
||||||
|
arg = argv[++i];
|
||||||
|
} else {
|
||||||
|
arg = arg.substr(2);
|
||||||
|
}
|
||||||
|
int new_verbosity = 1;
|
||||||
|
while (arg[0] == 'v') {
|
||||||
|
new_verbosity++;
|
||||||
|
arg = arg.substr(1);
|
||||||
|
}
|
||||||
|
if (!arg.empty()) {
|
||||||
|
new_verbosity += td::to_integer<int>(arg) - (new_verbosity == 1);
|
||||||
|
}
|
||||||
|
new_verbosity_level = VERBOSITY_NAME(FATAL) + new_verbosity;
|
||||||
|
} else if (arg == "-h" || arg == "--help") {
|
||||||
|
usage();
|
||||||
|
} else {
|
||||||
|
auto secret_pos = arg.rfind(':');
|
||||||
|
if (secret_pos == td::string::npos) {
|
||||||
|
td::TsCerr() << (PSLICE() << "Error: failed to find proxy port and secret in \"" << arg << "\"\n");
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
secret = arg.substr(secret_pos + 1);
|
||||||
|
auto port_pos = arg.substr(0, secret_pos).rfind(':');
|
||||||
|
if (port_pos == td::string::npos) {
|
||||||
|
td::TsCerr() << (PSLICE() << "Error: failed to find proxy secret in \"" << arg << "\"\n");
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
auto r_port = td::to_integer_safe<td::int32>(arg.substr(port_pos + 1, secret_pos - port_pos - 1));
|
||||||
|
if (r_port.is_error()) {
|
||||||
|
td::TsCerr() << (PSLICE() << "Error: failed to parse proxy port in \"" << arg << "\"\n");
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
port = r_port.move_as_ok();
|
||||||
|
server = arg.substr(0, port_pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server.empty() || port <= 0 || port > 65536 || secret.empty()) {
|
||||||
|
td::TsCerr() << "Error: proxy address to check is not specified\n";
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
SET_VERBOSITY_LEVEL(new_verbosity_level);
|
||||||
|
|
||||||
|
td::Client client;
|
||||||
|
client.send({1, td::td_api::make_object<td::td_api::testProxy>(
|
||||||
|
server, port, td::td_api::make_object<td::td_api::proxyTypeMtproto>(secret))});
|
||||||
|
while (true) {
|
||||||
|
auto response = client.receive(100.0);
|
||||||
|
if (response.id == 1) {
|
||||||
|
if (response.object->get_id() == td::td_api::error::ID) {
|
||||||
|
LOG(ERROR) << to_string(response.object);
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
LOG(ERROR) << "Success!";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user