Skip to content

Commit 9cab8a3

Browse files
gustavoavenafacebook-github-bot
authored andcommitted
Expose mysql test connection setup helper
Summary: ## This stack This stack is working on T223577767, i.e. logging telemetry from SQL queries to the metadata XDB. This and the next few diffs will be focused on testing. ## This diff Extract the function that sets up a MySQL test connection to the tests_lib crate, so we can reuse it when we add the first functional unit tests in `mononoke_queries.rs` (D77935148). Reviewed By: YousefSalama Differential Revision: D77932383 fbshipit-source-id: 0f8660bc07b9506af037357f9ab7dfbe4f3b1cd2
1 parent 476ca77 commit 9cab8a3

4 files changed

Lines changed: 46 additions & 35 deletions

File tree

shed/sql/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858

5959
#[cfg(test)]
6060
mod tests;
61-
6261
pub use anyhow;
6362
pub use cloned;
6463
pub use frunk::HList;

shed/sql/src/tests.rs

Lines changed: 12 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,10 @@ async fn test_visibility_modifiers_compile_with_sqlite() {
7979
#[cfg(fbcode_build)]
8080
#[cfg(test)]
8181
mod mysql {
82-
use std::sync::Arc;
8382

84-
use anyhow::Error;
8583
use anyhow::Result;
8684
use fbinit::FacebookInit;
87-
use mysql_client::ConnectionPool;
88-
use mysql_client::ConnectionPoolOptionsBuilder;
89-
use mysql_client::DbLocator;
90-
use mysql_client::InstanceRequirement;
91-
use mysql_client::MysqlCppClient;
85+
use sql_tests_lib::mysql_test_lib::setup_mysql_test_connection;
9286
use sql_tests_lib::mysql_test_lib::test_basic_read_query_telemetry;
9387
use sql_tests_lib::mysql_test_lib::test_basic_write_query_telemetry;
9488
use sql_tests_lib::mysql_test_lib::test_transaction_read_query_telemetry;
@@ -97,35 +91,19 @@ mod mysql {
9791
use sql_tests_lib::test_basic_transaction;
9892

9993
use super::*;
100-
use crate::sql_common::mysql::Connection as MysqlConnection;
101-
use crate::sql_common::mysql::ConnectionStats;
10294

10395
async fn setup_connection(fb: FacebookInit) -> Result<Connection> {
104-
let locator = DbLocator::new("xdb.dbclient_test.1", InstanceRequirement::Master)?;
105-
let client = MysqlCppClient::new(fb)?;
106-
107-
client
108-
.query_raw(
109-
&locator,
110-
"CREATE TABLE IF NOT EXISTS foo(
111-
x INT,
112-
y DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
113-
test CHAR(64),
114-
id INT AUTO_INCREMENT,
115-
PRIMARY KEY(id)
116-
)",
117-
)
118-
.await?;
119-
120-
let pool_options = ConnectionPoolOptionsBuilder::default()
121-
.pool_limit(1)
122-
.build()
123-
.map_err(Error::msg)?;
124-
let pool = ConnectionPool::new(&client, &pool_options)?.bind(locator);
125-
126-
let stats = Arc::new(ConnectionStats::new("test".to_string()));
127-
let conn = MysqlConnection::new(pool, stats);
128-
Ok(Connection::from(conn))
96+
setup_mysql_test_connection(
97+
fb,
98+
"CREATE TABLE IF NOT EXISTS foo(
99+
x INT,
100+
y DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
101+
test CHAR(64),
102+
id INT AUTO_INCREMENT,
103+
PRIMARY KEY(id)
104+
)",
105+
)
106+
.await
129107
}
130108

131109
#[fbinit::test]

shed/sql/tests_lib/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ license = "MIT OR Apache-2.0"
1414
path = "lib.rs"
1515

1616
[dependencies]
17+
anyhow = "1.0.98"
1718
chrono = { version = "0.4.41", features = ["clock", "serde", "std"], default-features = false }
19+
fbinit = { version = "0.2.0", path = "../../fbinit" }
1820
rand = { version = "0.8", features = ["small_rng"] }
1921
sql = { version = "0.1.0", path = ".." }

shed/sql/tests_lib/lib.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,24 @@ pub async fn test_query_visibility_modifiers_compile(conn: Connection) {
323323

324324
#[cfg(fbcode_build)]
325325
pub mod mysql_test_lib {
326+
use std::sync::Arc;
327+
328+
use anyhow::Error;
329+
use fbinit::FacebookInit;
330+
use mysql_client::ConnectionPool;
331+
use mysql_client::ConnectionPoolOptionsBuilder;
332+
use mysql_client::DbLocator;
333+
use mysql_client::InstanceRequirement;
334+
use mysql_client::MysqlCppClient;
326335
use sql::QueryTelemetry;
327336
use sql::anyhow::Result;
328337
use sql::anyhow::anyhow;
338+
use sql::mysql::Connection as MysqlConnection;
329339
use sql::mysql::MysqlQueryTelemetry;
340+
use sql::sql_common::mysql::ConnectionStats as MysqlConnectionStats;
330341

331342
use super::*;
343+
use crate::Connection;
332344

333345
pub async fn test_basic_read_query_telemetry(conn: Connection) -> Result<(), Error> {
334346
let (_res, opt_tel) = TestQuery4::commented_query(&conn, "comment", &1, &3).await?;
@@ -414,4 +426,24 @@ pub mod mysql_test_lib {
414426
assert_eq!(tel.write_tables().iter().collect::<Vec<_>>(), write_tables);
415427
assert!(!tel.wait_stats().is_empty());
416428
}
429+
430+
pub async fn setup_mysql_test_connection(
431+
fb: FacebookInit,
432+
table_creation_query: &str,
433+
) -> Result<Connection> {
434+
let locator = DbLocator::new("xdb.dbclient_test.1", InstanceRequirement::Master)?;
435+
let client = MysqlCppClient::new(fb)?;
436+
437+
client.query_raw(&locator, table_creation_query).await?;
438+
439+
let pool_options = ConnectionPoolOptionsBuilder::default()
440+
.pool_limit(1)
441+
.build()
442+
.map_err(Error::msg)?;
443+
let pool = ConnectionPool::new(&client, &pool_options)?.bind(locator);
444+
445+
let stats = Arc::new(MysqlConnectionStats::new("test".to_string()));
446+
let conn = MysqlConnection::new(pool, stats);
447+
Ok(Connection::from(conn))
448+
}
417449
}

0 commit comments

Comments
 (0)