Skip to content

Commit 0dc6d4f

Browse files
committed
wip: trying a TestDb trait
1 parent 2eddf6d commit 0dc6d4f

4 files changed

Lines changed: 171 additions & 168 deletions

File tree

tokenserver-db-common/src/lib.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,18 @@ impl Clone for Box<dyn DbPool> {
4343
}
4444
}
4545

46+
#[cfg(debug_assertions)]
47+
pub trait Db: BaseDb + TestDb {}
48+
#[cfg(debug_assertions)]
49+
impl<T: BaseDb + TestDb> Db for T {}
50+
51+
#[cfg(not(debug_assertions))]
52+
pub trait Db: BaseDb {}
53+
#[cfg(not(debug_assertions))]
54+
impl<T: BaseDb> Db for T {}
55+
4656
#[async_trait(?Send)]
47-
pub trait Db {
57+
pub trait BaseDb {
4858
/// Return the Db instance timeout duration.
4959
fn timeout(&self) -> Option<Duration> {
5060
None
@@ -279,50 +289,44 @@ pub trait Db {
279289
created_at,
280290
})
281291
}
292+
}
282293

283-
// Internal methods used by the db tests
284-
285-
#[cfg(debug_assertions)]
294+
#[cfg(debug_assertions)]
295+
#[async_trait(?Send)]
296+
/// Internal methods used by the db tests
297+
pub trait TestDb {
286298
async fn set_user_created_at(
287299
&mut self,
288300
params: params::SetUserCreatedAt,
289301
) -> DbResult<results::SetUserCreatedAt>;
290302

291303
/// Update users replaced_at attribute based on user uid.
292-
#[cfg(debug_assertions)]
293304
async fn set_user_replaced_at(
294305
&mut self,
295306
params: params::SetUserReplacedAt,
296307
) -> DbResult<results::SetUserReplacedAt>;
297308

298309
/// Get full user object based on passed user ID.
299-
#[cfg(debug_assertions)]
300310
async fn get_user(&mut self, params: params::GetUser) -> DbResult<results::GetUser>;
301311

302312
/// Create a complete node and return insert id from node.
303-
#[cfg(debug_assertions)]
304313
async fn post_node(&mut self, params: params::PostNode) -> DbResult<results::PostNode>;
305314

306315
/// Get complete node entry based on passed id.
307-
#[cfg(debug_assertions)]
308316
async fn get_node(&mut self, params: params::GetNode) -> DbResult<results::GetNode>;
309317

310318
/// Based on Node ID, unassign node from `users`.
311-
#[cfg(debug_assertions)]
312319
async fn unassign_node(
313320
&mut self,
314321
params: params::UnassignNode,
315322
) -> DbResult<results::UnassignNode>;
316323

317324
/// Remove Node based on Node ID
318-
#[cfg(debug_assertions)]
319325
async fn remove_node(&mut self, params: params::RemoveNode) -> DbResult<results::RemoveNode>;
320326

321-
#[cfg(debug_assertions)]
322327
/// Creates new service and returns new service_id.
323328
async fn post_service(&mut self, params: params::PostService)
324329
-> DbResult<results::PostService>;
325330

326-
#[cfg(debug_assertions)]
327331
fn set_spanner_node_id(&mut self, params: params::SpannerNodeId);
328332
}

tokenserver-db/src/mock.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ use std::sync::{Arc, LazyLock, Mutex};
55
use async_trait::async_trait;
66
use syncserver_common::Metrics;
77
use syncserver_db_common::GetPoolStatus;
8+
#[cfg(debug_assertions)]
9+
use tokenserver_db_common::TestDb;
810
use tokenserver_db_common::{Db, DbError, DbPool, params, results};
911

1012
#[derive(Clone, Default)]
@@ -164,7 +166,11 @@ impl Db for MockDb {
164166
static METRICS: LazyLock<Metrics> = LazyLock::new(Metrics::noop);
165167
&METRICS
166168
}
169+
}
167170

171+
#[cfg(debug_assertions)]
172+
#[async_trait(?Send)]
173+
impl TestDb for MockDb {
168174
#[cfg(debug_assertions)]
169175
async fn set_user_created_at(
170176
&mut self,

tokenserver-mysql/src/db/db_impl.rs

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ use diesel::{
99
use diesel_async::RunQueryDsl;
1010
use http::StatusCode;
1111
use syncserver_common::Metrics;
12-
use tokenserver_db_common::{Db, DbError, DbResult, params, results};
12+
#[cfg(debug_assertions)]
13+
use tokenserver_db_common::TestDb;
14+
use tokenserver_db_common::{BaseDb, DbError, DbResult, params, results};
1315

1416
use super::TokenserverDb;
1517

1618
#[async_trait(?Send)]
17-
impl Db for TokenserverDb {
19+
impl BaseDb for TokenserverDb {
1820
async fn get_node_id(&mut self, params: params::GetNodeId) -> DbResult<results::GetNodeId> {
1921
const QUERY: &str = r#"
2022
SELECT id
@@ -375,7 +377,32 @@ impl Db for TokenserverDb {
375377
self.timeout
376378
}
377379

378-
#[cfg(debug_assertions)]
380+
async fn insert_sync15_node(&mut self, params: params::Sync15Node) -> DbResult<bool> {
381+
let query = format!(
382+
r#"
383+
INSERT IGNORE INTO nodes (service, node, available, current_load, capacity, downed, backoff)
384+
VALUES (
385+
(SELECT id FROM services WHERE service = '{}'),
386+
?, ?, 0, ?, 0, 0
387+
)
388+
"#,
389+
params::Sync15Node::SERVICE_NAME
390+
);
391+
392+
let affected_rows = diesel::sql_query(query)
393+
.bind::<Text, _>(&params.node)
394+
.bind::<Integer, _>(params.capacity)
395+
.bind::<Integer, _>(params.capacity)
396+
.execute(&mut self.conn)
397+
.await?;
398+
399+
Ok(affected_rows == 1)
400+
}
401+
}
402+
403+
#[cfg(debug_assertions)]
404+
#[async_trait(?Send)]
405+
impl TestDb for TokenserverDb {
379406
async fn set_user_created_at(
380407
&mut self,
381408
params: params::SetUserCreatedAt,
@@ -393,7 +420,6 @@ impl Db for TokenserverDb {
393420
Ok(())
394421
}
395422

396-
#[cfg(debug_assertions)]
397423
async fn set_user_replaced_at(
398424
&mut self,
399425
params: params::SetUserReplacedAt,
@@ -411,7 +437,6 @@ impl Db for TokenserverDb {
411437
Ok(())
412438
}
413439

414-
#[cfg(debug_assertions)]
415440
async fn get_user(&mut self, params: params::GetUser) -> DbResult<results::GetUser> {
416441
const QUERY: &str = r#"
417442
SELECT service, email, generation, client_state, replaced_at, nodeid, keys_changed_at
@@ -426,29 +451,6 @@ impl Db for TokenserverDb {
426451
Ok(result)
427452
}
428453

429-
async fn insert_sync15_node(&mut self, params: params::Sync15Node) -> DbResult<bool> {
430-
let query = format!(
431-
r#"
432-
INSERT IGNORE INTO nodes (service, node, available, current_load, capacity, downed, backoff)
433-
VALUES (
434-
(SELECT id FROM services WHERE service = '{}'),
435-
?, ?, 0, ?, 0, 0
436-
)
437-
"#,
438-
params::Sync15Node::SERVICE_NAME
439-
);
440-
441-
let affected_rows = diesel::sql_query(query)
442-
.bind::<Text, _>(&params.node)
443-
.bind::<Integer, _>(params.capacity)
444-
.bind::<Integer, _>(params.capacity)
445-
.execute(&mut self.conn)
446-
.await?;
447-
448-
Ok(affected_rows == 1)
449-
}
450-
451-
#[cfg(debug_assertions)]
452454
async fn post_node(&mut self, params: params::PostNode) -> DbResult<results::PostNode> {
453455
const QUERY: &str = r#"
454456
INSERT INTO nodes (service, node, available, current_load, capacity, downed, backoff)
@@ -471,7 +473,6 @@ impl Db for TokenserverDb {
471473
Ok(result)
472474
}
473475

474-
#[cfg(debug_assertions)]
475476
async fn get_node(&mut self, params: params::GetNode) -> DbResult<results::GetNode> {
476477
const QUERY: &str = r#"
477478
SELECT *
@@ -486,7 +487,6 @@ impl Db for TokenserverDb {
486487
Ok(result)
487488
}
488489

489-
#[cfg(debug_assertions)]
490490
async fn unassign_node(
491491
&mut self,
492492
params: params::UnassignNode,
@@ -507,7 +507,6 @@ impl Db for TokenserverDb {
507507
Ok(())
508508
}
509509

510-
#[cfg(debug_assertions)]
511510
async fn remove_node(&mut self, params: params::RemoveNode) -> DbResult<results::RemoveNode> {
512511
const QUERY: &str = "DELETE FROM nodes WHERE id = ?";
513512

@@ -518,7 +517,6 @@ impl Db for TokenserverDb {
518517
Ok(())
519518
}
520519

521-
#[cfg(debug_assertions)]
522520
async fn post_service(
523521
&mut self,
524522
params: params::PostService,
@@ -540,7 +538,6 @@ impl Db for TokenserverDb {
540538
Ok(result)
541539
}
542540

543-
#[cfg(debug_assertions)]
544541
fn set_spanner_node_id(&mut self, params: params::SpannerNodeId) {
545542
self.spanner_node_id = params;
546543
}

0 commit comments

Comments
 (0)