Skip to content

Commit 1f25d30

Browse files
committed
editoast: fix db connections pool size
1 parent 76182fe commit 1f25d30

File tree

7 files changed

+39
-61
lines changed

7 files changed

+39
-61
lines changed

editoast/README.md

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ $ cargo run -- runserver
3030

3131
```sh
3232
# limit threads to avoid test errors with database connections
33-
export RUST_TEST_THREADS=2
3433
cargo test
3534
```
3635

editoast/src/client/postgres_config.rs

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ pub struct PostgresConfig {
2020
#[derivative(Default(value = "5432"))]
2121
#[clap(long, env, default_value_t = 5432)]
2222
pub psql_port: u16,
23+
#[derivative(Default(value = "32"))]
24+
#[clap(long, env, default_value_t = 32)]
25+
pub pool_size: u16,
2326
}
2427

2528
impl PostgresConfig {

editoast/src/main.rs

+3
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ async fn run() -> Result<(), Box<dyn Error + Send + Sync>> {
5858
Commands::ImportRailjson(args) => import_railjson(args, pg_config),
5959
}
6060
}
61+
/// Create a rocket server given the config
6162
pub fn create_server(
6263
runserver_config: &RunserverArgs,
6364
pg_config: &PostgresConfig,
@@ -68,6 +69,7 @@ pub fn create_server(
6869
.merge(("port", runserver_config.port))
6970
.merge(("address", runserver_config.address.clone()))
7071
.merge(("databases.postgres.url", pg_config.url()))
72+
.merge(("databases.postgres.pool_size", pg_config.pool_size))
7173
.merge(("limits.json", 250 * 1024 * 1024)) // Set limits to 250MiB
7274
;
7375

@@ -98,6 +100,7 @@ pub fn create_server(
98100
rocket
99101
}
100102

103+
/// Create and run the server
101104
async fn runserver(
102105
args: RunserverArgs,
103106
pg_config: PostgresConfig,

editoast/src/schema/signal.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub struct Signal {
3636
pub extensions: SignalExtensions,
3737
}
3838

39-
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
39+
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
4040
pub struct LogicalSignal {
4141
pub signaling_system: String,
4242
pub next_signaling_systems: Vec<String>,

editoast/src/views/infra/mod.rs

+9-29
Original file line numberDiff line numberDiff line change
@@ -247,28 +247,23 @@ async fn unlock(infra: i32, conn: DBConnection) -> ApiResult<Custom<JsonValue>>
247247

248248
#[cfg(test)]
249249
mod tests {
250-
use crate::create_server;
251250
use crate::infra::Infra;
252251
use crate::schema::operation::{Operation, RailjsonObject};
253252
use crate::schema::SwitchType;
253+
use crate::views::tests::create_test_client;
254254
use rocket::http::{ContentType, Status};
255-
use rocket::local::blocking::Client;
256255
use serde::Deserialize;
257256

258257
#[test]
259258
fn infra_list() {
260-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
261-
262-
let client = Client::tracked(rocket).expect("valid rocket instance");
259+
let client = create_test_client();
263260
let response = client.get("/infra").dispatch();
264261
assert_eq!(response.status(), Status::Ok);
265262
}
266263

267264
#[test]
268265
fn infra_create_delete() {
269-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
270-
271-
let client = Client::tracked(rocket).expect("valid rocket instance");
266+
let client = create_test_client();
272267
let create_infra_response = client
273268
.post("/infra")
274269
.header(ContentType::JSON)
@@ -289,9 +284,7 @@ mod tests {
289284

290285
#[test]
291286
fn infra_get() {
292-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
293-
294-
let client = Client::tracked(rocket).expect("valid rocket instance");
287+
let client = create_test_client();
295288
let create_infra_response = client
296289
.post("/infra")
297290
.header(ContentType::JSON)
@@ -317,8 +310,7 @@ mod tests {
317310

318311
#[test]
319312
fn infra_rename() {
320-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
321-
let client = Client::tracked(rocket).expect("valid rocket instance");
313+
let client = create_test_client();
322314
let create_infra = client
323315
.post("/infra")
324316
.header(ContentType::JSON)
@@ -342,10 +334,7 @@ mod tests {
342334

343335
#[test]
344336
fn infra_refresh() {
345-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
346-
347-
let client = Client::tracked(rocket).expect("valid rocket instance");
348-
337+
let client = create_test_client();
349338
let create_infra_response = client
350339
.post("/infra")
351340
.header(ContentType::JSON)
@@ -378,10 +367,7 @@ mod tests {
378367

379368
#[test]
380369
fn infra_refresh_force() {
381-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
382-
383-
let client = Client::tracked(rocket).expect("valid rocket instance");
384-
370+
let client = create_test_client();
385371
let create_infra = client
386372
.post("/infra")
387373
.header(ContentType::JSON)
@@ -413,10 +399,7 @@ mod tests {
413399

414400
#[test]
415401
fn infra_get_switch_types() {
416-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
417-
418-
let client = Client::tracked(rocket).expect("valid rocket instance");
419-
402+
let client = create_test_client();
420403
let create_infra = client
421404
.post("/infra")
422405
.header(ContentType::JSON)
@@ -459,10 +442,7 @@ mod tests {
459442

460443
#[test]
461444
fn infra_lock() {
462-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
463-
464-
let client = Client::tracked(rocket).expect("valid rocket instance");
465-
445+
let client = create_test_client();
466446
let create_infra = client
467447
.post("/infra")
468448
.header(ContentType::JSON)

editoast/src/views/infra/objects.rs

+10-28
Original file line numberDiff line numberDiff line change
@@ -129,25 +129,16 @@ pub async fn get_objects(
129129

130130
#[cfg(test)]
131131
mod tests {
132-
use rocket::{
133-
http::{ContentType, Status},
134-
local::blocking::Client,
135-
};
132+
use rocket::http::{ContentType, Status};
133+
134+
use crate::infra::Infra;
135+
use crate::schema::operation::{Operation, RailjsonObject};
136+
use crate::schema::SwitchType;
137+
use crate::views::tests::create_test_client;
136138

137-
use crate::{
138-
create_server,
139-
infra::Infra,
140-
schema::{
141-
operation::{Operation, RailjsonObject},
142-
SwitchType,
143-
},
144-
};
145139
#[test]
146140
fn check_invalid_ids() {
147-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
148-
149-
let client = Client::tracked(rocket).expect("valid rocket instance");
150-
141+
let client = create_test_client();
151142
let create_infra = client
152143
.post("/infra")
153144
.header(ContentType::JSON)
@@ -167,10 +158,7 @@ mod tests {
167158
}
168159
#[test]
169160
fn get_objects_no_ids() {
170-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
171-
172-
let client = Client::tracked(rocket).expect("valid rocket instance");
173-
161+
let client = create_test_client();
174162
let create_infra = client
175163
.post("/infra")
176164
.header(ContentType::JSON)
@@ -191,10 +179,7 @@ mod tests {
191179

192180
#[test]
193181
fn get_objects_duplicate_ids() {
194-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
195-
196-
let client = Client::tracked(rocket).expect("valid rocket instance");
197-
182+
let client = create_test_client();
198183
let create_infra = client
199184
.post("/infra")
200185
.header(ContentType::JSON)
@@ -215,10 +200,7 @@ mod tests {
215200

216201
#[test]
217202
fn get_switch_types() {
218-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
219-
220-
let client = Client::tracked(rocket).expect("valid rocket instance");
221-
203+
let client = create_test_client();
222204
let create_infra = client
223205
.post("/infra")
224206
.header(ContentType::JSON)

editoast/src/views/mod.rs

+13-2
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,25 @@ pub async fn health(conn: DBConnection) -> &'static str {
2222

2323
#[cfg(test)]
2424
mod tests {
25+
use crate::client::PostgresConfig;
2526
use crate::create_server;
2627
use rocket::http::Status;
2728
use rocket::local::blocking::Client;
2829

30+
/// Create a test editoast client
31+
/// This client create a single new connection to the database
32+
pub fn create_test_client() -> Client {
33+
let pg_config = PostgresConfig {
34+
pool_size: 1,
35+
..Default::default()
36+
};
37+
let rocket = create_server(&Default::default(), &pg_config, Default::default());
38+
Client::tracked(rocket).expect("valid rocket instance")
39+
}
40+
2941
#[test]
3042
fn health() {
31-
let rocket = create_server(&Default::default(), &Default::default(), Default::default());
32-
let client = Client::tracked(rocket).expect("valid rocket instance");
43+
let client = create_test_client();
3344
let response = client.get("/health").dispatch();
3445
assert_eq!(response.status(), Status::Ok);
3546
}

0 commit comments

Comments
 (0)