use assert_cmd::Command;
use std::{net::TcpListener, time::Duration};
use tokio::process::Command as TokioCommand;
use crate::cli_cases::contains_str;
#[tokio::test]
pub async fn test_flightsql_custom_host() {
let bin = assert_cmd::cargo::cargo_bin("dft");
let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind to a random port");
let addr = listener.local_addr().unwrap();
drop(listener);
let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind to a random port");
let metrics_addr = listener.local_addr().unwrap();
drop(listener);
let _server = TokioCommand::new(bin)
.arg("serve-flightsql")
.arg("--addr")
.arg(format!("{addr}"))
.arg("--metrics-addr")
.arg(format!("{metrics_addr}"))
.kill_on_drop(true)
.spawn()
.expect("Failed to spawn the server");
tokio::time::sleep(Duration::from_secs(3)).await;
let assert = Command::cargo_bin("dft")
.unwrap()
.arg("-c")
.arg("SELECT 1")
.arg("--flightsql")
.arg("--host")
.arg(format!("http://{addr}"))
.assert()
.success();
let expected = r#"
+----------+
| Int64(1) |
+----------+
| 1 |
+----------+"#;
assert.stdout(contains_str(expected));
}