def test_cant_delete_build_target_if_not_reach_delete_time( self, ClientSession, create_builder, dbg ): module_build_2 = models.ModuleBuild.get_by_id(db_session, 2) # Only module build 1's build target should be deleted. module_build_2.koji_tag = "module-tag1" module_build_2.state = models.BUILD_STATES["done"] # Ensure to exceed the koji_target_delete_time easily later for deletion module_build_2.time_completed = datetime.utcnow() - timedelta(minutes=5) db_session.commit() db_session.refresh(module_build_2) koji_session = ClientSession.return_value # No created module build has any of these tags. koji_session.getBuildTargets.return_value = [ {"id": 1, "dest_tag_name": module_build_2.koji_tag, "name": module_build_2.koji_tag} ] with patch.object(conf, "koji_tag_prefixes", new=["module"]): # Use default koji_target_delete_time in config. That time is long # enough for test. producer.delete_old_koji_targets() koji_session.deleteBuildTarget.assert_not_called()
def test_only_delete_build_target_with_allowed_koji_tag_prefix( self, ClientSession, create_builder, dbg ): module_build_2 = models.ModuleBuild.get_by_id(db_session, 2) # Only module build 1's build target should be deleted. module_build_2.koji_tag = "module-tag1" module_build_2.state = models.BUILD_STATES["done"] # Ensure to exceed the koji_target_delete_time easily later for deletion module_build_2.time_completed = datetime.utcnow() - timedelta(hours=24) module_build_3 = models.ModuleBuild.get_by_id(db_session, 3) module_build_3.koji_tag = "f28" db_session.commit() db_session.refresh(module_build_2) db_session.refresh(module_build_3) koji_session = ClientSession.return_value # No created module build has any of these tags. koji_session.getBuildTargets.return_value = [ {"id": 1, "dest_tag_name": module_build_2.koji_tag, "name": module_build_2.koji_tag}, {"id": 2, "dest_tag_name": module_build_3.koji_tag, "name": module_build_3.koji_tag}, ] with patch.object(conf, "koji_tag_prefixes", new=["module", "another-prefix"]): with patch.object(conf, "koji_target_delete_time", new=60): producer.delete_old_koji_targets() koji_session.deleteBuildTarget.assert_called_once_with(1) koji_session.krb_login.assert_called_once()
def test_old_build_targets_are_not_associated_with_any_module_builds( self, ClientSession, create_builder, dbg ): koji_session = ClientSession.return_value # No created module build has any of these tags. koji_session.getBuildTargets.return_value = [ {"dest_tag_name": "module-xxx-1"}, {"dest_tag_name": "module-yyy-2"}, ] producer.delete_old_koji_targets() koji_session.deleteBuildTarget.assert_not_called()
def test_dont_delete_base_module_build_target( self, ClientSession, create_builder, dbg ): module_build = models.ModuleBuild.get_by_id(db_session, 3) koji_session = ClientSession.return_value # No created module build has any of these tags. koji_session.getBuildTargets.return_value = [{"dest_tag_name": module_build.koji_tag}] # If module build's name is one of base module names, build target # should not be deleted. with patch.object(conf, "base_module_names", new=[module_build.name]): producer.delete_old_koji_targets() koji_session.deleteBuildTarget.assert_not_called()
def test_dont_delete_build_target_for_unfinished_module_builds( self, ClientSession, create_builder, dbg ): module_build = models.ModuleBuild.get_by_id(db_session, 3) koji_session = ClientSession.return_value # No created module build has any of these tags. koji_session.getBuildTargets.return_value = [{"dest_tag_name": module_build.koji_tag}] # Each time when a module build is in one of these state, build target # should not be deleted. for state in ["init", "wait", "build"]: module_build.state = state db_session.commit() producer.delete_old_koji_targets() koji_session.deleteBuildTarget.assert_not_called()