diff --git a/agdb_server/src/db_pool.rs b/agdb_server/src/db_pool.rs index 1a656e6f3..050e3ff75 100644 --- a/agdb_server/src/db_pool.rs +++ b/agdb_server/src/db_pool.rs @@ -104,7 +104,7 @@ impl DbPool { for db in dbs { let (owner, db_name) = db.name.split_once('/').ok_or(ErrorCode::DbInvalid)?; - let db_path = Path::new(&config.data_dir).join(db_name); + let db_path = db_file(owner, db_name, config); std::fs::create_dir_all(db_audit_dir(owner, config))?; let server_db = ServerDb::new(&format!("{}:{}", db.db_type, db_path.to_string_lossy()))?; diff --git a/agdb_server/tests/routes/misc_routes.rs b/agdb_server/tests/routes/misc_routes.rs index 064c108d5..a3049df5b 100644 --- a/agdb_server/tests/routes/misc_routes.rs +++ b/agdb_server/tests/routes/misc_routes.rs @@ -3,6 +3,7 @@ use crate::TestServer; use crate::TestServerImpl; use crate::ADMIN; use crate::SERVER_DATA_DIR; +use agdb::QueryBuilder; use agdb_api::AgdbApi; use agdb_api::ReqwestClient; use assert_cmd::cargo::CommandCargoExt; @@ -171,3 +172,48 @@ async fn basepath_test() -> anyhow::Result<()> { Ok(()) } + +#[tokio::test] +async fn location_change_after_restart() -> anyhow::Result<()> { + let mut server = TestServerImpl::new().await?; + let mut client = AgdbApi::new(ReqwestClient::new(), &server.address); + + { + client.user_login(ADMIN, ADMIN).await?; + client.admin_user_add("user1", "userxpassword").await?; + client.user_logout().await?; + client.user_login("user1", "userxpassword").await?; + client + .db_add("user1", "mydb", agdb_api::DbType::Mapped) + .await?; + client + .db_exec( + "user1", + "mydb", + &vec![QueryBuilder::insert().nodes().count(1).query().into()], + ) + .await?; + client.user_logout().await?; + client.user_login(ADMIN, ADMIN).await?; + client.admin_shutdown().await?; + assert!(server.process.wait()?.success()); + } + + server.process = Command::cargo_bin("agdb_server")? + .current_dir(&server.dir) + .spawn()?; + wait_for_ready(&client).await?; + client.user_login("user1", "userxpassword").await?; + let results = client + .db_exec( + "user1", + "mydb", + &vec![QueryBuilder::select().ids(1).query().into()], + ) + .await?; + + assert_eq!(results.1.len(), 1); + assert_eq!(results.1[0].result, 1); + + Ok(()) +}