Rename to btest-rs, add LICENSE and README with full credits

- Rename package to btest-rs (Rust convention for reimplementations)
- MIT license matching the original btest-opensource license
- LICENSE explicitly credits Alex Samorukov's original work
- Comprehensive README with usage, performance numbers, and credits
- CLI --help references the original project

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Siavash Sameni
2026-03-31 12:58:04 +04:00
parent e604fdb2e7
commit d71a3a4e71
6 changed files with 227 additions and 42 deletions

View File

@@ -8,7 +8,7 @@ async fn start_test_server(port: u16, auth_user: Option<&str>, auth_pass: Option
let user = auth_user.map(String::from);
let pass = auth_pass.map(String::from);
tokio::spawn(async move {
let _ = mikrotik_btest::server::run_server(port, user, pass).await;
let _ = btest_rs::server::run_server(port, user, pass).await;
});
tokio::time::sleep(Duration::from_millis(100)).await;
}
@@ -41,9 +41,9 @@ async fn test_server_command_and_noauth() {
assert_eq!(buf, [0x01, 0x00, 0x00, 0x00]);
// CMD_DIR_TX (0x02) = server should transmit data to us
let cmd = mikrotik_btest::protocol::Command::new(
mikrotik_btest::protocol::CMD_PROTO_TCP,
mikrotik_btest::protocol::CMD_DIR_TX,
let cmd = btest_rs::protocol::Command::new(
btest_rs::protocol::CMD_PROTO_TCP,
btest_rs::protocol::CMD_DIR_TX,
);
stream.write_all(&cmd.serialize()).await.unwrap();
stream.flush().await.unwrap();
@@ -72,9 +72,9 @@ async fn test_server_auth_challenge() {
assert_eq!(buf, [0x01, 0x00, 0x00, 0x00]);
// CMD_DIR_TX = server transmits
let cmd = mikrotik_btest::protocol::Command::new(
mikrotik_btest::protocol::CMD_PROTO_TCP,
mikrotik_btest::protocol::CMD_DIR_TX,
let cmd = btest_rs::protocol::Command::new(
btest_rs::protocol::CMD_PROTO_TCP,
btest_rs::protocol::CMD_DIR_TX,
);
stream.write_all(&cmd.serialize()).await.unwrap();
stream.flush().await.unwrap();
@@ -85,7 +85,7 @@ async fn test_server_auth_challenge() {
let mut challenge = [0u8; 16];
stream.read_exact(&mut challenge).await.unwrap();
let hash = mikrotik_btest::auth::compute_auth_hash("test", &challenge);
let hash = btest_rs::auth::compute_auth_hash("test", &challenge);
let mut response = [0u8; 48];
response[0..16].copy_from_slice(&hash);
response[16..21].copy_from_slice(b"admin");
@@ -109,9 +109,9 @@ async fn test_server_auth_failure() {
let mut buf = [0u8; 4];
stream.read_exact(&mut buf).await.unwrap();
let cmd = mikrotik_btest::protocol::Command::new(
mikrotik_btest::protocol::CMD_PROTO_TCP,
mikrotik_btest::protocol::CMD_DIR_TX,
let cmd = btest_rs::protocol::Command::new(
btest_rs::protocol::CMD_PROTO_TCP,
btest_rs::protocol::CMD_DIR_TX,
);
stream.write_all(&cmd.serialize()).await.unwrap();
stream.flush().await.unwrap();
@@ -122,7 +122,7 @@ async fn test_server_auth_failure() {
let mut challenge = [0u8; 16];
stream.read_exact(&mut challenge).await.unwrap();
let hash = mikrotik_btest::auth::compute_auth_hash("wrongpassword", &challenge);
let hash = btest_rs::auth::compute_auth_hash("wrongpassword", &challenge);
let mut response = [0u8; 48];
response[0..16].copy_from_slice(&hash);
response[16..21].copy_from_slice(b"admin");
@@ -143,10 +143,10 @@ async fn test_loopback_tcp_rx() {
start_test_server(port, None, None).await;
let handle = tokio::spawn(async move {
mikrotik_btest::client::run_client(
btest_rs::client::run_client(
"127.0.0.1",
port,
mikrotik_btest::protocol::CMD_DIR_TX, // server TX = client RX
btest_rs::protocol::CMD_DIR_TX, // server TX = client RX
false,
0,
0,
@@ -167,10 +167,10 @@ async fn test_loopback_tcp_tx() {
start_test_server(port, None, None).await;
let handle = tokio::spawn(async move {
mikrotik_btest::client::run_client(
btest_rs::client::run_client(
"127.0.0.1",
port,
mikrotik_btest::protocol::CMD_DIR_RX, // server RX = client TX
btest_rs::protocol::CMD_DIR_RX, // server RX = client TX
false,
0,
0,
@@ -191,10 +191,10 @@ async fn test_loopback_tcp_both() {
start_test_server(port, None, None).await;
let handle = tokio::spawn(async move {
mikrotik_btest::client::run_client(
btest_rs::client::run_client(
"127.0.0.1",
port,
mikrotik_btest::protocol::CMD_DIR_BOTH,
btest_rs::protocol::CMD_DIR_BOTH,
false,
0,
0,
@@ -215,10 +215,10 @@ async fn test_loopback_tcp_with_auth() {
start_test_server(port, Some("admin"), Some("secret")).await;
let handle = tokio::spawn(async move {
mikrotik_btest::client::run_client(
btest_rs::client::run_client(
"127.0.0.1",
port,
mikrotik_btest::protocol::CMD_DIR_TX, // server TX = client RX
btest_rs::protocol::CMD_DIR_TX, // server TX = client RX
false,
0,
0,