def test_easter_egg(self) -> None: self.client_mock.hello.return_value = "Hello world" with labby_config(LABBY_CONFIG): (rc, stdout, _stderr) = self.main(["hello"]) self.client_mock.hello.assert_called_once_with() self.assertEqual(rc, 0) self.assertEqual(stdout, "Hello world\n")
def test_run_sequence(self) -> None: with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["run", "sequence/test.yml"]) self.client_mock.run_sequence.assert_called_once_with("sequence/test.yml") self.assertEqual(rc, 0) self.assertEqual(stdout, "") self.assertEqual(stderr, "")
def test_experiment_status_without_any_experiments_running(self) -> None: self.client_mock.experiment_status.return_value = ExperimentStatusResponse( sequence_status=None, ) with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["status"]) self.client_mock.experiment_status.assert_called_once_with() self.assertEqual(rc, 0) self.assertEqual(stdout, "There are no experiments running.\n")
def test_invalid_device_info(self) -> None: self.client_mock.device_info.return_value = DeviceInfoResponse( device_type=None, is_connected=False) with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["device-info", "foobar"]) self.client_mock.device_info.assert_called_once_with("foobar") self.assertEqual(rc, 1) self.assertIn("[x] Unknown device foobar", stdout)
def test_run_without_sequence_file(self) -> None: with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["run"]) self.assertEqual(rc, 2) self.assertTrue("usage: labby" in stderr) self.assertTrue( "labby run: error: the following arguments are required:" + " sequence_filename\n" in stderr)
def test_list_devices(self) -> None: self.client_mock.list_devices.return_value = ListDevicesResponse( devices=[DeviceStatus(name="virtual-power-supply", is_available=True)] ) with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["devices"]) self.assertEqual(rc, 0) self.assertIn("[+] virtual-power-supply", stdout)
def test_list_unavailable_devices(self) -> None: self.client_mock.list_devices.return_value = ListDevicesResponse( devices=[ DeviceStatus( name="broken-power-supply", is_available=False, error_type="Unavailable", error_message="Device is unavailable", ) ]) with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["devices"]) self.assertEqual(rc, 0) self.assertIn("[x] broken-power-supply", stdout)
def test_device_that_cannot_be_opened(self) -> None: self.client_mock.device_info.return_value = DeviceInfoResponse( device_type=DeviceType.POWER_SUPPLY, is_connected=False, error_type="Unavailable", error_message="Unavailable device", ) with patch("labby.hw.virtual.power_supply.PowerSupply.open", side_effect=Exception): with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["device-info", "virtual-power-supply"]) self.client_mock.device_info.assert_called_once_with( "virtual-power-supply") self.assertEqual(rc, 0) self.assertIn("Connection [x] Error", stdout)
def test_available_device_info(self) -> None: self.client_mock.device_info.return_value = DeviceInfoResponse( device_type=DeviceType.POWER_SUPPLY, is_connected=True, power_supply_info=PowerSupplyInfo( is_output_on=False, mode=PowerSupplyMode.CONSTANT_VOLTAGE, actual_current=0.0, actual_voltage=0.0, target_current=0.0, target_voltage=0.0, ), ) with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["device-info", "virtual-power-supply"]) self.client_mock.device_info.assert_called_once_with("virtual-power-supply") self.assertEqual(rc, 0) self.assertIn("Connection [+] OK", stdout)
def test_experiment_status(self) -> None: self.client_mock.experiment_status.return_value = ExperimentStatusResponse( sequence_status=ExperimentSequenceStatus(experiments=[ ExperimentStatus(name="exp001", state=ExperimentState.FINISHED, progress=1.0), ExperimentStatus(name="exp002", state=ExperimentState.RUNNING, progress=0.25), ExperimentStatus(name="exp003", state=ExperimentState.NOT_STARTED, progress=0.0), ]), ) with labby_config(LABBY_CONFIG): (rc, stdout, stderr) = self.main(["status"]) self.client_mock.experiment_status.assert_called_once_with() self.assertEqual(rc, 0) self.assertIn("[+] exp001", stdout) self.assertIn("▶ exp002 (25%)", stdout) self.assertIn(" exp003", stdout)
def test_server_stop(self) -> None: with labby_config(LABBY_CONFIG): (rc, stdout, _stderr) = self.main(["server", "stop"]) self.assertEqual(rc, 0)
def test_server_status_timeout(self) -> None: self.client_mock.hello.side_effect = Timeout("Shits broken yo", 42) with labby_config(LABBY_CONFIG): (rc, stdout, _stderr) = self.main(["server", "status"]) self.assertIn("[x] Timeout", stdout) self.assertEqual(rc, 1)
def test_server_status_active(self) -> None: self.client_mock.hello.return_value = "Hello world" with labby_config(LABBY_CONFIG): (rc, stdout, _stderr) = self.main(["server", "status"]) self.assertIn("Active", stdout) self.assertEqual(rc, 0)
def test_server_start(self, _makedirs: MagicMock, _fork_mock: MagicMock) -> None: with labby_config(LABBY_CONFIG), patch_file_contents(".labby/pid"): (rc, stdout, _stderr) = self.main(["server", "start"]) self.assertEqual(rc, 0)