diff --git a/src/control_plane.rs b/src/control_plane.rs index b7eee6bd33..315e93d396 100644 --- a/src/control_plane.rs +++ b/src/control_plane.rs @@ -235,8 +235,8 @@ impl ComputeControlPlane { pub struct PostgresNode { _node_id: usize, - port: u16, - ip: IpAddr, + pub port: u16, + pub ip: IpAddr, pgdata: PathBuf, pg_bin_dir: PathBuf, } @@ -269,6 +269,8 @@ impl PostgresNode { if check_ok && !pg_ctl.success() { panic!("pg_ctl failed"); } + + self.safe_psql("postgres", "CREATE DATABASE regression"); } pub fn start(&self) { @@ -289,7 +291,7 @@ impl PostgresNode { } // XXX: cache that in control plane - fn whoami(&self) -> String { + pub fn whoami(&self) -> String { let output = Command::new("whoami") .output() .expect("failed to execute whoami"); @@ -330,3 +332,28 @@ impl Drop for PostgresNode { // fs::remove_dir_all(self.pgdata.clone()).unwrap(); } } + +pub fn regress_check(pg : &PostgresNode) { + + let regress_build_path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("tmp_install/build/src/test/regress"); + let regress_src_path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("vendor/postgres/src/test/regress"); + + let _regress_check = Command::new(regress_build_path.join("pg_regress")) + .args(&[ + "--bindir=''", + "--use-existing", + format!("--bindir={}", PG_BIN_DIR.to_str().unwrap()).as_str(), + format!("--dlpath={}", regress_build_path.to_str().unwrap()).as_str(), + format!("--schedule={}", regress_src_path.join("parallel_schedule").to_str().unwrap()).as_str(), + format!("--inputdir={}", regress_src_path.to_str().unwrap()).as_str(), + ]) + .env_clear() + .env("LD_LIBRARY_PATH", PG_LIB_DIR.to_str().unwrap()) + .env("PGPORT", pg.port.to_string()) + .env("PGUSER", pg.whoami()) + .env("PGHOST", pg.ip.to_string()) + .status() + .expect("pg_regress failed"); +} diff --git a/tests/test_control_plane.rs b/tests/test_control_plane.rs index e00ee02e6a..8e607b83f6 100644 --- a/tests/test_control_plane.rs +++ b/tests/test_control_plane.rs @@ -1,5 +1,4 @@ use pageserver::control_plane::ComputeControlPlane; -use pageserver::control_plane::StorageControlPlane; #[test] fn test_actions() { diff --git a/tests/test_pageserver.rs b/tests/test_pageserver.rs index 8a32ccfd5c..a232da1041 100644 --- a/tests/test_pageserver.rs +++ b/tests/test_pageserver.rs @@ -44,7 +44,30 @@ fn test_redo_cases() { // Runs pg_regress on a compute node #[test] -fn test_regress() {} +fn test_regress() { + // Allocate postgres instance, but don't start + let mut compute_cplane = ComputeControlPlane::local(); + let node = compute_cplane.new_vanilla_node(); + + // Start pageserver that reads WAL directly from that postgres + let storage_cplane = StorageControlPlane::one_page_server(node.connstr()); + let pageserver_addr = storage_cplane.page_server_addr(); + + // Configure that node to take pages from pageserver + node.append_conf("postgresql.conf", format!("\ + page_server_connstring = 'host={} port={}'\n\ + ", pageserver_addr.ip(), pageserver_addr.port()).as_str()); + + // start postgres + node.start(); + + println!("await pageserver connection..."); + sleep(Duration::from_secs(3)); + + ////////////////////////////////////////////////////////////////// + + pageserver::control_plane::regress_check(node); +} // Runs recovery with minio #[test]