diff --git a/client/src/client.rs b/client/src/client.rs index 0f245cc..cbe1727 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -97,14 +97,32 @@ impl AdminClient { let _response = self.connect_to().await?.start_application(request).await?; Ok(()) } - pub async fn stop(&self, _app: String) -> anyhow::Result<()> { - todo!(); + pub async fn stop(&self, app_name: String) -> anyhow::Result<()> { + let request = pb::admin::ApplicationRequest { + app_name, + vm_name: None, + args: Vec::new(), + }; + let _response = self.connect_to().await?.stop_application(request).await?; + Ok(()) } - pub async fn pause(&self, _app: String) -> anyhow::Result<()> { - todo!(); + pub async fn pause(&self, app_name: String) -> anyhow::Result<()> { + let request = pb::admin::ApplicationRequest { + app_name, + vm_name: None, + args: Vec::new(), + }; + let _response = self.connect_to().await?.pause_application(request).await?; + Ok(()) } - pub async fn resume(&self, _app: String) -> anyhow::Result<()> { - todo!(); + pub async fn resume(&self, app_name: String) -> anyhow::Result<()> { + let request = pb::admin::ApplicationRequest { + app_name, + vm_name: None, + args: Vec::new(), + }; + let _response = self.connect_to().await?.resume_application(request).await?; + Ok(()) } pub async fn reboot(&self) -> anyhow::Result<()> { let request = pb::admin::Empty {}; diff --git a/nixos/tests/admin.nix b/nixos/tests/admin.nix index 21a9b98..d4ca70f 100644 --- a/nixos/tests/admin.nix +++ b/nixos/tests/admin.nix @@ -352,6 +352,11 @@ in print(hostvm.succeed("${cli} --addr ${nodes.adminvm.config.givc.admin.addr} --port ${nodes.adminvm.config.givc.admin.port} --cacert ${nodes.hostvm.givc.host.tls.caCertPath} --cert ${nodes.hostvm.givc.host.tls.certPath} --key ${nodes.hostvm.givc.host.tls.keyPath} ${if tls then "" else "--notls"} --name ${nodes.adminvm.config.givc.admin.name} start --vm chromium-vm foot")) wait_for_window("ghaf@appvm") + with subtest("stop application"): + appvm.succeed("pgrep foot") + print(hostvm.succeed("${cli} --addr ${nodes.adminvm.config.givc.admin.addr} --port ${nodes.adminvm.config.givc.admin.port} --cacert ${nodes.hostvm.givc.host.tls.caCertPath} --cert ${nodes.hostvm.givc.host.tls.certPath} --key ${nodes.hostvm.givc.host.tls.keyPath} ${if tls then "" else "--notls"} --name ${nodes.adminvm.config.givc.admin.name} stop foot@1.service")) + appvm.fail("pgrep foot") + with subtest("clear exit and restart"): print(hostvm.succeed("${cli} --addr ${nodes.adminvm.config.givc.admin.addr} --port ${nodes.adminvm.config.givc.admin.port} --cacert ${nodes.hostvm.givc.host.tls.caCertPath} --cert ${nodes.hostvm.givc.host.tls.certPath} --key ${nodes.hostvm.givc.host.tls.keyPath} ${if tls then "" else "--notls"} --name ${nodes.adminvm.config.givc.admin.name} start --vm chromium-vm clearexit")) time.sleep(20) # Give few seconds to application to spin up, exit, then start it again