def test_malformed_experiment(self): fs = FileStore(self.test_root) exp_0 = fs.get_experiment(Experiment.DEFAULT_EXPERIMENT_ID) assert exp_0.experiment_id == Experiment.DEFAULT_EXPERIMENT_ID experiments = len(fs.list_experiments(ViewType.ALL)) # delete metadata file. path = os.path.join(self.test_root, str(exp_0.experiment_id), "meta.yaml") os.remove(path) with pytest.raises(MissingConfigException) as e: fs.get_experiment(Experiment.DEFAULT_EXPERIMENT_ID) assert e.message.contains("does not exist") assert len(fs.list_experiments(ViewType.ALL)) == experiments - 1
def test_list_experiments(self): fs = FileStore(self.test_root) for exp in fs.list_experiments(): exp_id = exp.experiment_id self.assertTrue(exp_id in self.experiments) self.assertEqual(exp.name, self.exp_data[exp_id]["name"]) self.assertEqual(exp.artifact_location, self.exp_data[exp_id]["artifact_location"])
def test_create_first_experiment(self): fs = FileStore(self.test_root) fs.list_experiments = mock.Mock(return_value=[]) fs._create_experiment_with_id = mock.Mock() fs.create_experiment(random_str(1)) fs._create_experiment_with_id.assert_called_once() experiment_id = fs._create_experiment_with_id.call_args[0][1] self.assertEqual(experiment_id, 0)
def test_mismatching_experiment_id(self): fs = FileStore(self.test_root) exp_0 = fs.get_experiment(Experiment.DEFAULT_EXPERIMENT_ID) assert exp_0.experiment_id == Experiment.DEFAULT_EXPERIMENT_ID experiments = len(fs.list_experiments(ViewType.ALL)) # mv experiment folder target = 1 path_orig = os.path.join(self.test_root, str(exp_0.experiment_id)) path_new = os.path.join(self.test_root, str(target)) os.rename(path_orig, path_new) with pytest.raises(MlflowException) as e: fs.get_experiment(Experiment.DEFAULT_EXPERIMENT_ID) assert e.message.contains("Could not find experiment with ID") with pytest.raises(MlflowException) as e: fs.get_experiment(target) assert e.message.contains("does not exist") assert len(fs.list_experiments(ViewType.ALL)) == experiments - 1
def test_delete_restore_experiment(self): fs = FileStore(self.test_root) exp_id = self.experiments[random_int(0, len(self.experiments) - 1)] exp_name = self.exp_data[exp_id]["name"] # delete it fs.delete_experiment(exp_id) self.assertTrue(exp_id not in self._extract_ids(fs.list_experiments(ViewType.ACTIVE_ONLY))) self.assertTrue(exp_id in self._extract_ids(fs.list_experiments(ViewType.DELETED_ONLY))) self.assertTrue(exp_id in self._extract_ids(fs.list_experiments(ViewType.ALL))) self.assertEqual(fs.get_experiment(exp_id).lifecycle_stage, Experiment.DELETED_LIFECYCLE) # restore it fs.restore_experiment(exp_id) restored_1 = fs.get_experiment(exp_id) self.assertEqual(restored_1.experiment_id, exp_id) self.assertEqual(restored_1.name, exp_name) restored_2 = fs.get_experiment_by_name(exp_name) self.assertEqual(restored_2.experiment_id, exp_id) self.assertEqual(restored_2.name, exp_name) self.assertTrue(exp_id in self._extract_ids(fs.list_experiments(ViewType.ACTIVE_ONLY))) self.assertTrue(exp_id not in self._extract_ids(fs.list_experiments(ViewType.DELETED_ONLY))) self.assertTrue(exp_id in self._extract_ids(fs.list_experiments(ViewType.ALL))) self.assertEqual(fs.get_experiment(exp_id).lifecycle_stage, Experiment.ACTIVE_LIFECYCLE)