def test_malformed_experiment(self): fs = FileStore(self.test_root) exp_0 = fs.get_experiment(FileStore.DEFAULT_EXPERIMENT_ID) assert exp_0.experiment_id == FileStore.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(FileStore.DEFAULT_EXPERIMENT_ID) assert e.message.contains("does not exist") assert len(fs.list_experiments(ViewType.ALL)) == experiments - 1
def test_list_experiments_paginated(self): fs = FileStore(self.test_root) for _ in range(10): fs.create_experiment(random_str(12)) exps1 = fs.list_experiments(max_results=4, page_token=None) self.assertEqual(len(exps1), 4) self.assertIsNotNone(exps1.token) exps2 = fs.list_experiments(max_results=4, page_token=None) self.assertEqual(len(exps2), 4) self.assertIsNotNone(exps2.token) self.assertNotEqual(exps1, exps2) exps3 = fs.list_experiments(max_results=500, page_token=exps2.token) self.assertLessEqual(len(exps3), 500) if len(exps3) < 500: self.assertIsNone(exps3.token)
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, FileStore.DEFAULT_EXPERIMENT_ID)
def test_mismatching_experiment_id(self): fs = FileStore(self.test_root) exp_0 = fs.get_experiment(FileStore.DEFAULT_EXPERIMENT_ID) assert exp_0.experiment_id == FileStore.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(FileStore.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, LifecycleStage.DELETED) # 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, LifecycleStage.ACTIVE)