def _run_tavern_tests_in_dir(test_dir: str, logger: Logger, project: Project, reactor: Reactor, role=None): logger.info("Running tavern tests: {}".format(test_dir)) if not os.path.exists(test_dir): logger.info("Skipping tavern run: no tests") return False logger.info( f"Found {len(os.listdir(test_dir))} files in tavern test directory") # todo is this unique enough for each run? output_file, run_name = get_test_report_file(project, test_dir) from sys import path as syspath syspath.insert(0, test_dir) # install any requirements that my exist requirements_file = os.path.join(test_dir, "requirements.txt") if os.path.exists(requirements_file): dependency = RequirementsFile(requirements_file) install_dependencies( logger, project, dependency, reactor.pybuilder_venv, f"{prepare_logs_directory(project)}/install_tavern_pip_dependencies.log" ) extra_args = [ project.expand(prop) for prop in project.get_property(TAVERN_ADDITIONAL_ARGS, []) ] args = ["--junit-xml", f"{output_file}", test_dir] + extra_args if project.get_property("verbose"): args.append("-s") args.append("-v") os.environ['TARGET'] = project.get_property(INTEGRATION_TARGET_URL) os.environ[ENVIRONMENT] = project.get_property(ENVIRONMENT) logger.info( f"Running against: {project.get_property(INTEGRATION_TARGET_URL)} ") cache_wd = os.getcwd() try: os.chdir(test_dir) ret = pytest.main(args) finally: os.chdir(cache_wd) if role: CloudwatchLogs(project.get_property(ENVIRONMENT), project.get_property(APPLICATION), role, logger).print_latest() if ret != 0: raise BuildFailedException( f"Tavern tests failed see complete output here - {output_file}") return True
class ProjectTest (unittest.TestCase): def setUp(self): self.project = Project(basedir="/imaginary", name="Unittest") def test_should_pick_directory_name_for_project_name_when_name_is_not_given(self): try: when(os.path).basename("/imaginary").thenReturn("imaginary") project = Project(basedir="/imaginary") self.assertEquals("imaginary", project.name) verify(os.path).basename("/imaginary") finally: unstub() def test_get_property_should_return_default_value_when_property_is_not_set(self): self.assertEquals("spam", self.project.get_property("spam", "spam")) def test_get_property_should_return_property_value_when_property_is_set(self): self.project.set_property("spam", "eggs") self.assertEquals("eggs", self.project.get_property("spam", "spam")) def test_has_property_should_return_false_when_property_is_not_set(self): self.assertFalse(self.project.has_property("spam")) def test_has_property_should_return_true_when_property_is_set(self): self.project.set_property("spam", "eggs") self.assertTrue(self.project.has_property("spam")) def test_set_property_if_unset_should_set_property_when_property_is_not_set(self): self.project.set_property_if_unset("spam", "spam") self.assertEquals("spam", self.project.get_property("spam")) def test_set_property_if_unset_should_not_set_property_when_property_is_already_set(self): self.project.set_property("spam", "eggs") self.project.set_property_if_unset("spam", "spam") self.assertEquals("eggs", self.project.get_property("spam")) def test_expand_should_raise_exception_when_property_is_not_set(self): self.assertRaises( MissingPropertyException, self.project.expand, "$spam") def test_expand_should_return_expanded_string_when_property_is_set(self): self.project.set_property("spam", "eggs") self.assertEquals("eggs", self.project.expand("$spam")) def test_expand_should_return_expanded_string_when_two_properties_are_found_and_set(self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "eggs") self.assertEquals( "spam and eggs", self.project.expand("$spam and $eggs")) def test_expand_should_expand_property_with_value_being_an_property_expression(self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "$spam") self.assertEquals("spam", self.project.expand("$eggs")) def test_expand_should_raise_exception_when_first_expansion_leads_to_property_reference_and_property_is_undefined(self): self.project.set_property("eggs", "$spam") self.assertRaises( MissingPropertyException, self.project.expand, "$eggs") def test_expand_path_should_return_expanded_path(self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "eggs") self.assertEquals(os.path.join("/imaginary", "spam", "eggs"), self.project.expand_path("$spam/$eggs")) def test_expand_path_should_return_expanded_path_and_additional_parts_when_additional_parts_are_given(self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "eggs") self.assertEquals( os.path.join("/imaginary", "spam", "eggs", "foo", "bar"), self.project.expand_path("$spam/$eggs", "foo", "bar")) def test_should_raise_exception_when_getting_mandatory_propert_and_property_is_not_found(self): self.assertRaises(MissingPropertyException, self.project.get_mandatory_property, "i_dont_exist") def test_should_return_property_value_when_getting_mandatory_propert_and_property_exists(self): self.project.set_property("spam", "spam") self.assertEquals("spam", self.project.get_mandatory_property("spam")) def test_should_add_runtime_dependency_with_name_only(self): self.project.depends_on("spam") self.assertEquals(1, len(self.project.dependencies)) self.assertEquals("spam", self.project.dependencies[0].name) self.assertEquals(None, self.project.dependencies[0].version) def test_should_add_dependency_with_name_and_version(self): self.project.depends_on("spam", "0.7") self.assertEquals(1, len(self.project.dependencies)) self.assertEquals("spam", self.project.dependencies[0].name) self.assertEquals("0.7", self.project.dependencies[0].version) def test_should_add_dependency_with_name_and_version_only_once(self): self.project.depends_on("spam", "0.7") self.project.depends_on("spam", "0.7") self.assertEquals(1, len(self.project.dependencies)) self.assertEquals("spam", self.project.dependencies[0].name) self.assertEquals("0.7", self.project.dependencies[0].version)
class ProjectTest(unittest.TestCase): def setUp(self): self.project = Project(basedir="/imaginary", name="Unittest") @patch("pybuilder.core.basename", return_value="imaginary") def test_should_pick_directory_name_for_project_name_when_name_is_not_given( self, os_path_basename): project = Project(basedir="/imaginary") self.assertEqual("imaginary", project.name) os_path_basename.assert_called_with("/imaginary") def test_get_property_should_return_default_value_when_property_is_not_set( self): self.assertEqual("spam", self.project.get_property("spam", "spam")) def test_get_property_should_return_property_value_when_property_is_set( self): self.project.set_property("spam", "eggs") self.assertEqual("eggs", self.project.get_property("spam", "spam")) def test_has_property_should_return_false_when_property_is_not_set(self): self.assertFalse(self.project.has_property("spam")) def test_has_property_should_return_true_when_property_is_set(self): self.project.set_property("spam", "eggs") self.assertTrue(self.project.has_property("spam")) def test_set_property_if_unset_should_set_property_when_property_is_not_set( self): self.project.set_property_if_unset("spam", "spam") self.assertEqual("spam", self.project.get_property("spam")) def test_set_property_if_unset_should_not_set_property_when_property_is_already_set( self): self.project.set_property("spam", "eggs") self.project.set_property_if_unset("spam", "spam") self.assertEqual("eggs", self.project.get_property("spam")) def test_expand_should_raise_exception_when_property_is_not_set(self): self.assertRaises(MissingPropertyException, self.project.expand, "$spam") def test_expand_should_return_expanded_string_when_property_is_set(self): self.project.set_property("spam", "eggs") self.assertEqual("eggs", self.project.expand("$spam")) def test_expand_should_return_expanded_string_when_two_properties_are_found_and_set( self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "eggs") self.assertEqual("spam and eggs", self.project.expand("$spam and $eggs")) def test_expand_should_expand_property_with_value_being_an_property_expression( self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "$spam") self.assertEqual("spam", self.project.expand("$eggs")) def test_expand_should_raise_exception_when_first_expansion_leads_to_property_reference_and_property_is_undefined( self): self.project.set_property("eggs", "$spam") self.assertRaises(MissingPropertyException, self.project.expand, "$eggs") def test_expand_path_should_return_expanded_path(self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "eggs") self.assertEqual(np(jp(self.project.basedir, "spam", "eggs")), self.project.expand_path("$spam/$eggs")) def test_expand_path_should_return_expanded_path_and_additional_parts_when_additional_parts_are_given( self): self.project.set_property("spam", "spam") self.project.set_property("eggs", "eggs") self.assertEqual( np(jp(self.project.basedir, "spam", "eggs", "foo", "bar")), self.project.expand_path("$spam/$eggs", "foo", "bar")) def test_should_raise_exception_when_getting_mandatory_propert_and_property_is_not_found( self): self.assertRaises(MissingPropertyException, self.project.get_mandatory_property, "i_dont_exist") def test_should_return_property_value_when_getting_mandatory_propert_and_property_exists( self): self.project.set_property("spam", "spam") self.assertEqual("spam", self.project.get_mandatory_property("spam")) def test_should_add_runtime_dependency_with_name_only(self): self.project.depends_on("spam") self.assertEqual(1, len(self.project.dependencies)) self.assertEqual("spam", self.project.dependencies[0].name) self.assertEqual(None, self.project.dependencies[0].version) def test_should_add_dependency_with_name_and_version(self): self.project.depends_on("spam", "0.7") self.assertEqual(1, len(self.project.dependencies)) self.assertEqual("spam", self.project.dependencies[0].name) self.assertEqual(">=0.7", self.project.dependencies[0].version) def test_should_add_dependency_with_name_and_version_only_once(self): self.project.depends_on("spam", "0.7") self.project.depends_on("spam", "0.7") self.assertEqual(1, len(self.project.dependencies)) self.assertEqual("spam", self.project.dependencies[0].name) self.assertEqual(">=0.7", self.project.dependencies[0].version)