def test_plugin_version_already_installed(self, _poll_plugins): _poll_plugins.return_value = self.DATA already_installed = Plugin({'shortName': 'subversion', 'version': '1.45'}) self.assertTrue( self.J.plugins.plugin_version_already_installed(already_installed)) not_installed = Plugin({'shortName': 'subversion', 'version': '1.46'}) self.assertFalse( self.J.plugins.plugin_version_already_installed(not_installed)) latest = Plugin({'shortName': 'subversion', 'version': 'latest'}) self.assertFalse( self.J.plugins.plugin_version_already_installed(latest))
def install_plugins(self, plugin_list, restart=True, force_restart=False, wait_for_reboot=True, no_reboot_warning=False): """ Install a list of plugins and optionally restart jenkins. @param plugin_list: List of plugins (strings, Plugin objects or a mix of the two) to be installed @param restart: Boolean, restart Jenkins when required by plugin @param force_restart: Boolean, force Jenkins to restart, ignoring plugin preferences """ plugins = [ p if isinstance(p, Plugin) else Plugin(p) for p in plugin_list ] for plugin in plugins: self.install_plugin(plugin, restart=False, no_reboot_warning=True) if force_restart or (restart and self.plugins.restart_required): self.safe_restart(wait_for_reboot=wait_for_reboot) elif self.plugins.restart_required and not no_reboot_warning: warnings.warn( "System reboot is required, but automatic reboot is disabled. " "Please reboot manually.")
def test_plugin_get_by_name(self, _poll_plugins): _poll_plugins.return_value = self.DATA p = Plugin( { 'deleted': False, 'hasUpdate': True, 'downgradable': False, 'dependencies': [{}, {}, {}, {}], 'longName': 'Jenkins Subversion Plug-in', 'active': True, 'shortName': 'subversion', 'backupVersion': None, 'url': 'http://wiki.jenkins-ci.org/display/JENKINS/' 'Subversion+Plugin', 'enabled': True, 'pinned': False, 'version': '1.45', 'supportsDynamicLoad': 'MAYBE', 'bundled': True } ) plugin = self.J.get_plugins()['subversion'] self.assertEqual(p, plugin)
def test_plugin_repr(self): p = Plugin( { 'shortName': 'subversion', } ) self.assertEquals(repr(p), '<jenkinsapi.plugin.Plugin subversion>')
def test_downgrade_plugin(jenkins): plugin_name = 'amazon-ecs' plugin_version = '1.5' # This is explicitly not the latest version plugin = Plugin({'shortName': plugin_name, 'version': plugin_version}) assert isinstance(plugin, Plugin) # Need to restart when not installing the latest version jenkins.install_plugins([plugin], restart=True, wait_for_reboot=True) installed_plugin = jenkins.plugins[plugin_name] assert installed_plugin.version == '1.5' older_plugin = Plugin({'shortName': plugin_name, 'version': '1.4'}) jenkins.install_plugins([older_plugin], restart=True, wait_for_reboot=True) installed_older_plugin = jenkins.plugins[plugin_name] assert installed_older_plugin.version == '1.4'
def test_downgrade_plugin(jenkins): plugin_name = 'console-badge' plugin_version = 'latest' plugin = Plugin({'shortName': plugin_name, 'version': plugin_version}) assert isinstance(plugin, Plugin) # Need to restart when not installing the latest version jenkins.install_plugins([plugin]) installed_plugin = jenkins.plugins[plugin_name] assert installed_plugin.version == '1.1' older_plugin = Plugin({'shortName': plugin_name, 'version': '1.0'}) jenkins.install_plugins([older_plugin], restart=True, wait_for_reboot=True) installed_older_plugin = jenkins.plugins[plugin_name] assert installed_older_plugin.version == '1.0' del jenkins.plugins[plugin_name]
def install_plugins(self, plugin_list, restart=False, wait_for_reboot=False): """ Install a list of plugins and optionally restart jenkins. @param plugin_list: list of plugins to be installed @param restart: Boolean, restart jenkins after plugin installation """ plugins = [p if isinstance(p, Plugin) else Plugin(p) for p in plugin_list] for plugin in plugins: self.install_plugin(plugin) if restart and self.plugins.restart_required: self.safe_restart(wait_for_reboot=wait_for_reboot)
def test_install_delete_single_plugin_object(jenkins): plugin_name = 'simple-theme-plugin' plugin_version = 'latest' plugin = Plugin(('%s@%s') % (plugin_name, plugin_version)) assert plugin_name not in jenkins.plugins jenkins.install_plugin(plugin, restart=True, wait_for_reboot=True) assert plugin_name in jenkins.plugins # Force restart so plugin is deleted from plugin-list jenkins.delete_plugin(plugin, force_restart=True, wait_for_reboot=True) assert plugin_name not in jenkins.plugins
def test_install_multiple_plugins(jenkins): plugin_one_name = 'jenkins-cloudformation-plugin' plugin_one_version = 'latest' plugin_one = "@".join((plugin_one_name, plugin_one_version)) plugin_two = Plugin({ 'shortName': 'anything-goes-formatter', 'version': 'latest' }) assert isinstance(plugin_two, Plugin) plugin_list = [plugin_one, plugin_two] jenkins.install_plugins(plugin_list) assert plugin_one_name in jenkins.plugins assert plugin_two.shortName in jenkins.plugins
def test_install_uninstall_plugin(jenkins): plugin_name = 'suppress-stack-trace' plugin_dict = { 'shortName': plugin_name, 'version': 'latest', } jenkins.plugins[plugin_name] = Plugin(plugin_dict) assert plugin_name in jenkins.plugins plugin = jenkins.get_plugins()[plugin_name] assert isinstance(plugin, Plugin) assert plugin.shortName == plugin_name del jenkins.plugins[plugin_name] assert jenkins.plugins[plugin_name].deleted
def test_install_uninstall_plugin(jenkins): plugins = jenkins.plugins plugin_name = 'async-http-client' plugin_dict = { 'shortName': plugin_name, 'version': 'latest', } plugins[plugin_name] = Plugin(plugin_dict) assert plugin_name in plugins plugin = plugins[plugin_name] assert isinstance(plugin, Plugin) assert plugin.shortName == plugin_name del plugins[plugin_name] assert plugins[plugin_name].deleted
def _get_plugin_dependencies(self, downloaded_plugin): """ Returns a list of all dependencies for a downloaded plugin """ plugin_dependencies = [] manifest = read_manifest(downloaded_plugin) manifest_dependencies = manifest.main_section.get( 'Plugin-Dependencies') if manifest_dependencies: dependencies = manifest_dependencies.split(',') for dep in dependencies: # split plugin:version;resolution:optional entries components = dep.split(';') dep_plugin = components[0] name = dep_plugin.split(':')[0] # install latest dependency, avoids multiple # versions of the same dep plugin_dependencies.append( Plugin({'shortName': name, 'version': 'latest'})) return plugin_dependencies
def test_install_multiple_plugins(jenkins): plugin_one_name = 'keyboard-shortcuts-plugin' plugin_one_version = 'latest' plugin_one = "@".join((plugin_one_name, plugin_one_version)) plugin_two = Plugin({ 'shortName': 'emotional-jenkins-plugin', 'version': 'latest' }) assert isinstance(plugin_two, Plugin) plugin_list = [plugin_one, plugin_two] jenkins.install_plugins(plugin_list) assert plugin_one_name in jenkins.plugins assert plugin_two.shortName in jenkins.plugins del jenkins.plugins['keyboard-shortcuts-plugin'] del jenkins.plugins['emotional-jenkins-plugin']
def install_plugin(self, plugin, restart=True, force_restart=False, wait_for_reboot=True, no_reboot_warning=False): """ Install a plugin and optionally restart jenkins. @param plugin: Plugin (string or Plugin object) to be installed @param restart: Boolean, restart Jenkins when required by plugin @param force_restart: Boolean, force Jenkins to restart, ignoring plugin preferences @param no_warning: Don't show warning when restart is needed and restart parameters are set to False """ if not isinstance(plugin, Plugin): plugin = Plugin(plugin) self.plugins[plugin.shortName] = plugin if force_restart or (restart and self.plugins.restart_required): self.safe_restart(wait_for_reboot=wait_for_reboot) elif self.plugins.restart_required and not no_reboot_warning: warnings.warn( "System reboot is required, but automatic reboot is disabled. " "Please reboot manually." )
def test_install_delete_multiple_plugins_mix_string_object(jenkins): plugin_one_name = 'simple-theme-plugin' plugin_one_version = 'latest' plugin_one = ('%s@%s') % (plugin_one_name, plugin_one_version) plugin_two_name = 'docker-commons' plugin_two_version = 'latest' plugin_two = Plugin(('%s@%s') % (plugin_two_name, plugin_two_version)) assert (plugin_one_name and plugin_two_name) not in jenkins.plugins jenkins.install_plugins([plugin_one, plugin_two], restart=True, wait_for_reboot=True) assert (plugin_one_name and plugin_two_name) in jenkins.plugins # Force restart so plugins are deleted from plugin-list jenkins.delete_plugins([plugin_one_name, plugin_two], force_restart=True, wait_for_reboot=True) assert (plugin_one_name and plugin_two_name) not in jenkins.plugins
def _get_plugins(self): if 'plugins' in self._data: for p_dict in self._data["plugins"]: yield p_dict["shortName"], Plugin(p_dict)
def install_plugin(self, plugin): if not isinstance(plugin, Plugin): plugin = Plugin(plugin) self.plugins[plugin.shortName] = plugin