def test_restart_while_starting(self) -> None: orig_pid = self._start_fake_edenfs() # Tell the fake edenfs daemon to report its status as "starting" with self._get_thrift_client() as client: client.setOption("status", "starting") # "eden restart" should not restart if edenfs is still starting p = self._spawn_restart() p.expect_exact(f"The current edenfs daemon (pid {orig_pid}) is still starting") p.expect_exact("Use --force if you want to forcibly restart the current daemon") p.wait() self.assertEqual(p.exitstatus, 1) # "eden restart --force" should force the restart anyway p = self._spawn_restart("--force") p.expect_exact(f"The current edenfs daemon (pid {orig_pid}) is still starting") p.expect_exact("Forcing a full restart...") p.expect_exact("Starting fake edenfs daemon") p.expect(r"Started edenfs \(pid [0-9]+\)") p.expect_exact("Successfully restarted edenfs.") p.expect_exact( "Note: any programs running inside of an Eden-managed " "directory will need to cd" ) p.wait() self.assertEqual(p.exitstatus, 0)
def test_restart_sigkill(self) -> None: self._start_fake_edenfs() # Tell the fake edenfs binary to ignore attempts to stop it with self._get_thrift_client() as client: client.setOption("honor_stop", "false") # Run "eden restart". It should have to kill eden with SIGKILL during the # restart operation. # Explicitly pass in a shorter than normal shutdown timeout just to reduce the # amount of time required for the test. p = self._spawn_restart("--shutdown-timeout=1") p.expect_exact("About to perform a full restart of Eden") p.expect_exact( "Note: this will temporarily disrupt access to your Eden-managed " "repositories" ) p.expect_exact("Proceed? [y/N] ") p.sendline("y") p.expect( r"sent shutdown request, but edenfs did not exit within " r"[.0-9]+ seconds. Attempting SIGKILL." ) p.expect_exact("Starting fake edenfs daemon") p.expect(r"Started edenfs \(pid [0-9]+\)") p.expect_exact("Successfully restarted edenfs.") p.expect_exact( "Note: any programs running inside of an Eden-managed " "directory will need to cd" ) p.wait() self.assertEqual(p.exitstatus, 0)
def set_log_level(self, category: str, level: str) -> None: with self.get_thrift_client_legacy() as client: client.setOption("logging", f"{category}={level}")