2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-02 09:03:10 -06:00
|
|
|
Integration tests for Ruby Gem module
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2020-04-10 08:30:25 +01:00
|
|
|
import pytest
|
2023-05-17 04:19:07 -07:00
|
|
|
from tornado.httpclient import HTTPClient
|
2022-07-20 10:42:30 +01:00
|
|
|
|
2025-01-18 13:16:13 +00:00
|
|
|
import salt.utils.platform
|
2017-04-03 17:04:09 +01:00
|
|
|
from tests.support.case import ModuleCase
|
2020-04-02 20:10:20 -05:00
|
|
|
|
2016-06-03 04:28:42 -06:00
|
|
|
|
2016-06-02 14:32:08 -06:00
|
|
|
def check_status():
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-02 14:32:08 -06:00
|
|
|
Check the status of the rubygems source
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-09-07 14:32:47 +09:00
|
|
|
try:
|
2017-04-18 12:26:06 +01:00
|
|
|
return HTTPClient().fetch("https://rubygems.org").code == 200
|
|
|
|
except Exception: # pylint: disable=broad-except
|
2016-09-07 14:32:47 +09:00
|
|
|
return False
|
2016-06-02 14:32:08 -06:00
|
|
|
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2024-01-23 12:57:33 +00:00
|
|
|
@pytest.mark.timeout_unless_on_windows(120)
|
2022-12-05 09:57:32 +00:00
|
|
|
@pytest.mark.skip_if_binaries_missing("gem")
|
2020-04-10 08:30:25 +01:00
|
|
|
@pytest.mark.windows_whitelisted
|
2021-01-30 09:03:57 +00:00
|
|
|
@pytest.mark.destructive_test
|
2017-04-03 17:04:09 +01:00
|
|
|
class GemModuleTest(ModuleCase):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
Validate gem module
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2017-04-17 08:49:59 +01:00
|
|
|
def setUp(self):
|
|
|
|
if check_status() is False:
|
2017-04-18 12:26:06 +01:00
|
|
|
self.skipTest("External resource 'https://rubygems.org' is not available")
|
2017-04-17 08:49:59 +01:00
|
|
|
|
2025-01-18 13:16:13 +00:00
|
|
|
self.GEM_BIN = "gem.cmd" if salt.utils.platform.is_windows() else "gem"
|
2019-01-29 12:41:46 +00:00
|
|
|
self.GEM = "tidy"
|
|
|
|
self.GEM_VER = "1.1.2"
|
|
|
|
self.OLD_GEM = "brass"
|
|
|
|
self.OLD_VERSION = "1.0.0"
|
|
|
|
self.NEW_VERSION = "1.2.1"
|
|
|
|
self.GEM_LIST = [self.GEM, self.OLD_GEM]
|
|
|
|
for name in (
|
|
|
|
"GEM",
|
|
|
|
"GEM_VER",
|
|
|
|
"OLD_GEM",
|
|
|
|
"OLD_VERSION",
|
|
|
|
"NEW_VERSION",
|
|
|
|
"GEM_LIST",
|
|
|
|
):
|
|
|
|
self.addCleanup(delattr, self, name)
|
|
|
|
|
|
|
|
def uninstall_gem():
|
|
|
|
# Remove gem if it is already installed
|
|
|
|
if self.run_function("gem.list", [self.GEM]):
|
|
|
|
self.run_function("gem.uninstall", [self.GEM])
|
|
|
|
|
|
|
|
self.addCleanup(uninstall_gem)
|
|
|
|
|
2025-01-18 13:16:13 +00:00
|
|
|
def run_function(self, function, *args, **kwargs):
|
|
|
|
"""Override run_function to use the gem binary"""
|
|
|
|
kwargs["gem_bin"] = self.GEM_BIN
|
|
|
|
return super().run_function(function, *args, **kwargs)
|
|
|
|
|
2021-01-31 08:57:48 +00:00
|
|
|
@pytest.mark.slow_test
|
2016-06-01 15:09:55 -06:00
|
|
|
def test_install_uninstall(self):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
gem.install
|
|
|
|
gem.uninstall
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.install", [self.GEM])
|
|
|
|
gem_list = self.run_function("gem.list", [self.GEM])
|
|
|
|
self.assertIn(self.GEM, gem_list)
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.uninstall", [self.GEM])
|
|
|
|
self.assertFalse(self.run_function("gem.list", [self.GEM]))
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2021-01-31 08:57:48 +00:00
|
|
|
@pytest.mark.slow_test
|
2016-06-01 15:09:55 -06:00
|
|
|
def test_install_version(self):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
gem.install rake version=11.1.2
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.install", [self.GEM], version=self.GEM_VER)
|
|
|
|
gem_list = self.run_function("gem.list", [self.GEM])
|
|
|
|
self.assertIn(self.GEM, gem_list)
|
|
|
|
self.assertIn(self.GEM_VER, gem_list[self.GEM])
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.uninstall", [self.GEM])
|
|
|
|
self.assertFalse(self.run_function("gem.list", [self.GEM]))
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2021-01-31 08:57:48 +00:00
|
|
|
@pytest.mark.slow_test
|
2016-06-01 15:09:55 -06:00
|
|
|
def test_list(self):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
gem.list
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.install", [" ".join(self.GEM_LIST)])
|
2016-06-01 15:09:55 -06:00
|
|
|
|
|
|
|
all_ret = self.run_function("gem.list")
|
2019-01-29 12:41:46 +00:00
|
|
|
for gem in self.GEM_LIST:
|
2016-06-15 15:41:00 -04:00
|
|
|
self.assertIn(gem, all_ret)
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2019-01-29 12:41:46 +00:00
|
|
|
single_ret = self.run_function("gem.list", [self.GEM])
|
|
|
|
self.assertIn(self.GEM, single_ret)
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.uninstall", [" ".join(self.GEM_LIST)])
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2021-01-31 08:57:48 +00:00
|
|
|
@pytest.mark.slow_test
|
2016-06-01 15:09:55 -06:00
|
|
|
def test_list_upgrades(self):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
gem.list_upgrades
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
# install outdated gem
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.install", [self.OLD_GEM], version=self.OLD_VERSION)
|
2016-06-01 15:09:55 -06:00
|
|
|
|
|
|
|
ret = self.run_function("gem.list_upgrades")
|
2019-01-29 12:41:46 +00:00
|
|
|
self.assertIn(self.OLD_GEM, ret)
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.uninstall", [self.OLD_GEM])
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2021-01-31 08:57:48 +00:00
|
|
|
@pytest.mark.slow_test
|
2016-06-01 15:09:55 -06:00
|
|
|
def test_sources_add_remove(self):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
gem.sources_add
|
|
|
|
gem.sources_remove
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2019-02-19 14:04:45 -07:00
|
|
|
source = "http://production.cf.rubygems.org"
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2016-06-01 16:57:37 -06:00
|
|
|
self.run_function("gem.sources_add", [source])
|
|
|
|
sources_list = self.run_function("gem.sources_list")
|
|
|
|
self.assertIn(source, sources_list)
|
|
|
|
|
|
|
|
self.run_function("gem.sources_remove", [source])
|
|
|
|
sources_list = self.run_function("gem.sources_list")
|
|
|
|
self.assertNotIn(source, sources_list)
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2021-01-31 08:57:48 +00:00
|
|
|
@pytest.mark.slow_test
|
2016-06-01 15:09:55 -06:00
|
|
|
def test_update(self):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
gem.update
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.install", [self.OLD_GEM], version=self.OLD_VERSION)
|
|
|
|
gem_list = self.run_function("gem.list", [self.OLD_GEM])
|
|
|
|
self.assertEqual({self.OLD_GEM: [self.OLD_VERSION]}, gem_list)
|
2016-06-01 16:57:37 -06:00
|
|
|
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.update", [self.OLD_GEM])
|
|
|
|
gem_list = self.run_function("gem.list", [self.OLD_GEM])
|
|
|
|
self.assertEqual({self.OLD_GEM: [self.NEW_VERSION, self.OLD_VERSION]}, gem_list)
|
2016-06-01 16:57:37 -06:00
|
|
|
|
2019-01-29 12:41:46 +00:00
|
|
|
self.run_function("gem.uninstall", [self.OLD_GEM])
|
|
|
|
self.assertFalse(self.run_function("gem.list", [self.OLD_GEM]))
|
2016-06-01 15:09:55 -06:00
|
|
|
|
2021-01-31 08:57:48 +00:00
|
|
|
@pytest.mark.slow_test
|
2017-08-17 10:38:32 -06:00
|
|
|
def test_update_system(self):
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2017-08-17 10:38:32 -06:00
|
|
|
gem.update_system
|
2020-04-02 20:10:20 -05:00
|
|
|
"""
|
2016-06-01 15:09:55 -06:00
|
|
|
ret = self.run_function("gem.update_system")
|
|
|
|
self.assertTrue(ret)
|