mirror of
https://github.com/rwf2/Rocket.git
synced 2025-01-19 07:59:05 +00:00
1fb061496d
This commit completely overhauls Rocket's configuration systems, basing it on the new Figment library. It includes many breaking changes pertaining to configuration. They are: * "Environments" are replaced by "profiles". * 'ROCKET_PROFILE' takes the place of 'ROCKET_ENV'. * Profile names are now arbitrary, but 'debug' and 'release' are given special treatment as default profiles for the debug and release compilation profiles. * A 'default' profile now sits along-side the meta 'global' profile. * The concept of "extras" is no longer present; users can extract any values they want from the configured 'Figment'. * The 'Poolable' trait takes an '&Config'. * The 'secrets' feature is disabled by default. * It is a hard error if 'secrets' is enabled under the 'release' profile and no 'secret_key' is configured. * 'ConfigBuilder' no longer exists: all fields of 'Config' are public with public constructors for each type. * 'keep_alive' is disabled with '0', not 'false' or 'off'. * Inlined error variants into the 'Error' structure. * 'LoggingLevel' is now 'LogLevel'. * Limits can now be specified in SI units: "1 MiB". The summary of other changes are: * The default config file can be configured with 'ROCKET_CONFIG'. * HTTP/1 and HTTP/2 keep-alive configuration is restored. * 'ctrlc' is now a recognized config option. * 'serde' is now a core dependency. * TLS misconfiguration errors are improved. * Several example use '_' as the return type of '#[launch]' fns. * 'AdHoc::config()' was added for simple config extraction. * Added more documentation for using 'Limits'. * Launch information is no longer treated specially. * The configuration guide was rewritten. Resolves #852. Resolves #209. Closes #1404. Closes #652.
52 lines
1.7 KiB
Rust
52 lines
1.7 KiB
Rust
#[cfg(all(feature = "diesel_sqlite_pool", feature = "diesel_postgres_pool"))]
|
|
mod databases_tests {
|
|
use rocket_contrib::databases::{database, diesel};
|
|
|
|
#[database("foo")]
|
|
struct TempStorage(diesel::SqliteConnection);
|
|
|
|
#[database("bar")]
|
|
struct PrimaryDb(diesel::PgConnection);
|
|
}
|
|
|
|
#[cfg(all(feature = "databases", feature = "sqlite_pool"))]
|
|
#[cfg(test)]
|
|
mod rusqlite_integration_test {
|
|
use rocket_contrib::database;
|
|
use rocket_contrib::databases::rusqlite;
|
|
|
|
use rusqlite::types::ToSql;
|
|
|
|
#[database("test_db")]
|
|
struct SqliteDb(pub rusqlite::Connection);
|
|
|
|
// Test to ensure that multiple databases of the same type can be used
|
|
#[database("test_db_2")]
|
|
struct SqliteDb2(pub rusqlite::Connection);
|
|
|
|
#[rocket::async_test]
|
|
async fn test_db() {
|
|
use rocket::figment::{Figment, util::map};
|
|
|
|
let options = map!["url" => ":memory:"];
|
|
let config = Figment::from(rocket::Config::default())
|
|
.merge(("databases", map!["test_db" => &options]))
|
|
.merge(("databases", map!["test_db_2" => &options]));
|
|
|
|
let mut rocket = rocket::custom(config)
|
|
.attach(SqliteDb::fairing())
|
|
.attach(SqliteDb2::fairing());
|
|
|
|
let conn = SqliteDb::get_one(rocket.inspect().await).await
|
|
.expect("unable to get connection");
|
|
|
|
// Rusqlite's `transaction()` method takes `&mut self`; this tests that
|
|
// the &mut method can be called inside the closure passed to `run()`.
|
|
conn.run(|conn| {
|
|
let tx = conn.transaction().unwrap();
|
|
let _: i32 = tx.query_row("SELECT 1", &[] as &[&dyn ToSql], |row| row.get(0)).expect("get row");
|
|
tx.commit().expect("committed transaction");
|
|
}).await;
|
|
}
|
|
}
|